Who we are

We are the developers of Plastic SCM, a full version control stack (not a Git variant). We work on the strongest branching and merging you can find, and a core that doesn't cringe with huge binaries and repos. We also develop the GUIs, mergetools and everything needed to give you the full version control stack.

If you want to give it a try, download it from here.

We also code SemanticMerge, and the gmaster Git client.

Three core pillars

Wednesday, June 06, 2007 Pablo Santos 2 Comments

Which 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…
Pablo Santos
I'm the CTO and Founder at Códice.
I've been leading Plastic SCM since 2005. My passion is helping teams work better through version control.
I had the opportunity to see teams from many different industries at work while I helped them improving their version control practices.
I really enjoy teaching (I've been a University professor for 6+ years) and sharing my experience in talks and articles.
And I love simple code. You can reach me at @psluaces.


  1. Good text.

    We are looking against this tracktool

    Is any tracktool integrated with plasticscm? ...

    thanks Pablo!

  2. Hi Moisès,

    Yes, OnTime is a great option!

    Well, we have some integration with those tools:

    But it is not yet officially release. Anyway, if you're interested we will send you the integration package so you can start working. Let me check with the developers.