A core agile concept, at least as I understand it, is that the developer should write the minimum amount of tests to satisfy the acceptance criteria of a story, and the minimum amount of code to satisfy the tests. All good and well. But I find this narrowed view results in essentially a emergent architecture, which is most likely not ideal. It also creates an ever increasing amount of inconsistency in the code, as each developer can move in different directions. There is no common shared concept of how the architecture should ultimately look.
Did you see the movie A Beautiful Mind? I think of this quote:
Adam Smith said the best result comes from everyone in the group doing what’s best for himself. Right? That’s what he said, right? Incomplete. Incomplete, okay? Because the best result will come from everyone in the group doing what’s best for himself … and the group.
I believe this agile concept, as I described it and most of my fellow engineers seem to interpret it, is also incomplete. I believe the path is to basically do all the same things, but while being in alignment with a well thought out and clearly defined architecture. This way, each developer is moving in much more the same direction, toward that shared concept.
Now I know this does not sound very “agile” and perhaps even border-line waterfall. But I am not proposing that every detail be figured out ahead of time. Just the overall framework, upon which all those details will fit. I also realize that not everything is known at the beginning. But I believe it is still better for everyone to move in the same direction, and when a pivot is required, we all pivot together. This way the consistency of the code is maximized.