What techniques can you use to get agile practices into a waterfall project/legacy code base?
Small greenfield project
- smaller, greenfield project
- started with source control (moved from Source Safe to Subversion)
- once SVN was in place, other tools were able to be used
- starting to do CI (TeamCity is free for small teams; can target multiple build mechanisms)
- then the door for NANT (or other unit testing) is open; not only does the code compile, but nothing is broken
- integration tests can also be automated (different build cycle)
- important to pick the right battles
Larger legacy system
- subverted a larger system
- able to show improved testing, better design, code coverage
- bad (badly designed) code suggests bad tests (likely written by the same people)
- first step was source control
- second step CI build
- third step was to move to DI in order to decouple code
Breaking sproc dependencies
- use of WCF services is a great way to put a facade around sprocs
- the requirement for WCF services to implement contracts allow testability
A different approach is to decompose large specs into smaller features so that developers can work in smaller iteration.
At least three vectors for change: developers, business people, technical. There are different techniques with these. It's important to prove the value of the techniques. The names we use aren't really important.
Keys to success
Using the term "lean" development is more politically acceptable than "agile." Manufacturing is moving to lean processes, and it appears to have some government buy-in. This leads to easier PM buy-in.
We need to focus on the fact that "agile" is really about minimizing risk, and increasing productivity.
The definition of "done" is key -- including communicating that definition to management.
Success really depends on having the right people in the driver seat; it's hard to convince decision makers to take a risk on large, flagship products.
Customers must be the ones dictating priorities. However, as developers, we need to be setting realistic goals and expectations. This may require going back to the business people to negotiate.
Communication is key. The solution is not to block discussions, but instead to increase the level of education and communication.
Establish your technical credibility. Once you do this, you'll have support. Sometimes, you'll need to sell management on the benefits. Couch this discussion as a value proposition for the manager to make them look good.
Patience, young grasshopper.