Information is the basic building block of software
development and the most valuable form of information is useful feedback. Feedback can come from the customer, the
application’s users, and the development team.
Regardless of the development methodology used the feedback
loop is going to follow this basic flow
Looking at the Waterfall Methodology it’s very easy to see
why it has become dated. When you look at
the basic flow
The first opportunity for the developers to get feedback is
at the end of the Verification stage. Depending
on the size of the project the Feedback Loop for Water Fall can take a couple
of months to over a year. This large gap
between gathering requirements and implementing them makes it very difficult
and costly to fix misunderstood or faulty requirements.
What if the oil light in your car only gave you feed back
every 30 min? If you lose your drain
plug, 30 min. is a long time to run without oil. Software development is the same way, unless
you’re getting regular feedback you won’t know something has gone wrong until
it’s too late and you face costly refactors.
The hardest part of shortening the Feed Back loop is getting
started. It takes not only a change in
behavior but also in thinking. To quote
a great American writer
“The secret of getting ahead is
getting started. The secret of getting started is breaking your complex
overwhelming tasks into small manageable tasks, and starting on the first
one.”
|
Step 1: Short Development Iterations
A project may look large and complex but keep in mind the
Egyptian Pyramids where built one block at a time. By breaking tasks down into more manageable
items you are able to focus on very specific requirements and get feedback on
that specific requirement. I personally
like 2-week iterations; it’s enough time to get things done, without getting
lost in the details.
Step 2: Work in Small Teams
The old adage “too many cooks spoil the broth” is just as
true in software development. Large
teams have the same problems that large tasks do; there is too much going
on. Large teams require too much
coordination, reduce individual responsibility, and only the most vocal get
heard.
It has been my experience that three to five developers
works best. With fewer developers the
team can lack skill set diversity, and with more you run into coordination and
crowd mentality issues. Never have a
team of one.
Step 3: Test Driven Development
Test Driven Development (TDD) is creating software tests to
verify requirements, and then writing the software to perform that
behavior. This provides the developer
with a personal feedback loop to know that what is being created has the
expected result. This also provides the
added benefit of built in regression tests.
Step 4: Continuous Integration
Continuous Integration (CI) is the process of merging code
as soon as possible and running tests to verify everything is working as
expected. CI can be done manually but is
more commonly done with a build server such as Team City, Jenkins, TFS, or
others. This quickly gives software
developers feedback regarding overlapping work, quality control, and overall
code health. This step will quantifiablly improve the quality of your code more than any other single task you do.
Step 5: Automate as much as possible
When automating tasks you are going to get quicker feedback,
a consistent behavior, inherent documentation (by way of the automation
script), and reduces overall costs by freeing up resources to work on more
important tasks.