Behind the Scene: Culture Shock (#3)
Being part of a long lasting cultural change process in a company has its advantages and disadvantages. As a company and as a team we started to introduce Agile in our culture about five years ago. The effects of such a big change are diverse, but here are two of the most important ones:
On one hand, there were changes in the way we organize our work and collaborate with each other as described in our Agile Experience Report published at the Agile Alliance website.
On the other hand, the effects can be directly observed in our application’s source code and architecture. We built our software on the concepts of Clean Architecture as defined by Robert C. Martin. Clean Architecture is a variant of the older and well established Hexagonal Architecture. It mostly concentrates on separating concerns, layers, responsibilities. Designing such an architecture requires intimate knowledge of software design patterns, agile practices, SOLID principles, and some domain driven design tricks.
The immediate advantages of such a codebase are obvious. Decoupled modules allow changes to be done isolated and with a low risk of other modules being affected. This, in turn, results in a lower number of bugs and regressions. Unexpected behaviour is limited when changes need to be done to existing software. When new features need to be implemented, the modules are almost stand-alone and changes to existing code are very few in number. As such, the architecture itself can easily accommodate new code.
“In an ideal system, we incorporate new features by extending the system, not by making modifications to existing code.”
― Robert C. Martin, Clean Code: A Handbook of Agile Software Craftsmanship
Now let’s talk about the disadvantages. After working toward such a beautiful system in a company encouraging anything Agile, you tend to forget how the outer world actually looks like. You start to believe that the whole software universe is like yours, or if it is not, it is on its way to become so. Agile means so much and has so many advantages that you can’t imagine any software that does not strictly conform to it. You start living in your very own bubble universe.
Then you need to collaborate in other projects and reality strikes you down hard. Agile is still a relatively new software development method. It’s about 14 years old; barely defined in 2001. Most of the industry is still using techniques of project management and software development that were defined in the 1970s or 1980s. Those are the established technologies. Those are the ones engraved in our culture. They are tried, applied, and proved methods. Those are what the vast majority of the industry uses.
And it fills me with a strange feeling whenever I realise the sad truth around me.