Computer
science is a young science. Computer programmers my age were trained by
engineers. That training dictated how we approached software
development for an entire generation. But now after decades of building
software to be expensive, unwanted, and unreliable we have come to
realize software is different. Building software is more like creating
a work of art, it requires creativity in design and ample craftsmanship
to complete. Software remains malleable, often illogical, and
incomplete forever.
Agile
software development
is based
on fundamental changes to what we considered essential to software
development ten years ago.
The
most important thing to know about Agile methods or processes is that
there is no such thing. There are only Agile teams. The processes we
describe as Agile are environments for a team to learn how to be Agile.
We
realize the way a team works together is far more
important than any process. While a new process can easily improve team
productivity by a
fraction, enabling your team to work effectively as a cohesive unit can
improve
productivity by several times. Of course to be eligible for such a big
improvement you must be working at a fraction of your potential now.
Unfortunately, it isn't that uncommon.
The
most brilliant programmers alive working competitively in an ego-rich
environment can’t get as much done as ordinary programmers working
cooperatively as a self disciplined and self-organizing team. You need
a process where
team empowerment and collaboration thrive to reach your full potential.
The
second change is making the