Well, my first gig at the new job is well into its second full week, and I’ve got to say it looks like I’ve got interesting challenges ahead. For one, I’m introducing unit testing (and TDD) into a codebase that was written without tests in mind. Fortunately I’ve read (and re-read, and then re-read again for good measure) Michael Feathers’ Working Effectively with Legacy Code. It’s a great source of working techniques.
I have to say, I find quite a bit of satisfaction in conquering an area of code, marking it as mine and covering it with tests. The small victories slowly turn into larger ones, and eventually I may even feel safe making changes.
I was particularly pleased when I had written the bits of a new feature (pluggable in place of an equivalent, pre-existing one) in a TDD way, and then after a while of slow but steady progress, the code rapidly converged to a fully working and more or less finished state. I had the benefit of knowing that this is the way it works, but my guide from the customer company was surprised and delighted.
There’s a lot of work to do, but I’m pretty confident.