Forget Agile and Kanban, understand what your user wants first
Tags: productivity, discuss, architecture, career
Published: 2019-06-05 07:26:31

In the good old days (1990s and before), they used to have something called *waterfall model* for software development. There were several variations but in general, there used to be four major steps:

1. **Design** (Devs and Testers understand what the requirement is from the user)
2. **Coding** (Devs code their stuff and make it testable)
3. **Testing** (Testers test what devs have delivered, catch bugs, go back to step-2 if any found)
4. **Deployment and Maintenance** (DevOps team takes the deliverable and installs it on user's production server). If any bugs or issues are caught, back to step-1/2.

----

Appears quite simple and straightforward, isn't it? But Alas! Those wizened managers sitting in Silicon Valley IT firms decided that this simple development model ain't making no money for them! They need something more magical and mysterious, something they could shove down their clients' throats which neither them nor the clients can understand (for only when they're confused and feel overwhelmed do they shell out lots of monies).

Thus, some astonishing buzzwords were born in the industry such as **Agile**, **Scrum** and **Kanban**. The marketing dudes were taught all the ticks of the trade, *"Oh, we use the proven Kanban technique for software development, sir. And our great methods like TDD and BDD (will turn into some other XDD in a few years!) will ensure that your product will be delivered within deadline, sir"*.

All those buzzwords are in fact needed to justify the millions that the firms rake from their gullible clients. If the firm simply says, "Got your requirements sir, we'll deliver this within 30 days more or less, here are the estimates and task breakdown", it doesn't convey the seriousness of their software business and their ambitions.

The people throwing around buzzwords like TDD and BDD should take a pause and consider it for a moment, do coders doing software development before them didn't test their work? Are things like unit testing and debugging rocket sciences which never happened before?

----

If things like Kanban and Agile actually worked, then software of similar quality would be tested and delivered much faster today than before, don't you think? But does it really happen?

Our predecessors worked with woebegone code editors like turboc, vim, emacs and even notepad. Then came the era of Foxpro, Visual Basic and Visual C++, and they still [churned out some great software using them](https://www.mycplus.com/featured-articles/top-10-applications-written-in-c-cplusplus/).

One would think that today's modern software infrastructure like improved packaging systems (npm/pip/composer), wonderful IDEs (Intellij, PHPStorm, VSCode, Atom), etc. might hasten the development speed, but that doesn't happen at all.

The recent debacle of [Accenture vs Hertz]( https://www.theregister.co.uk/2019/04/23/hertz_accenture_lawsuit/) proves that all is not well with this Agile/Kanban/TDD model of development. Accenture is a top IT firm which is typical of having all the modern processes I just mentioned but even then they failed to deliver a straightforward web development project to Hertz.

I'm not saying that the waterfall model is perfect but what's happening right now isn't any good either. There might be some good things hidden in Agile and TDD too but facts should be separated from mystery and magic, Agile/Kanban/TDD should be brought down to a level where they could be applied to software development effortlessly rather than being abstract buzzwords or mantras which have no use on their own.

On a closing note, I'd like to share with you this excellent meme I recently came across on [Toggl](https://toggl.com/developer-methods-infographic/) which portrays the spirit and gist of this article:

![Agile vs Waterfall](https://assets.toggl.com/images/software-development-methods-explained-with-cars-toggl-infographic-02-f2f4bdec9eeed1a4d20b6b4f0ce9b3b7.jpg)