Numerous products kick off with a basic, initial model intended to demonstrate market viability. Often, this model must expand rapidly to include additional features, a necessity that can significantly complicate efforts to scale. This quick expansion can turn the initial model into an unwieldy "big ball of mud," rendering it less effective for addressing core business challenges. Development teams are thus faced with a dilemma: they need to refactor this cumbersome model without halting the addition of new features, which are essential for attracting more customers, scaling efficiently, and achieving profitability. The central question is, how can we navigate out of this complexity while also fostering product growth?
In my talk, I will share the journey of assisting a software development team in dividing into two more focused groups by breaking their "big ball of mud" into several distinct bounded contexts, all within the original monolithic framework. I will present various heuristics, practices, tools, and strategies used to simplify the existing model. This approach facilitated the continuous addition of new features and the collection of user feedback. A significant challenge was the team's initial lack of skills in software design and architecture. I will show how the team, along with their stakeholders, embraced a collaborative software design approach, enabling them to independently design, develop, and run software. This journey led to the development of a strategy to simplify the model, establish an idealised bounded context design, and software engineering becoming domain experts themselves. This approach, in turn, collaboratively guided and drove the product roadmap forward.