Tech Interview: How Our Android Guild Decides How to Advance the App's Architecture and Technical Foundation
According to Android developer Radek, the success of our highly autonomous dev teams is rooted in technical skills, soft skills, and a “close to perfect” Scrum implementation. Read on and find out why Radek considers this mix rather unique – and how it translates into continuous investment into technical foundation
Android developer, Radek Jablonski, plays a key role in ensuring that MyTherapy keeps up with the latest innovations and that the team can take advantage of new technologies. In this interview, he tells us about the latest improvements that are being implemented, how our Scrum teams are responsible for deciding which technology should be used, and why developers having “soft skills” such as communication are key to the way the teams operate.
By app standards, MyTherapy is fairly old now. How does the team ensure that we continue to implement the latest technology and ensure that this huge bulk of code doesn’t get outdated?
MyTherapy really started getting its first users in 2015. So, while there are of course older applications out there, I would consider MyTherapy a mature app and certainly a major one in terms of the size of the codebase. We’re actively creating new features, so it’s also still a “live” application – not one that is just released and that’s it, it’s done. We are still improving and adding new functionalities and it’s not always easy to keep things up to date. Luckily, everyone at smartpatient is aware that taking advantage of new technologies is an important thing in software development and that putting the effort into keeping things up to date will benefit us in the future. This is understood by everyone from the CTO to all the developers. That’s why we are able to invest time to constantly update libraries, solutions, and architecture.
Do any specific examples of this approach being adopted?
There are many improvements we’ve made, like changing architecture in the presentation layer from MVP to MVVM, rewriting almost the whole codebase from Java to Kotlin, etc. But there are three main examples I’d like to focus on. The first is switching from RxJava to Coroutines, which is a new approach to asynchronous and non-blocking programming. It’s a huge step for us because multi-threading is a core part of our application and it must be stable and reliable. We had a lot of code written in RxJava but decided that Coroutines is the future so, class-by-class, story-by-story, we decided to rewrite it. We now have a few classes that are still in RxJava, but they will be removed soon because it’s our priority to get rid of it and have only one library to handle concurrency.
Another example is to do with databases in MyTherapy. We are migrating our tables and all the data that can be migrated to Room database, which is a better and future-proof solution than greenDAO. Both are an abstraction layer above SQLite, but Room is the easier and friendlier solution. We decided a long time back to get rid of the old one and we are in the advanced stages of migration. It’s still in progress because our application can work without an Internet connection and the amount of data we have means it’s not easy!
Finally, we have one that is still in the beta version, which is the way of creating views in Android. Some time ago, Jetpack Compose was introduced as a new way and new approach of creating the UI in Android. It was in the alpha version for a long time and now we decided to start migrating views and base controls to Jetpack Compose. It’s still done as a separate project because it’s not in a releasable state right now, but we are preparing everything so we will be on track when it is ready to go.
With these examples, I think it shows that we do as much as possible to adapt to new solutions that will be good for us in the future.
When you say it will be good for us, I guess you mean in terms of development. What benefits do you think there are beyond that, for example, for our users and partners?
For us, as developers, I think there are definite benefits. For example, Coroutines is easier to use than RxJava and in the future will likely be the main way of doing things. The same with Jetpack Compose, I believe that in a few years, the way we have been doing things until now will become outdated and every application will have to adapt to the new environment and new world with Jetpack Compose. Because we are on track for preparing for that, it subsequently benefits the business as a whole because doing views in Jetpack Compose should be faster, so we can create new features faster. Because we can implement features faster, this benefits users as the app will improve. The same goes for our partners, who benefit from every improvement we make to MyTherapy as well as specific features we develop for partner programs.
It sounds as though the examples you gave are pretty intensive projects that take a lot of time and resources. How is the decision made to actually make these significant changes?
I would say we are lucky here at smartpatient to have something very close to the perfect Scrum framework. The teams are independent and, when it comes to the technical side of things, we are also independent.
If, for example, the Android guild decides that the best approach for storing data is using Room, then we can do it. We have time to apply new solutions and migrate the data to the new approach.
Our implementation of Scrum is something that comes up a lot in these interviews! It seems as though teams are given a lot of freedom and responsibility to make these decisions, how does this reflect the mentality of the company as a whole and the management?
I think that everyone, starting from the management, is aware that it’s very important to keep the application up to date. They understand that it costs money because we need to spend a lot of time doing it, but that it’s a good investment in the future as it saves us more time. We have fewer bugs, we don’t have duplicated solutions, and we are faster at building new functionalities. So, it’s like investing in the core of the application because software development is all about these technical decisions.
They give us a lot of freedom and trust because they know that we, as developers, are the ones who can make the best decisions and have the technical knowledge, whether that’s iOS, Android, or Backend.
Within the team, I can imagine making these decisions requires good communication and cooperation. How do you find that side of things at smartpatient?
I think the communication side of things is important. Beyond our individual roles and teams, we are really one team, we have a shared goal, which is to build features and functionalities that benefit users. Communication is really important when it comes to things like sharing knowledge with other developers because we have experienced people in smartpatient and everyone in their career has solved different and complex issues. If we share that knowledge with each other it means we can make informed decisions regarding technical issues like the ones we’ve discussed and, beyond that, we don’t have to waste time solving problems that someone else already knows how to solve.
So, cooperation and sharing knowledge are very important here and everyone needs to be open to sharing and learning. Code reviews are a good example. If someone points out that there could be a better approach or to write code differently, you should be open to that feedback as a developer. No one is perfect and you should be able to learn from other people.
You should be open to share knowledge and to receive knowledge from other people, which helps build a better team and to improve the quality of everyone in the team.
We have five Scrum teams at the moment, and we’ll be adding more this year. As more people join and we grow, how do you think we can keep that culture of communication and sharing knowledge alive?
Yeah, smartpatient is getting bigger and bigger! When I joined two years ago there were maybe 30 people, now it’s nearly 100. So it’s a big challenge to share knowledge and keep everyone at the same level of knowledge. We introduced a few solutions to solve this problem. So, on one level we have Android, iOS, backend, and testing guilds, so every tester and every developer participates in guild meetings. We have jour fixes… I don’t know why it’s French… but we have these meetings where we meet with other developers from the same platform and share knowledge about the features we are working on and talk about what we’ve done in the previous sprint We also meet to propose and discuss solutions regarding our platform, so everything we discussed earlier about migrating to new technologies starts here. If someone has an idea to change something, they can propose it to everyone and we can talk about it, think about it, and analyze it.
Another way is to have a meeting with platform leaders, which helps us share knowledge across different platforms and from different teams. We don’t involve everyone in this meeting because different platform developers from different teams might not have too much in common and we want to make sure we don’t just fill everyone’s calendars with meetings!
There’s obviously a lot of importance placed on communication. Beyond technical knowledge, what sort of attributes do you think are important for developers working at smartpatient to have?
Like I said, important principles are to share knowledge and to learn from others. To do so, there are two attributes you need. One is to have experience and knowledge, the other is to have “soft skills.” You should be able to clarify what you have in mind and you should be able to communicate it with others, so it’s quite important to be an open person. I think these are undervalued skills for software engineers because a lot of people think that developers just need technical knowledge and experience to be good at the job. For me, that’s not true because it’s only one side of the job, the other side includes meetings, talking with product owners, showing possibilities for doing things, sharing knowledge. For all of this, you need these soft skills and communication abilities.
As the main technical recruiter for Android, how much importance do you place on these skills when assessing candidates?
We don’t have any particular questions for it, but it is definitely something we discuss after interviews. For example, we might ask a candidate to propose a solution for a feature – I won’t say exactly what it is! – but it is something that can have a few different solutions. It doesn’t really require an overly technical answer but a description of the whole idea. That’s how we really work at smartpatient; when we get requirements for a feature, we should understand what is needed and we should propose our solution to others in an understandable way that makes sense. Of course, this requires knowledge and experience, but it also requires strong communication skills.
So, a candidate might have great technical knowledge but is not able to communicate their ideas. We might have to ask a lot of follow-up questions to understand the solution. On the other hand, a candidate might not have as much knowledge but has better communication skills.
These soft skills might actually benefit the whole team more and mean that the candidate can learn quickly from others.
To wrap things up, do you have anything else you would say to an Android developer reading this who might be considering applying for a job here at smartpatient?
For me, I have worked at big corporations such as banks before, and it is really difficult to get things implemented or changes approved. smartpatient was the first smaller company I worked for, and I was really glad that everything was so much simpler. If you want to introduce something, you can propose it, discuss it, and – if we agree on it – then we can do it. You can really propose your point of view and change things, even if it’s as tiny as adding a column to a Jira board, that isn’t possible in other environments.
That same mentality applies to bigger changes, like the ones mentioned earlier. With Scrum, one of the main purposes is to adapt and to keep checking that things are correct. For new people, it is important to know that they can come in and propose new ideas and new ways of thinking, not just be another person doing your fixed tasks.
We might no longer be such a small company, but we are still in the mindset of the company that we always have been. Even with more and more people joining, we still want to have this environment where everyone can make a difference.
We are hiring!
Are you interested in helping develop a multi-million user app and developing products used by companies such as Bayer, Novartis, and Merck? Check out our job listings here: Careers.