Modern mobile products are the quintessence of the founders’ vision and actual market needs. To be successful, a mobile application needs to continually evolve in order to keep pace with changing market conditions. However, not every approach to application development can ensure such success.
Our team understands the cost of delayed releases, so we have put together a set of practices and tools that we use to accelerate an initial launch and to update deliveries.
Before we say anything about engineering practices, it is important to note that a properly tailored scope and feature orchestration is one half of being successful. Starting mobile app development with an MVP allows for the validation your product assumptions without the risk of wasting money on developing more than you need. Develop as minimum as possible leaving secondary scenarios as manual work. Your goal is to get the product into the hands of users and check to see if it overcomes their pain points.
Efficient product scope tailoring includes:
You rarely can envision how a feature should work when you build something new. It requires a few iterations to create a balanced experience for the users features. You need to touch it, feel it dynamically, and understand the end-to-end flow. This is when most ideas come about.
Usually you get to this moment only when the feature is ready. Any changes at this point can double the original estimate and affect the timeline. To save time on rework, we follow the UI First principle. It means that we produce fully implemented UI that can be reviewed, tested, and tweaked before we wire real logic and data into it.
This approach unlocks high speed development and reduces the number of bottlenecks in the process. Moreover, it is not just a UI, we do a simulation of user experience with their goals in mind.
Rework of business logic becomes a burden where small tweaks may take forever to fix and with a UI First approach, you save time.
The UI first approach came from the front-end ecosystem and is sometimes dubbed storybooks. We have successfully adopted it for both iOS and Android platforms. Our UI/UX designers work closely together with developers to ensure that a product looks and feels just right in order to fulfill user needs and business goals.
Regarding the Android platform, my colleague has already covered the benefits of the UI First approach in the following article (see in references).
It is not always a bad idea to reinvent something that already exists, especially when you add something new to it. But when you need something that is already there and works just fine it will just be a waste of time.
We are carefully monitoring best tools and frameworks for modern app development to integrate them into new projects painlessly. For example, if an application has some kind of authentication flow, there is almost no reason to write your own auth solution.
Using one of the most popular solutions (e.g AWS Cognito, Auth0, or Firebase Auth) not only speeds up the development, but also reduces the amount of bugs and, most likely will be more secure than your own.
The authentication solutions mentioned above are called identity providers: they create, maintain, and manage identity information while providing authentication services to mobile applications. In addition to identity management, they can simplify the implementation of complicated functionality, such as role-base access control (RBAC). Also keep in mind that GDPR compliance has never been cheap and easy, so it is better to rely on mature products.
Using popular solutions is not only suitable for identity management. Another good example is implementing chat functionality inside an application, which is always error-prone and complex if you try to create your own instead of using an existing solution. To mitigate these risks we use products like Sendbird or Opentok and focus on the domain logic of the product. The same goes for analytics – you can use Firebase or a similar solution, which will give you a lot of insight out of the box without investing in the development.
During the software application development process, we often face situations when we need to make a release, but certain functionality isn't ready yet. To avoid postponing the release, we heavily utilize feature flags or toggles so we can disable certain features and release the application. This technique could also be used for A/B testing when you want to validate an approach or idea.
A good example of this kind of service is Firebase Remote Config. However, it's not necessary to use Firebase and you can easily write your own config service from scratch on any platform. We often use AWS Lambdas for this kind of service. Additionally, a config service can provide you with the possibility of using feature environments for cases when you want to test specific functionality in isolation. If you want to learn more about feature flags, I suggest reading the following article.
When speaking about modern mobile development, you can't slide over the cross-platform solutions like React Native or Flutter. Choosing a cross-platform framework can decrease your time to market (if you have both Android and iOS apps), however, this way has its own drawbacks. It is always crucial to understand if your app is suitable for cross-platform (e.g if it heavily uses platform-specific features like Bluetooth or sensors, most likely choosing cross-platform solution would not be the best decision).
Consider setting up Continuous Deployment to speed up application releases. Popular and well-maintained products I highlighted in References paragraph. Many time-consuming tasks (e.g. taking screenshots of your application on different phones and tablets) can also be automated with CD tools and save you a lot of time.
A problem which we often face is communication between mobile and back-end teams. Most Mobile teams don't understand how back-end works, while back-end teams are not aware of mobile team needs. In these cases, one of the possible solutions is to add some engineers whose competencies include both stacks.
This will allow you to eliminate communication problems and speed up the development process. From the project management perspective, we see a decrease in the number of tickets sent back and forth. Furthermore, we encourage T-shape development in adjacent web development basics for mobile developers and have seen good results from such practices.
Over the years working on improving collaboration and communication in our team, we coined the following rules that we adhere to at all stages of application development:
After you read this article it may look complicated to integrate one or more of these practices into your settled software development process. Additionally, some of the techniques like feature toggles and a UI-first approach will require investment in the architecture of your mobile application.
However, even if all these efforts may seem too much for you, don’t back down. Think about the benefits – new features and updates available to users without extended delays, fewer bugs, your team working better together – isn’t it worth the effort? Give it a try.
I gratefully acknowledge the help of Sergey Gubar and Andrey Moskvin in writing this article.