Three core pillarsWhich are the main pillars of software construction? IMHO there are three ones you should never skip: version control, task management and testing.
If yours is a mature, well organized company, you probably better skip this post because I’m afraid I won’t tell you anything new…
If you’re still here you probably want to see how wrong I am… :-P
Well, just applying these pretty simple concepts: tasks, versions and testing, a development group can move from some sort of chaos to a rather controlled process in just a few weeks (and it is compatible with agile methods if you prefer).
I will start with task management: what if every single operation you perform in your project (whether it is code or diagrams or some sort of documentation, it doesn’t matter) is a task? A task is an entry in a system (you could draw it on a blackboard but I would strongly recommend you consider something like FogBugz, Jira, TechExcel’s suite, Bugzilla, Mantis or any other of the available bug and defect tracking systems) with a headline, a description, a type (it can be a bug, a new functionality, a code review, a refactor…) and the ability to get someone assigned to it. Sounds familiar? I guess it does!
But many companies out there fully control bugs reported by their customers, but they don’t do the same for their internal implementation activities (new functionalities, internally detected bugs, and so on). If you start doing it and you record how long did it take to accomplish a task, who did it, the kind of task and so on, you will grow an internal database with historical data… which is one of the best things to create estimates later on.
But the database will be also helpful in your everyday tasks: if you have to answer “what you’ve been doing yesterday”, or the day before, or one week ago… you better have some sort of register… and why not using this database as such? Once the whole team gets used just thinking about working without a task in the bugtracking software will make them feel naked… I’m not joking!!
Well – you say – this is because they have just become totally paper-aholics…
Not really, opening a task and filling some fields shouldn’t take longer than a minute. If it takes more then you are probably describing something which will be helpful in the future, to understand what was done… so it probably paid off. And at the end of the day a task tracking system will help you even implementing diff debugging: why did I change this one month ago?
The second pillar is version control: it will help you tracing all changes made to code and documents. Everything you change will be stored version control: you will know when the change was done, who made it, and most times even why: you can count on comments or even better… trace the changes to the task tracking software… Here the technique will greatly vary from one tool to another. I would strongly recommend following branch per task, but unfortunately not all tools will handle this pattern correctly (Plastic does). When they do you will enjoy features like task independency, mainline stability, being able to actually manage the releases deciding what goes in or not… and so on.
Then you have testing: unit testing, GUI testing… all sorts of automated testing. I will always refer to testing as an investment: you spend money and effort but you get a lot out of it.
Automated testing is really easy to fit on product development or on long term projects. What do you get in return? First you reduce the number of bugs in your products/projects. But there is also a very important outcome: you ensure that if a bug is detected by a customer, it won’t have enough impact to alter your schedule: it can wait until the next iteration (or Sprint in SCRUM). This is extremely important to move out of chaos into a controlled scenario.
Task tracking, version control and testing are the most basic pillars to take into account during software construction… and unfortunately they are ignored in a daily basis by thousands of companies all around the world…