Agile Development Using .NET
Software development is important to many of us, so we strive to find better ways to do it.
In the late 20th century we spent a great deal of time and money developing requirements and specifications, thinking through each case and documenting possible uses and outcomes. We would plan a glorious plan before beginning development.
Wait, that never happened.
Mainly we were given a few ideas to go on, then ran to the computer and wrote some code. The Waterfall ideal of design before coding was seldom a reality. Even when there was time to do this, the design had changed so drastically by the time we began coding that it seemed like the time spent planning was wasted. In the end, we would usually have to rewrite it anyway.
What we learned was this: requirements, specification, coding, and design are not separable. Though they can be distanced for a time by process and habit, we are eventually forced to work in a cyclical fashion, reworking the design as the coding unfolds and changing the requirements as the code revealed truths previously unknown. We learned that software development is not like a track race where the analyst completes their laps then passes the baton to the developer. We learned that development works more like an automobile race, where each of the four tires must rest firmly on the changing terrain at all times: requirements, specifications, design, and code. The user needs must steer the code, but it can also be propelled by the technical design and coding discoveries in directions that may not have been clear by requirements and specifications alone. We learned that we must design and build less code more quickly, with tighter feedback loops with the users and business stakeholders.
Enter Agile: Tighter and faster design and coding cycles with more frequent user feedback.
These new cycles result in new challenges:
1. How to keep a team in sync at high speed?
2. How to keep up with testing?
3. How to implement super-fast releases?
4. How to keep the code from becoming a mess?
Scrum addresses the team problem. User stories provide a lightweight requirements and specification framework. User acceptance tests and an on-site customer and product owner offer quick feedback on completed work. Extreme Programming(XP) offers solutions to cover the other bases: Test-driven Development(TDD) stepped in to tackle the testing issue, slimming down the QA step and bringing testing responsibilities back to the developer who implements them the way he knows best: in the code. The release problem is resolved by Continuous Integration(CI) allowing code changes to flow into production as quickly as the team can produce them. Then how to avoid sprint-induced spaghetti code? With refactoring, the steady and continuous reorganization of code keeps it pruned, organized, and under control. Design patterns provide direction for developers to follow while they refactor.
Microsoft Visual Studio .NET provides ways to help us do all these things, the agile way. Here are the .NET options, and a few non-.NET alternatives:
Agile with Scrum
- Visual Studio 2012 with Team Foundation Server(TFS) – video
- TFS Scrum Template
- Backlog Management
- Sprint Planning
- Agile Task Board
- MS 2012 Team Web Access
- Powerpoint Storyboarding (VS 2012 Premium, Ultimate,Test Professional)
- Code Review (VS 2012 Premium, Ultimate)
- Unit Test Template(in VS)
- VSTest.Console.exe(replaces MSTest in VS 2012)
- MSTest, NUnit, XUnit, MBUnit – a useful comparison of these
- ASP.NET MVC Framework
For additional information about the technical aspects of agile using .NET, I recommend these books.