In the last year my team was able to successfully adopt the following practices/tools in no particular order:
- Unit testing (mostly Test First or TDD) – we were doing no formal repetitive testing before.
- Continuous Integration using CC.net. – a build you mean F5 on VS? Nant to drive our builds.
- Subversion as our source control system (we have no VCS before!).
- NHibernate (we were using DooDads or simple Ado.NET before).
- DI with Castle.Windsor.
- Mocking (we started using NMock2 but we are moving to Rhino.Mocks now).
- Code reviews and a bit of pair programming.
- Fogbugz as our bug tracking system (we had an in house tool before, but I hated that we also have to do maintenance of this tool and that have no value to the core business).
- Weekly meetings were we watch videos about the technologies we are using or we plan to use, we discuss methodologies or how to better use the tools we have. We read something and we talk about it.
I found this meetings really productive. At the beginning it was difficult for some of the members of the team to participate, to express their point of views; but that have changed. This participation makes for a more cohesive team with new ideas and different point of views.
We started to implement some automation in our regression and smoke tests as well, but we are in the exploratory phase here.
This is a testimony to the maturity of the team and how well they are taking on new challenges. Our next goal is to apply some of the Lean ideas like Kanbam.