This year was just a ride. A lot has happened and these are my remarks so that I can have a reminder once I will try to remember what happened in 2020.
At the beginning of the year, in addition to the routine, I spent a short vacation – a trip to India and the first meeting within the Senior Odyssey program. Odyssea is a program that we have in our company invented for future managers. The threshold for entering the program is quite high (20 people from the whole group will be selected), so my joy of success was great and I was looking forward to flying around the world and solving the project. Although Covid changed the course of the Odyssey a lot, everything was fully remote. Even so, it was great.
At the end of January, our activity around the Koyal project (in Hindi cuckoo) culminated in a presentation at the conference in Kazakhstan. Koyal was the R&D initiative of the previous year, whose task was to prepare the technological infrastructure so that it would be modern even in the year 2030. Logically, we created an environment that in 2020 we designed the most modern possible. We dealt a lot with ideas about how to set up the environment and what it must meet in order to survive in ten years. It finished in 100 slides and a working prototype – a mobile application with a functional backend. It brought us to the infrastructure that I could say a little immodest, comparable to Netflix (we also played with Conductor), or other players who are recognized as market leaders. It would be worth a series of articles and it is difficult to summarize in a few words what was the result of this initiative. Perhaps it’s just that our scope was similar to what was achieved on another project quite well known in the IT community (with a sad ending) from our group, see Velvon debriefieng.
So here just a brief summary of the values which was the ecosystem built-in:
I left the conference in Kazakhstan one day earlier. A colleague was already waiting for me in Prague. He was preparing at that time a presentation of his project for a group CEO and requested my consultation. His plan was to make a super mobile application for the five countries where HCI group operates, with a really big, intercontinental team. It cost a lot of explanations and „blood and sweat“. But in the end, it worked out, we got the trust and a big GO.
We started big hiring, building teams and building a new division.
Technologically, of course, we used the experience from our previous initiative. From R&D, which included about 15 people (my and my colleague’s team), we built a division of 60 people and a total of about 100 people on the project. Fortunately, from the point of view of hiring, it turned out that the technology we chose for front-end applications – Flutter is of interest to many enthusiasts. In general, Flutter was a great choice and it also deserves a separate article (which I will never write :-)). We also managed to recruit testers who wanted to go with us to the point that 90% of their work would be writing automatic tests. We also hired .NET developers who were willing to move from the DEV „box“ to DEV-SEC-OPS. I think we managed to find people who really care about the project – it wouldn’t be possible without them.
For me personally, apart from the technological side of things, it was interesting to be with such a project from the very beginning. It included sizing, budget, plan, technical presentations for countries … etc. I ended the year as a lead of 4 teams (almost 40 people in total). I was primarily in charge of the mobile frontend and testing. At this time, the whole team was already fully remote (I have seen some colleagues in person till after a few months of cooperation). The remote cooperation worked and still works surprisingly perfectly.
I need to mention one thing. When you have a lot of calls (remote sessions) during the day (which is logical for my role of course), there is a problem that it takes more energy than face-to-face meetings. If you spend 10 hours a day on those calls it takes a lot of energy. But when you have fun, you don’t look at losses 🙂
I would stop for a moment in the testing area. In addition to unit tests (both backend and frontend), integration tests have proved very useful to us. Everyone explains this concept a little differently. What we do is that we test entire user stories, both on the mobile phone (so-called UI tests – using a farm of real devices in AWS, but also in the pipeline using a flutter test driver) and on the backend – we are using our own tooling. Why your own tool? Again a topic for a separate article, but simply – it can do what we need, we test continuously on production (we tag test data, we don’t have UAT and everything is tested under feature flags directly on production) and we can scale it a lot on performance tests. We also use this tooling partly for penetration tests. In short, we test a lot, automatically and all the time.
What were the biggest challenges? From an organizational point of view, to start it all. A million interviews, the establishment of teams, and the selection of the right team members, an expansion from 15 to 60 people. From a technological point of view, we built a lot on the previous initiative.
On the mobile, it was definitely a decomposition of the code (divide packages according to business and technical domains, use DDD in every package) – we didn’t want to build a monolith. Although we ended up with monorepo, the code is separated „really carefully“. In general, we spent a lot of time setting up the platform in general. We are constantly working on how best to implement DDD (domain driven development).
It is worth to mention our library of dynamic forms – A collection of flutter and dart libraries providing a solution for Server Driven UI. We are thus able to change screens and entire processes without deploying the application. We can perform A/B testing or offer different screens to users from different user segments over time.
From a backend perspective, we are primarily Cloud-first (MS Azure), We were very inspired by the Cloud-native computing foundation initiative. All containerized in AKS (with Keda), microservice architecture, DAPR (with virtual actors model), non-SQL (CosmoDb) and SQL (Azure SQL Server) databases, API described in OAS with generated models for clients, mock server .. etc All with continuous deployment.
We released the application firstly internally among the group’s employees (approximately 1K people participated), then in India for the public with very small marketing – an increase of approximately 1K users per day. We run the application strictly with feature flags, the release is continuous – backend several times a day, application once a day for a limited group, and about once a week for the public. At Microsoft, they should be happy with us – the whole backend is in Azure, we solve all corporate joys such as DRC and so on.
So what was 2020 like for me? Crazy ride. I hope that no one who jumped on the train with us regrets it. 2020 was definitely the year I worked most, it was a year of great change. It was a very difficult year for the company, I admire that it is able to change under the pressure of today’s COVID reality and a lot of steps hurt a lot.
What is the technology that will survive 10 years in software development? I don’t think, that is about technology. It’s about the ability to respond to changes. About the ability to change something in the project in 2029, something fundamental – a key component or process. Change always hurts and is uncomfortable for many of us. It’s strange. Life is a collection of changes and yet we resist them.