Archive for July, 2008
When you are out driving on a gravel road and no one else is around, you can drive down the center of the road, honk your horn to the time of the rock and roll, you can weave from side-to-side to avoid pot-holes. Sure it is dangerous, especially around a blind corner, but the chance of something tragic occurring is small as you are the only one on the road.
However, in a city on a crowded freeway you must stay in your lane, you must keep up to the car ahead of you and you can’t change lanes without first checking your blind spot. If you make a mistake then not only are you in trouble but so is the person you hit and the 5000 people behind you rushing to get to their dentist appointment.
It is like that with source control, the more people on the team and the more geographical diverse your team, the more important it becomes.
Taken from wikipedia…
At the simplest level, developers could simply retain multiple copies of the different versions of the program, and number them appropriately. This simple approach has been used on many large software projects. While this method can work, it is inefficient as many near-identical copies of the program have to be maintained. This requires a lot of self-discipline on the part of developers, and often leads to mistakes.
Sure analogies are great, but why do you need source control?
Take a simple software department that is supporting the companies website. There is great hoopla and celebration when the site goes live. The long hours and the frustration with bugs is well worth it, the site is slick, it wows the president and the money starts to flow. Everything is grand and people take a well earned vacation.
Upon returning you find that everyone is happy but the marketing department has just come up with a great new campaign for boosting site traffic. You sit down and go through the requirements and say no problem we can do this in two months. Back to the cracker-jack development team and you start coding.
Trouble starts brewing when a new browser is announced and suddenly you are getting calls from your support desk that customers can no longer pay by credit card when they use the new browser. CRITICAL ISSUE-STOP ALL DEVELOPMENT AND FIX IT!
Problem. How do you know what code to use? You are half way through new development and the website is unstable. Can you find that CD that had the code from go-live? Did the developer remember to back up his copy when he upgraded to Vista?
Luckily you’ve been using source control and can get the code from go-live and make the changes. Problem solved: you are a hero!
That is just one instance of when source control is essential. Some other scenarios:
- Configuration Tracking: Multiple customers with customized additions to your core product
- Rollback ability: a new developer decided to go through and fix up all those ‘memory leaks’ and ended up breaking the code.
- Disaster Recovery: centralized location for backup and disaster recovery
- Collaboration: sharing of code amongst geographically separated team
- Traceability: someone found an easter egg in the software and the CTO is not happy. Who gets the blame?
The list continues and keeps on growing. Show me a team that doesn’t use source control and I’ll show you a team that is bound to be working many long hours or is just a single guy slaving away in his basement.
Before we get into some of the intangibles that define a great development team, we need to discuss some of the tools that build a foundation for a team. Without these tools and procedures in place, then the team will be spinning wheels, wasting time and generally unproductive.
This may be a strange discussion as I will not be pushing for any specific tools or technologies. This is for good reason; tools and technologies come and go but the general principles are eternal.
Take a first year computer science course for example. Back in those days when I was a rosy faced student who expected to solve all the world’s problems, I was doing my assignments in Pascal. Over the next few years, for that same course, the language changed to C then C++ then Java. However, the contents of that course stayed the same: looping, conditional statments, stacks, queues, linked lists (well maybe not in Java-but you get the picture). The general concepts and data structures are important to know and understand while the tools to achieve your goals will change and improve.
The specific technology and approach should be tailored to your team. The tools and process should be there to help not to hinder the development process. Once the process becomes the big thing and you are spending more time worrying about ‘Am i doing this right?’ instead of ‘Am i doing the right thing?’ you need to step back and revaluate.
It is that way with developing software. There are a few essential aspects of developing software that are just ‘best practices’. If you master those aspects you can worry about more important things such as learning the details of the new silver light release, what is the difference between a machiatto and a latte and why did Indiana Jones climb into that fridge?
So, what are those essentials?
- Source Control
- Bug Tracking Software
- Dedicated Build Environment
- Modern Hardware
Perhaps one reason to start with these details are that they are easy to implement. Just take some money, take some time and you can have these elements with little fuss and little muss. Some of the other aspects of building team takes time and takes leadership skills.Read Full Post | Make a Comment ( 1 so far )
Yes, it is a good question. It is something that I’ve been thinking about a lot over the last couple months. I’ve been a part of many different software teams over the years and while each team has their own strengths and weaknesses there hasn’t been one team that excelled in every area. That is to be an expected outcome of building a team from individuals that have foibles and personalities (and as you know programmers definitely have foibles and personalities).
However, that should not be an excuse to keep a team as it is and accept their current behaviour and performance as a given. You need to continually grow and learn and stretch the team. If you
remain static then you stagnant and can no longer react to the business market and are in danger of becoming an irritant to the powers that be.
When I first started thinking about this, the elements that first came to mind were concrete elements of software development that must be present just to perform the core task of producing software. They are things like testing and source control and written documents. This quickly progressed to some of the intangible skills that will transform a group of smart individuals into a high performing team of skilled and enthusiastic developers that will be a major asset to the success of a business.
Next post… Elements of a good teamRead Full Post | Make a Comment ( 1 so far )
Well I guess that it is time for me to get into the world of the 21st century. Blogging seems to be the great step forward in communication. Oh wait, that is so 2001. The great step forward is twitter and poking. It seems strange that to communicate effectively we need to give little witty remarks every couple minutes. I’ve had more than one friend give up on these new forms of communication because they feel stressed to continually come up with new and amusing status messages. But I digress, since when did blogs become a forum for social commentary?Read Full Post | Make a Comment ( 1 so far )