Why Agile Sucks for Building Quality Software
medium.com
medium.com
The point is that design decisions become better the later you leave committing to them because the later you leave it the more information you can accrue to determine the correct shape of the design.
This isnt just about writing code based upon design decisions but also whether when you write the code whether you double down on a previously made light touch design decision.
There are hundreds of microdecisions needed every day like this and I see "up front first" people double down prematurely and dig themselves into holes unnecessarily constantly.
It isnt really about "when you make the decision" because yes, decisions made today can be cheaply reversed tomorrow if you havent actually done anything with them. It's entirely about whether it's possible to defer commitment to a decision and still achieve your intended goals.
It took me a long time to finally figure this out for myself. My final "aha" moment was that iterative design and product development is really about recognizing that when you are building 99% of software projects, the future is shockingly chaotic, unknowable and surprising and that deferring design commitments actually helps deal with that. You're not building a house or planting crops.
Most bad designs aren't bad for the future that was envisioned, it's just that the future that was envisioned never came to be.
Unfortunately agile is vague as hell and was designed more as a pseudo religion to sell billable consulting hours so it says useless things like "defer design decisions as late as possible" without being explicit about what counts as "a design decision" or what counts as "as late as possible" and the side effect of that is that, like religion, we have to endlessly argue about divergent interpretations.
Sure many agile implementations don't use quality practices and lead to low quality, that doesn't mean those don't exist in agile. The same can be said of all software development methods, if you ignore quality practices, quality will suffer.
All software development has to start with the people doing the work.
My theory for their disappearance is that most managers failed to properly measure their effectiveness.
Edit: Many times I've seen this fail was caused by not having proper processes in place for the type of work done during these sprints - letting them turn into a free-for-all and ending up with two weeks wasted rather than 8 weeks gained.
Rework and refactoring are where the quality gets put back, after technical debt was incurred earlier in the project.
"Agile consultants don’t build software. Their job is to sell training. Software architects and developers have the job of building software. It’s similar to the difference between a film critic and a filmmaker. If you had to make a movie, whose advice would you follow? It’s the same with software. Agile consultants cannot tell you the best way to efficiently build maintainable software because they don’t actually build software. For that, you need a Software Architect."
I personally am extremely annoyed by pseudo-psychology used to justify games and interactions on Retrospective meetings.. I worked in a project that we had to draw every Friday afternoon 30 minutes together something about our feelings...
Retros are often useless though, especially in environments where people feel awkward about speaking their mind.
They also have a tendency to degenerate into whinge sessions about things the team has little to no control over. Other than being a bit cathartic this is usually pretty useless.