Basil Vandegriend has written about five crucial practices when you’re developing software. Let’s take a look at what he has to say.
- Automated Tests
- Version Control
- Refactoring
- Repeatable Build and Deploy
- Communication
Obviously he’s coming from an Agile mindset. Agile methodologies are essentially to rewrite the specs in terms of “tests” and write those tests as scripts, break the code up into small pieces to match the tests, code quickly, and code in order to successfully pass those tests. And then go back over the code and refactor, tighten and clean up. Pretty straightforward.
That’s why he has the two items “Automated Tests” and “Refactoring;” they’re pretty much straight from the Agile handbook. And if you’re coding quickly, it’s important to run your tests frequently. And if you’re running your tests frequently, you might as well automate them. That way you can just happily burble along, coding up your test-hurdle-jumping scripts and just watch your email for the broken alerts. In fact, I think “Repeatable Build and Deploy” is right there along the automated tests- building and deploying should be as straightforward as typing “make” or “svn export (url);” the fewer different buttons you have to push, the more likely you are to push those buttons.
Don’t get me wrong; I totally agree with him about “automated tests,” “refactoring,” and “repeatable build and deploy.” However, his background and mindset pushes these items into his top five list. I agree for “automated tests,” and for “build and deploy” but I’m not so sure about “refactoring.” Because I tend to plan more in advance and try to figure out the functions and classes I will be needing, I don’t think refactoring is as high on my list.
“Version control” is an excellent suggestion; I really like subversion. I tend to forget stuff, so if I can figure out from the logs what I checked in on a particular day and what the log was (as well as any file changes), then I can figure out where I’m going a lot easier. Especially if you, like me, tend to work on projects and then drop them off, and then work on them after a while. And it makes “rolling back” a change very simple, in those rare (heh) cases where the client changes their mind.
Basil closes with his strongest topic; communication. I think this is hands down the most important essential practice when developing; whether it’s communication with the client or communication with other team members. If you don’t communicate with your clients, you won’t be needing those unit tests or the rapid deployment. If you don’t communicate with your teammembers, you won’t be able to pass your tests regularly. Communication really is the glue that holds the project together.
I think Basil did a good job with these five practices. While I don’t think I could come up with a better list, I’m not sure about his ordering, which, honestly, could be a solid oratory practice.