Design and Architecture: Special Dumpster Fire Unit - O'Reilly Software Architecture New York 2019
In their presentation, Matt discusses a failed project involving the rewrite of a system intended to transition from supporting seven customers to significantly more. The original system, meant to handle up to thirty users, was bogged down by a three-year project that extended to eight years without fulfilling the initial requirements. Despite this, the decision was made to launch a second version, promising to integrate additional customers within two years. However, after three and a half years, only a fraction of this promise was delivered, leading to another simplified version to placate stakeholders. This sequence of events resulted in considerable financial cost and demonstrated a series of fundamental flaws in the project's execution.
The issues began with the first version, which was built around the needs of a single customer without verifying if the solutions would apply to others. This lack of validation led to a system that was difficult to expand and riddled with performance issues, partly due to the team's inadequate grasp of the operational dynamics of J2EE. The proposed solution was to develop a new system with a flexible, metadata-driven model and to replace J2EE with Spring, aimed at addressing these shortcomings. However, this flexibility led to ever-expanding customer demands, further complicating the development process.
Matt identifies three primary problems: architectural hubris, with architects overestimating their ability to implement untested patterns and technologies; a disregard for historical lessons, either due to poor memory or the constant influx of new team members; and a lack of product-oriented thinking, focusing instead on project completion, which undermined the ongoing delivery and evolution of the system. These issues collectively led to a cycle of inefficiency and failure, highlighting the importance of experience, historical awareness, and a commitment to continuous improvement in project management and system development.