The project was initiated to build a new product, providing programmatic access to tax estimation data during the loan onboarding process. The goal was to build a system for a particular client while simultaneously preparing a generic solution, that could handle onboarding of new clients in the near future.
A solution was delivered over the course of roughly one year and was successfully launched in full production mode in August 2016, meeting all business-defined deadlines.
To commit to a very tight deadline the Software Mind team had to rock the boat at the very beginning by embedding QA people in the SCRUM teams. Prior to this project, every development team had to use an external QA team to verify all sprint results. The whole process pretended to be SCRUM but in fact it was SCRUMFALL (SCRUM+WATERFALL=SCRUMFALL). Embedding QA may sound obvious for those following Agile principles but it was a revolution for our client by that time.
Another major step was the shift from manual towards automation test suites. Software Mind test engineers were tasked with automating acceptance and regression tests since the very beginning of the project. Working throughout each sprint directly with the dev staff they were preparing automated test suites simultaneously with developers implementing features. Shifting quality assurance responsibility from manual tests towards automated test suites was critical to the project success.
By embedding test engineering professionals directly in the team and heavy automation, the team were able to achieve a fully tested and release-ready code at the end of each 2-week sprint.
The next challenge was adapting to a highly volatile business environment. From the very beginning we knew that the customer would be modifying and adding new requirements on the fly, so we had to work with a “welcome every change” attitude in mind. The team was coding in parallel with gathering requirements. New feature requests were coming in almost until the very end of the project.
It was possible thanks to:
1. Very fast feedback loop between testers and developers (thanks to tests being run automatically for every change in the code). This allowed the identifying of defects within minutes of introducing them in the codebase.
2. A dedicated business analyst person in the team working very closely with the Product Owner and business users
3. Demo meetings built in to the process and ran at the end of every sprint.
In order to reap the benefits and mitigate costs, proper design and tools are paramount. The key to unlocking benefits of rapid software delivery is the proper design of the system. It is extremely difficult to achieve a steady pace of development with a large monolithic application.
The system was designed using modern components and principles (non-blocking IO, asynchronous/reactive coding styles) which vastly outperform “classic” design, reducing hardware requirements and consequently operating costs. Tools introduced by the team (spring-boot and spring-cloud family of libraries) simplified operations, application monitoring (built-in telemetry), resilience (circuit-breakers on external dependencies) and made deployments much easier.
This project is a classic example of how businesses can (and should) shape IT processes. Our deadline looked unrealistic from the very beginning, and to be honest hardly anyone believed it would be possible to deliver on time (the team had also ups and downs along the road). On the other hand, the business opportunity was so big that it generated more of a willingness to introduce changes to the existing process. We tapped into this willingness, introducing a plethora of changes, which paid off in the end. Soon after the delivery of this project, our client introduced a new software delivery process, that went beyond our changes (you can imagine how big of an initiative it was with 10k+ people on board and around 700 running IT systems). We hope our relatively small but highly visible endeavor helped with at least a part of this decision.