“Agile” in software engineering has become the de-facto mode of operation for quite some time now. If what Bill Gates said is true, that “Every Company is Now a Software Company” (Source), then most companies will eventually end up adopting Agile in one form or the other. The Agile principles are no doubt important, but they are also open ended. The principles are closer to being guidelines rather than prescriptions; they provide a general direction and not turn-by-turn navigation. This is by design, since any rigid set of rules would be too confining for the art and craft that is programming & software engineering. The downside is that a lot is left to interpretation. In some cases, I have seen being `Agile` is abused to satiate our thirst for instant gratification. That’s not what the Agile manifesto was intended for.
A typical Wednesday standup. Mid-week crisis. The team is navigating the virtual wall of cards. The updates are usually in three parts, “What happened yesterday”, “What’s the plan for today” and “Are there any impediments”. Short and simple. But a nervous voice breaks the flow:
“What about the defect? It is highest priority. And it is needed fast. So let’s fix it for the short term and add a tech debt to fix it permanently”.
I must admit that I have committed this mistake as well. The urge of the satisfaction of moving a card to the next swim lane is irresistible. It feels like accomplishment and inflates the ego. This is true especially of leaders & managers.
Instant gratification is a scourge of the modern world. It has impacted me personally adversely and I struggle against it every single day. Endless scrolls and instant content on Instagram, Youtube etc. have mis-wired our brains. If a marshmallow experiment were conducted today, even adults would fail it miserably.
In fact there is a rather harsh adult version of the marshmallow experiment. In this experiment people were left alone with their own thoughts in an empty room. They were also given a button which would give them mildly painful shocks. What was discovered that people would rather be electrically shocked than left alone with their thoughts. The modern human mind may have lost the ability to hear its own thoughts. And technology is partially to blame for it. There is an entire attention economy spending billions of rupees to create addictive products.
Our addiction to instant gratification also impacts our work since we seek the same dopamine kick we get when we scroll the bottomless pit of content on Netflix.
A while ago I attended an Agile conference in Pune, India. One of the talks was about the importance of testing in infrastructure automation. As the speakers opened up the session for questions, a gentleman raised his hand. The dialogue went somewhat like this:
Attendee: Why do we need this overhead? Doesn’t it go against the YAGNI principle of Agile?
Speaker (perplexed): Can you elaborate?
Attendee (rather defensively): This looks like too much effort and it delays business value. We may never need it. Not sure if it’s agile.
Speaker: Seems we have a different interpretation of Agile. A robust, replicable and provable infra is a business value nonetheless. But immediate value, sure, it’s a high engineering effort. But all good things take time.
Attendee: Exactly, end users don’t care if you have infra tests.
Speaker: Users will care if there is a crash and the system remains unavailable for hours. Agility does not mean just moving fast, Facebook learnt it the hard way. (Source). What you are referring to are hackathons. They are a different ball game.
Agile is sold as a snake oil panacea by the so-called Agile leaders and coaches. The landscape is full of hype and overpromises. The biggest of the false commitments is quick results. You need to slow down to speed up. That does not mean executing at government’s pace, but by investing in activities that may delay the feeling of immediate accomplishment. It’s OK if that damn card remains in Testing for one more day while all cases are thoroughly verified.
Some simple things I am trying to inculcate in my day to day work are as follows.
- Forget YAGNI. It should be an afterthought and not a goal to begin with. It should emerge organically.
- Kicking instant gratification to make time to improve test coverage of a code base that’s being heavily altered. Taking time to remove code. (Yep, best code is no code). Creating time to address Tech Debts.
- Spending some time planning. Plans are useless but planning in indispensable. Even a bad plan is better than no plan. But one should be careful to not overplan as well, since paralysis by analysis is real.
- Taking time to automate infrastructure provisioning. Automating any repetitive manual task. The ROI of automation increases perennially.
- Doing retrospectives once in a while to slow down and look back. Managers and leaders should talk the least in such retros. Encouraging feedback sessions within team.
- Investing time to meet team’s learning goals. Being patient with new joinees. The phrase ‘Hit the ground Running’ is an anti-pattern.
- The hardest one. Taking a break once in a while. Giving teams some latitude. There is a reason why the iterations are also called ‘Sprints’. But many leaders have made it a ‘Sprinting Marathons’.
- Making leaders and managers a part of execution. Ivory tower agile leaders and architects only create more hurdles.
Most importantly, addressing the instant gratification habit creates a state of Flow for everyone.