Agile has gone mainstream. Companies do it, governments do it, consultants, and contractors. Everybody does it. Right? Maybe not. The metaphor that comes to mind is a group of young men discussing sex. It’s cool, new and everybody wants in. The majority say they are doing but the sad fact is that most of them are lying and those that are actually doing it, are doing it wrong.
After seen Agile done well, and badly I started to become aware of “smells”. These smells are signs that despite of an Agile veneer, it’s not agile at all. A side point is that the word Agile has lost its meaning. It became this silver-bullet-buzzwordy thing and now it’s close to worthless. See, the point is not Agile, the point is to get better at developing software. Hopefully these smells will give you ideas on how to get better at what you and your team do.
Smells no. 1 and 2
Smell no. 3 - Latent/dead code
Complexity grows alongside with the codebase. More code means more maintenance and potentially more problems. With Agile the business can quickly change which features are relevant and which aren't. The team should keep the codebase in sync with these decisions. Don’t keep a feature that has been deemed unnecessary. Doesn't matter if it happened because of a change of heart or because the feature failed to actually deliver the expected value. Keeping the code and tests, and maintaining it all is a smell. Delete it! Don’t comment it out. Delete it. That’s why we use source control systems like Git or SVN. If we need historical code it’s easy to rollback and bring the old feature back from the dead.
Smell no. 4 - Cubicles
Collocation is a key practice. Most of the practices and principles in Agile are about communication. In reality it feels like a huge excuse to keep people talking to each other. If your team after stand-up disbands and sits isolated from each other, the business in another floor and testers in another building that’s a smell. Granted that in some cases collocation is impossible, e.g. distributes teams across countries. The smell here is when people can collocate and won’t. Usually there’s a justification like "it’s too hard to concentrate" or "we can’t move partitions", etc. How serious are you about getting better? The value of spontaneous conversations and the ability to overhear team members making decisions on the fly is enormous and instantaneous! No meetings or emails required to relay information. It just happens! Bottom line, if your team still organised around functions instead of work and chooses to avoid sitting closer to each other you have a nasty smell in your hands, or nose.
Smell no. 5 - Test phases
An often misinterpreted concept is testing. Testing isn't about catching bugs, testing isn't about defining a plan, testing isn't about black box. The sole purpose of software testing is to provide quick feedback so the person who wrote code that isn't adequate gets alerted, ideally instantaneously. Testing has to be part of development and vice-versa to ensure time proximity. Long feedback cycles are wasteful and don’t foster learning. Humans tend to learn poorly when the reaction to an action is spread over a long period of time. Consider someone putting a finger into an electric outlet and nothing happening. Then two weeks later, when merrily walking down the road, that someone gets zapped. Will that person learn not to stick finger in outlets? Probably not.
When action and reaction (or code change and defect) are too far apart in time the person who should have been alerted will already have changed contexts and most likely will be working on something else. This forces task switching and loss of precious details that are now long forgotten. The smell here can present itself in several ways. It can look like three iterations of development followed by one iteration of testing, an iteration dedicated to UAT (User Acceptance Testing), phases that only involve testers doing testing or, my favourite, story cards piling on the "Testing" column and all developers crunching code non stop.