I joined a project that had been running for a while that wanted help with scaling, in terms of scaling the development team effectively, scaling the codebase while managing complexity, and scaling to meet the needs of a growing number of users. The project had been successful in the business based on delivering a large number of features, but this had come at a cost to architectural health. I was responsible both for leading the developer team, and for planning transformation work to fulfil the architectural needs of the platform.
A lot of the improvements that I brought in were around ways of working, encouraging things like better collaboration within the team by breaking down the barriers between different specialisms, processes like GitFlow and peer reviews, and encouraging healthy retrospectives where the team were empowered to own process improvement.
One of the particular challenges was that the test coverage of the solution was primarily via automation. I worked with the team in coaching unit testing methodologies, which mainly required changes in how the team approached design of components – the SOLID principles – to establish templates for how do deal with common scenarios. These tests were implemented in a BDD format, so that the behavioural specification could be worked on by a non-technical audience.
The technology stack of the platform was a suite of web applications, with AngularJS clients and ASP.Net MVC/WebApi server, with a RavenDb database, and a suite of NServiceBus services. Among my objectives was to plan and implement improvements to this stack, particularly focussed on reducing complexity, and improving the team’s ability to iterate.