This is first part of series of articles about “Complete Set of Tactics for Reducing Tech Debt: Lessons Learned from 14 Years of Building Java Enterprise Systems”.
In the beginning of 2010, a client approached Avra (at that time under the ‘Makrologic’ brand), the software development agency I worked for, with a big vision for a new enterprise system. The system was to be a B2B platform for employers to provide additional benefits to their employees, such as sport cards or free lunches, which employees could purchase using the system or special cards at local restaurants. The client was not familiar with the technology, so my team had the freedom to choose the best-known technologies at the time. The team consisted of Bartek, CEO of Avra, Wiktor – business analysts and senior backend Java engineers Wojciech, Piotr, and Kuba, as well as frontend engineers.
We followed waterfall methodology and started the project with the MVC approach. For that we applied our Custom System Solutions service. We used jsp and jQuery to develop the system, which was the popular choice at the time. We applied appropriate design and architecture patterns and the best-known practices of the time, such as DRY rules, and continuous integration. We used Spring Framework and Hibernate as our go-to frameworks, and the JVM tech stack. However, we were lacking all the good things that are now available, such as containers and clouds.
The client was a startup, who fought for its first customers and place on the market. It was obvious that they were pushing us to deliver more and more without focusing on the tech debt that was growing. We kept the client updated about our progress in an iterative way, and Bartek’s presence in the team gave the client confidence that the CEO was keeping an eye on the project.
Despite following the best-known practices at the time, we weren’t monitoring the performance of the system sufficiently. The client was pushing to get all their features ready for their first big client.
Little did we know that this approach would lead to a big failure in the next phase of the project.