How development teams worked with kreuzwerker to optimize an app that saves farmers time, money and stress.
365FarmNet is a multiple award-winning software solution for agriculture. Its transparent work processes help farmers save time, money - and yes, stress too.
Just as 365FarmNet helps farmers to independently manage work processes, kreuzwerker helps app developers to develop and practically implement ideas for even more customer-oriented solutions.
After deciding to redesign the architecture in a purely event-driven microservice approach for the 2.0 relaunch of the online solution, the developers decided to stop working on the existing mobile apps. Instead, a new mobile application was to be developed - with the goal of having a good alternative to the traditional web application available. Clear advantage: farmers could spend less time in the office in front of the computer. Flexible working becomes possible, even while they are on the road or otherwise busy in their fields. It’s all so easy to say. But how did 365FarmNet come up with a solution that was both effective and efficient? And what hurdles had to be overcome?
In the past, it took a long time to introduce new functions or changes. Yes, of course, the app first had to be adapted for iOS and Android. This was followed by waiting for the approval process in the stores, and there was no way to ensure that the apps were really updated. A tight coupling between the apps and the web platform forced the app developers to constantly learn about changes on the platform and adopt them for the app. User adoption? Less than hoped for.
And now kreuzwerker come into play
What to do? 365FarmNet brought kreuzwerker into the fold. Together, they decided to rethink the architecture and introduce a backend-for-frontend (BFF). This reduces the app team’s dependency on other teams. It also enables much faster changes because it contains most of the business logic, and the app code itself does not need to be changed. Furthermore, it leads to higher consistency as multiple implementations are not necessary. Last but not least, tailored responses can also reduce data transfer and thus increase usability.
The mobile apps team is made up of mobile and backend developers. With the kreuzwerkers, additional development power was added, which helped to create a scalable and resilient BFF based on Spring Boot and cloud-native technologies. Also, not to be underestimated: the external perspective of the project! It was a perfect eye opener for those who had been working on the project for a long time.
As part of the 2.0 relaunch, an event-driven architecture and Kafka were chosen. The Avro schema and the Confluent schema registry were also used. The mobile app team took a lead role in the rollout, as their BFF had to consume pretty much all topics and was often one of the first consumers of new topics. As a result, the team realized early on that there was some misunderstanding about what changes in schema the compatibility modes allowed. So, kreuzwerker helped run a proof-of-concept to test the different modes and clarify their impact. Finally, the best mode was determined together, thus simplifying the integration for further teams.
New solutions result in new challenges!
Not only the architecture, but the organizational structure was also adapted. This brought along new challenges in terms of adapting to business requirements and implementing new functions. In the previous monolithic approach, APIs were often tailor-made for exactly one front-end and developed within one team. Unfortunately, it’s also easy to forget that other API consumers may have different needs. A simple example of this is validation. While it’s easy to define client validation within your own team, other teams can’t add their own validation. So, they are therefore faced with unrecognizable errors.
To improve communication and coordination between teams, Communities of Practice were created for each necessary topic. 365FarmNet and kreuzwerker collaborate within the API Policy Community of Practice to improve error documentation and handling. This has enabled a simple and clear error definition for API usage.
The increased use of cloud technologies and containerized microservices made it necessary to take test automation to the next level as well. kreuzwerker established the use of test containers in the mobile app team and worked on defining test standards as part of the quality assurance Community of Practice.
To keep test runtimes low in the newly distributed architecture, kreuzwerker introduced contract testing with Pact as a completely new testing approach. After several workshops and the launching of a reference implementation, it was used by all teams. kreuzwerker naturally keenly accompanied this process and provided continuous advice and support.
What happens next
Since the mobile app team is usually the first third party to use other teams’ APIs, kreuzwerker helped establish new meeting routines to ensure regular, cross-team communication. In this way, kreuzwerkers raised awareness of potential pain points for later users.
Once again, it was important for kreuzwerkers to work with the client to develop solutions that would enable them to further develop the app themselves, in this case to cultivate the digital field for farmers. Farmers now have a mobile solution in their hands to not lose sight of the big picture while on the go. 365FarmNet for 365 days of clear conditions and smart work.