Software engineering process has become synonymous to using Agile methodologies in the contemporary era.
Almost every enterprise is using it nowadays.
But WTF in Agile?
Software engineering is a stream of engineering. Is there any other engineering stream, in which, such philosophies are followed?
Mechanical and Civil Engineering for eg are way matured in their process flow, which btw, has evolved over time. How does Agile find its place in this ocean of options?
The Perils of Engineering Streams
Software Engineering is unlike any other stream of engineering.
It’s different from Civil Engineering, where we erect enormous structures (skyscrapers, bridges, dams, etc), or Mechanical Engineering, where we build products and machineries (cars, turbines, etc.)
How is it different, you ask aye?
Stages of Product Engineering
The typical stages of product engineering is as below
Plan -> Build -> Maintain
Let’s look at the cost of these stages as a function of time.
For eg, let’s look at the stages for constructing a skyscraper.
The cost, during planning is negligible, because, there are very few people doing it and also, we do not procure any material as such.
It increases substantially once we begin building it, owing to labour, material and other procurement costs.
The cost of maintenance is much lesser compared to the cost of building of course.
Another thing that stands out in the diagram, is that, a lot of time is spent in Planning.
But why so?
To answer that, let’s try to understand, at what time does the product actually deliver some value.
We’ll update the diagram to reflect the value of product over time.
So we see, the skyscraper is only valuable, when it’s completed and ready for the world to use.
So what until then?
All the investment of time and effort is a risk.
Which is why a lot of time is spent in planning, just to ensure these risks are mitigated.
Remember… these risks are extremely expensive…
Because, the cost of change during the later part of the build or maintenance stage, is humungous.
This includes cost in time, as well as money.
You cannot remove a floor after its built, can you?
There is very little flexibility for change in the later stages of the lifecycle.
This is why a lot of time is spent in planning, to ensure that, all edge cases are covered and risks are captured.
Subsequently, these risks are analyzed and a strategy is hatched, to prevent or overcome these risks.
Now that takes time… a lot of time.
Lots and lots of time.
The Uniqueness of Software Engineering
Software products thankfully are unlike any sky scrappers.
That’s obvious, because they go beyond these towers, and reach the cloud !!!
Jokes apart, software has two distinctive USPs
- Low Cost to Change
- Low Cost to Distribute
Feedback from Users
Because software has very “Low cost of distribution”, we can share it with the world very quickly.
Remember, how easy it is for us to install a new app on the phone or a new software on our laptops.
And with tons of new ones coming out each day, its just exciting for many “app-buffs” to try them all out.
The users of our software, thus use them and provide us with invaluable feedback.
This feedback helps us identify the risks in our design early.
We can have this feedback drive our innovation by incorporating the learnings into our design.
Now, because software also has “Low cost to change”, we can implement the learnings rapidly.
We can break the learnings into smaller usable features and work on them in an iterative fashion.
And, continuously distribute it to our users, who can use them and revert with feedbacks.
Once again, we can fuel this feedback into our iterative development.
Now we enter the age of Rapid Iterative Development with continuous feedback.
We enter the “Age of Agile Development” with continuous improvement
So, we quickly transform from fixed to flexible
So we are able to deliver value incrementally unlike in any other engineering stream.
This not just lowers risk, for we also have umpteen opportunities to course correct.
Agile for Dummies
So, now that we know we are doing Agile, let’s try to define Agile Development to a lay man.
If you are expecting some factual, text book definition… I’m extremely sorry to disappoint you, I’m not going to give you that.
What's in a logo?
Deutsche Bank, has a very interesting logo which looks like below:
What’s in this logo, you ask aye?
Looks simple and sweet,
A square and an unconnected diagonal… so what?
WTF in it?
When the CEO was asked what the logo meant, this is what he explained.
The square represents constraints…
The diagonal represents, growth…
Deutsche Bank, is growth within constraints.
Take a bow!!!
Great explanation… Well, that’s exactly what Agile is…
But how do you grow in a constrained environment?
The answer is FEEDBACK !!!
Aye!!! Way to go! Spot on!
So, Agile development is
Growth within constraints with constant feedback
Agile as the way of life
If you have mistaken, Agile is not just about software.
Agile is the way of life.
The real world is full of mysteries. As we step into it, we can never guess what’s round the bend.
Often, we reach crossroads, where we are cornered to make a choice.
But, when one doesn’t even know the destination, how does one make the choice?
Go Agile Folks… Wherever possible.
- Choose a path from the options available, based on cognitive reasoning
- Honestly accept the fact, that the path you choose, on hind sight, may not turn out to be the best choice, further down the line
- Remember the Law of Conversation of Thought, - Learn from the journey and take smarter strides
- Completely accept the fact that even this stride, might not be most prudent one, on hind sight
- Take smaller strides and more feedbacks
- Let go and move on… Learn from everything and everyone
I found a brilliant video, summarizing the above. Do have a look.
Cya until next time folks.