Do You Know the Six Different Roles of an iOS Developer?

An in-depth guide into these fascinating areas

Pedro Alvarez
Better Programming

--

Image from https://br.pinterest.com/pin/809662839247050865/

I have been developing iOS for the last five years and have worked for various companies — on different projects, architectures, teams, cultures, and approaches. As I have earned some experience in these huge environments, I decided to write this article for you, who is totally new to the corporative world and doesn’t know how teams work and the great responsibilities you may have in your company.

The iOS Developer Flavors

Image from https://www.tastingtable.com/901159/ranking-ice-cream-flavors-from-worst-to-best/

The first thing I should mention is that, incredibly, not all iOS developers in your company (at least in all the ones I have worked with so far) have the same kinds of responsibilities, tasks, and relationships with other team members. Actually, it’s great because our environment gets a rich, diverse culture and experiences to demonstrate and teach other fellows.

In addition, great new startup and organization ideas may rise from this. When you work in a big company (or maybe just a small one), you will encounter a huge variety of teams, each with its own business concerns and different projects, products, timelines, and everything.

Some time ago, I recorded an interview where I was asked what I most liked to do in my career. There were plenty of options, such as producing UI content, creating new SDKs, consuming API endpoints, taking care of analytics, and more. It’s not that you cannot work with all those tasks in your job. You can.

In my company, I work a little bit in each of those during the day, but the bigger company, the more specialized you may become in one of them. It means some teams are exclusively responsible for the design system, analytics and instrumentation SDK, and the so-called verticals.

This name was adopted in my country, but it may also be called consumers. I shall explain each in the following lines of code and the relationships between those stakeholders. I will illustrate this article with a banking startup example for demonstration purposes.

1. Design System Developers

Image from https://wallpaperaccess.com/design

All the companies have an app with a provided design system. If you are unfamiliar with those terms, check out this other article. For short, it’s a single module (or maybe a set of modules) that provide(s) the visual identity of your application with some UI components and resources.

Unlike other positions, the design system ensures developers don’t attend product meetings so often because they don’t work directly with business rules. For your information, the artifacts they produce are just pure interfaces without any logic. The demands are “build a new view that has two aligned labels and a scaled-to-fit circular image at the left.” DS devs work a lot with Figma and attend requests from other teams.

Build this kind of component that multiple teams shall consume

DS developers must be highly skilled in user interface building, feel extremely secure with UIKit (and SwiftUI, depending on the company), know how to build a new interface with storyboards, xibs, ViewCode, and also but not less important: fix UI bugs.

Usually, the design system relies on a single module with all the possible resources you need for building UI for the entire project. Still, you may also separate UI components, images, colors, typography, and other assets into different modules. It depends on the architecture.

Example

If we are working on a bank, the DS developers are in charge of building components to represent different visual contexts, like a cell for vertically aligned credit card data, a carrousel for payment methods, and anything that can fit some screen. But they are not even aware of what these components will represent semantically.

Core responsibilities

  • Create iOS reusable components (UIKit/SwiftUI)
  • Analyze UI/UX requirements (for example, Figma, Zeplin)
  • Provide reusable assets

Who do they communicate with the most?

  • Designers
  • iOS developers from other verticals
  • Android and web developers
  • Product leaders

2. Analytics Team

Image from https://bdasolutions.com.br/2020/02/4-motivos-para-voce-se-especializar-em-data-science/

That is a team, as the name says, and it is responsible for events instrumentation. All the flows in your app should be tagged into some tool like Adobe, Firebase, and Google to track how your final user interacts with the system you just built. All this data is sent to data scientists, who shall transform and analyze it.

It’s essential to know how much time users take to exit a specific screen, complete a flow, or use an essential button that simplifies their journey, but for some reason, they rarely click it. Data becomes information, and information becomes knowledge, which could bring us possible modifications in the flow or detect production bugs.

The analytics team usually has an entire ecosystem of SDKs responsible for tagging events with corresponding complementary data. For example, they could tell what was in a text field when I clicked the button or see if the API response succeeded. And usually, a Facade to multiple services depends on the client team and the respective tool.

Core responsibilities

  • Create reusable mechanisms for tracking events across different contexts.
  • Consume Analytics APIs (for example, Google, Firebase, Adobe)

Who do they communicate with the most?

  • Data scientists
  • iOS developers from consumer teams
  • Android and web developers

3. Support Team

Image from https://safetyculture.com/topics/maintenance/

Not every company has a support team for mobile, but it’s a very important role despite not all software engineers enjoying being part of that. All the other teams are responsible for creating new content, but this one is responsible for fixing bugs and providing consistent ways to prevent your application from displaying undesired behaviors.

This team relies on documentation since complex flows are not trivial to be understood. They need to know how to reproduce each scenario and clarify which type of user is required for that and which flags should be enabled. They communicate directly with the consumer teams and should always track which bugs are on the backlog, which ones have the biggest priority, and explore risk analysis.

Also, when solving bugs, it’s very important to communicate directly with QAs since they are meant to know how each flow, experience, and output works.

Example

Suppose there is some legacy bug affecting all the other teams to achieve the cards hub, for instance. In that case, the support team should provide a way to give access for the other teams to reach this flow and also elaborate on the way to avoid the same happening in other parts (maybe with a new design pattern?)

Core responsibilities

  • Solve bugs
  • Identify possible risks in the current architecture (what could impact the project)
  • Risk analysis

Who do they communicate with the most?

  • iOS developers from consumer teams
  • Quality assurance
  • Product leaders

4. Platform Team

Image from https://wallpaperaccess.com/human-brain

I would say this is one of the most critical teams inside the company. The platform team deals with all the core features inside the app, which all the other teams shall consume. This team is responsible for all the architectures, design patterns, core classes, core data types, and primary flows. They should be aware of all the logic that concerns multiple classes, how the modularization should be implemented, and manage the legacy structures to not affect any other team.

Also, the platform team should be provided with great documentation about the general business logic of the project. If they are going to implement, fix and add new features that reflect on all other teams, it needs to be extremely clear and complete.

The platform team should also have a vision of the long term and always be kept up to date. For example, when Apple first released SwiftUI, the first thing platform team members should consider was how they could fit the project in the future, deal with all the legacy code, and respond to huge changes over time. They should think about all possible major project changes to achieve the most reasonable compile time, readability consistently, and decreased coupling.

Another great responsibility for these folks regards the Git flow for the iOS project. As a tech lead, you should think and plan how the CI/CD should work, what you want to prevent from going into production, and what important branches the consumers should be aware of for each release purpose. These branches may be a hotfix, develop, master, epics, etc. I shall write another article explaining git flows deeper.

In a few simple words, do you remember the Common module almost all iOS project relies on? This team usually takes care of that.

Example

Regarding our bank company, the platform team should provide all the Facade between network SDKs, create classes and methods to make a currency conversion, and elaborate major business rules for dealing with currencies that consumers could use.

Core responsibilities

  • Architecture decisions
  • Create and give support to the major classes and other types across the app
  • Prevent live bugs
  • Keep the project up to date with Apple’s API changes
  • Risk analysis
  • Create and build the Git flow
  • Modularization

Who do they communicate with the most?

  • All other iOS teams (primarily consumers)
  • Product leaders
  • Android platform team
  • Backend teams
  • Designers (if some features regard UI components)

5. Localization

Image from https://br.pinterest.com/pin/738871882600230962/

This team exists when we deal with an international company with clients from multiple countries and languages. This team is meant to operate with the localizable files, receive all the content of English strings from the product team, translate them to multiple languages, and create these new localization files according to a specific language.

Usually, their demand comes from the consumer teams, which create new strings across the project inside the English localization file (or whatever the app’s original language is). They are responsible for translating that and sometimes providing a specific interface to each country.

Example

In our bank application, we create a new card details screen with some standard content like the strings: “Here are your card details,” “Invoice,” and “Request a new card.” The Localization team should translate all these texts.

Core responsibilities

  • Translate all the app’s content that doesn’t come from all set APIs
  • Provide specific interfaces to specific regions

Who do they communicate with the most?

  • Product team
  • QAs
  • Consumer teams

6. Consumers

Image from https://www.shutterstock.com/image-photo/businesswoman-hand-using-smart-phone-tablet-1898650408

Last but not least, the consumer teams are all the squads implementing features related to the application use cases. In other words, although the platform team, analytics team, and others rely on each other sometimes, the only responsibility of the consumer teams is to create UI flows following the Design System.

They’re also responsible for consuming Common features, tagging analytics events, bringing new content to be localized, and having its major production bugs solved by the support team. Their screens and classes are restricted to their own module, and because of that, they are not meant to tag their types and methods as public.

They are responsible for keeping the other teams aware of their necessities, like new UI components that could be reused across other features and some legacy ways to perform calculations.

Example

The consumer teams regard the specific use cases our projects should attend. Here are some possible consumer teams: Card Invoice, P2P transactions, Wallet, Enterprise Transactions, Promotions, Rewards, etc.

Core responsibilities

  • Have excellent knowledge regarding the use cases they deal with
  • Build new screens and logical classes attending their own context
  • Perform unit tests
  • Follow the proposed architectures in the iOS skill chapter

Who they communicate the most

  • Analytics team
  • Platform team
  • Android/web/backend developers from their own team
  • Other consumer teams whose flow intersects with theirs
  • Product team
  • Quality assurance
  • Designers

Conclusion

In this article, we provided a lot of different roles you can play in your company as an iOS developer. However, you should know that during your career, most of the time, you will not choose which one you are gonna take. Still, it’s essential to understand how each one works and who you will work with.

I hope you enjoyed it ;).

--

--

iOS | Android Developer - WWDC19 scholarship winner- Blockchain enthusiast