Everybody is talking this “Agile Software Development”
thing. Following is to explain the basics.
Skyscrapers and waterfalls
First, let’s see
what non-agile is supposed to be. Skyscrapers
have to be well planned and designed before start building. This is
because, it is big trouble to change design-plans midway. It is not very cost
effective to change the base holding-structure after building five floors. This
pattern of designing before building is true for many types of projects; like
building bridges or building cars. These projects go through some activities
like plan, design, prototype, validate, get customer approval… and then start
building. In the software development world, this way of doing projects in
sequential stages (like analyze, plan, design, build, test, deploy etc.) is
known as the “waterfall method”; as
activities flow one after the other. Traditionally, when software developers
got a problem to solve; they analyzed the problem, designed a solution, built
it, and then delivered the promised product to the customer (some named it
waterfall methodology).
Typewriters and waterfalls
Twenty years ago… typing
documents using type-writers were a well-planned activity too. Documents
needed to be well planned on paper before actual typing started, because the
tool did not allow us to shift paragraphs or insert new sections midway.
Modern word-processing
software goes flexible
Today’s current word
processors allow us to start typing a document without any plans. We know
that the software allows us to change anything with ease. So… current word
processors allow us to be very “agile”
(or nimble) in the process of creating documents. We can start typing, show a
first draft to the boss, incrementally improve the document based on feedback
etc. We do not complain that the documents are difficult to change after typing
or not having needed skills operate the tool.
Software development tools
go flexible too
“Software Development Tools” also started to get matured
like the “Word Processing Software”. Process of implementing changes (or
enhancements) started becoming easier. In other words, allowed us to be more
“Agile” in building software.
Gist of the above
explanation is that… at the heart of “Agile” is the ability of
modern-software-development-tools to implement changes with little effort. And
the developers itself be well trained in the process implementing changes;
using the tool at hand.
So this idea
that “software development tools allow us to implement changes at will” caught
on… that the tools now allow us to embed designing and planning
into actual building.
Now we can just start building… show output to customer… get
feedback… implement changes… refine the output… add new pieces. Keep on showing
the incremental results over and over again to the customer till the customer
is happy. Then… why don’t we bring the customer into the development team too;
to direct the development-process-outcome itself as it is being built (no major
upfront planning needed, let’s change as see fit). Then they thought… if the
customer is sitting with the development team, maybe we don’t have to create
unnecessary intermediate design documents to get customer approval too; as we
can show the solution result itself easily (instead of first designing on
paper, let’s show the actual working product; then change based on feedback).
This could make the Software-development-process more efficient too.
The idea that the most important deliverable in software
development is the solution; and all other effort is to support this outcome.
In other words…. today’s software development tools now
allow us to start building from day one (at minimal cost to fix mistakes or
change direction), solution visibility from day one, customer feedback early;
on delivery direction and value. Feedback based enhancements… thoughts went on.
Then… some smart people got
together in 2001 at a ski resort in Utah… and formalized this “Agile” idea; and called it “Agile Manifesto” (http://agilemanifesto.org).
Today… there are many formal methodologies that are claiming
to be agile oriented (Extreme Programming, Scrum etc.). “Agile Development” has become an umbrella-term to cover many
methodologies that are based on ideas like “Non waterfall”, “build in small
cycles” , “iterative output”, “embrace change”, “let owners see results and
request changes”, “let owners add enhancements during build” etc.
What we should not forget is
that for agile to work well; the basics are…
- Tools should allow for easy rapid changes.
Keep in mind that not all software development tools are created equal…. Pick tools that are better suited for non-planned changes.
Today’s software tools are good, but not magical enough to allow any mid-cycle change with no effort.
- People should have needed skills to… use the tools to accommodate rapid changes.
If not, you will start hearing statements like… “this is a big change”, “that change will take a lot of time”, “I have to re-engineer more than a few existing modules to do this change”.
- Even if the “agile” model thrives on “change”… lesser the changes needed the better it is.
A bit of planning, designing or thinking-ahead at the right time will go a long way in pointing in the right direction.
straight path to the solution is more cost effective than zigzagging without a plan.
Plan ahead a bit, as effort needed for some changes could be more than you bargained for.
Plan ahead a bit, as some drastic mid-cycle changes could cause more pain than value.
- Common sense and sound experience beats it all…
Agile methodology may work better for certain projects. Agile methodology may work better in certain stages of a given project etc.
Incorporate heavier upfront analysis or design when the need is obvious.
One day far in the future… when skyscrapers are built using
easily re-configurable tiny cubes… skyscraper engineers too will be arguing
about agile-scraping.
Some Agile
Development Methodology related myths
- Agile only means no unnecessary documentation needed.a) Need documents to handover to other teams.b) Need documents for Training new employees. c) Initial developers may move on or forget eventually.d) Regulatory or Approval requirement may call for documents.
e) Most importantly, when something goes wrong after two years… and your boss wants to show the design to other bosses, if you do not have pretty design documents, you are in trouble.
- Agile does not need architecture or design. Planning with experience will set the direction to minimize changes; and improve solution value.
- Agile is only for small projects.
There are many examples of successful large agile projects in the real world.
- In Agile… effort needed, time needed and the outcome itself… is unknown; as the end is not planned for in the beginning.
This totally depends on your approach, how much to plan upfront.
In a regular project… upfront planning will help you identify big buckets and estimates. Then you will be able to identify and adjust for scope-creep or unexpected.
Question
What if there is a project that is to be delivered in 6
months; and final solution qualities are well defined and understood.
Will design and build the solution in a “waterfall method”
be better than using “Agile Method”?
[Argument is that… why bother with iterative, multi-cycle
development… when we can do it in one cycle; as the needed exact outcome is
known upfront]