Saturday, April 21, 2007

To Branch Or Not to Branch

The other day I was working on a guidance document for branching strategy in Team Foundation Server. When we looked at some of the customer references, we realized that a fantastic feature like branching is misused more than often. Talking to number of customers we realized some or the other time Configuration Managers and Developers come face to face with the dilemma, To Branch or not to branch?

The answer to this question is, you should not branch!! For many simple scenarios, you don't need to branch and labeling your builds is sufficient. Because with branching merging comes into the picture, the complexity of branching increases the pain of merging exponentially. Said that, you should branch only when you have to isolate parallel development efforts. Here are few common scenarios which gives insight as to when and how you should branch.
  • If you are working on one release at a time, then you just don't need to branch, just work from your main trunk.
  • If you want parallel development while you prepare for intermediate release and need to stabilize the release build, then you need to branch the release source code. Do testing / bug fixing on the release branch and parallel development on the main trunk. Once the release is done, you might / or might not want to merge the bug fixes to the main trunk.
  • If you have to make a patch or hotfix on an old release with parallel development for a new release, then, you branch the old release. Do testing / bug fixing on the patch / hotfix release and parallel development on the main trunk. Once the patch or hotfix is done, you might or might not want to merge the bug fixes to the main trunk
  • If you are having regular problems with broken builds, then a create development branch to isolate parallel development efforts. Merge the development regularly with the main trunk, which can be used for stabilized build.
  • If you have features which can be worked in parallel, but might cause stability among each other, then branch the main trunk for each feature development. Merge the feature branches regularly into the main branch and reverse merge for features to share code. The main branch is used for stabilized build.
These are the very basic scenarios, and depending upon your team you can have combination of more than one scenarios. Thumb of rule to follow is avoid branching, and branch only when you have to do parallel development.

There is a good document - Explained: Branching in Team Foundation Server, which gives insight on the branching strategy.

So no more, To branch or not to branch dilemma.

~Later

Thursday, April 12, 2007

Who wants to be an effective leader?

Every individual dreams to be a leader in their own fields, but not all of them end up being a leader. Its not the opportunities but rather the effectiveness that make individual fail as a leader. There are very few people who are natural leaders, most of them have to learn how to be an effective leader. So what's the mantra for being an effective leader.

No points for learning the hard way if you can leverage other's experience. My colleague Jason Taylor has spent the last 10 years leading teams of software developers, testers, and ethical hackers on a wide variety of projects. He has posted his techniques of being an effective leader. He believes following are the traits of an effective leader.
  • Self Awareness. You are aware of your impact on others. You are aware of your own weaknesses and work toward mitigating them.
  • Self Regulation. You think before you act. You consistently act out of your value system. The people around you know what to expect from you.
  • Empathy. You are willing to trust and eager to empower. You are interested in listening and understanding other’s experiences.
  • Social Skills. You are able to connect with others and communicate well.
  • Motivation. You have a passion to lead, you desire to excel, and you actively want the best for your team and yourself.
You can see his post here: How To Be an Effective Leader

~ Later

Tuesday, April 10, 2007

Are you lucky?

Almost all my friends complain / compliment that I am lucky!! This got me thinking, is there anything called luck? Why would someone be lucky or unlucky? How do you decide to become lucky? How can you avoid being unlucky?

The more I analyzed the more I believed, you being lucky is decided by the collective decisions you have taken over time. If you can learn to make timely and well-considered decisions, then you can often lead to well-deserved success or simply put just get lucky. However, if you make poor decisions, you risks failure.

So it all boils down to good decision making. Here are some steps to help you making good decision.

Identify the Problem Area - You need to first clearly identify the problem at hand, it could be incorporating change request in the project or which cell phone you should buy.

Collect Information - Collect as much information as possible for given problem, the information gathered should give you insights about possible causes and possible solutions.

Validate the Information - Ensure that the information gathered come from trustworthy sources and is as accurate as possible.

Brain Storm for Solutions - Come up with all the possible valid solutions, while doing so don't merit the solutions, just list them.

Evaluate Solutions - Write down the solutions with pros and cons for each of them. Narrow down to the option which best addresses the problem, the deciding factors should be the cost, benefits and consequences.

Bounce Off Others - Once you have reached a decision, no harm in bouncing off others, learning from others experience is quickest. There is always a chance that they might throw a light on some of the consequences which you might have missed.

Important tips
  • Avoid snap decisions.
  • Move fast on the reversible ones and slowly on the non-reversible.
  • Do your decision making on paper.
  • Make notes and keep your ideas visible so you can consider all the relevant information in making this decision.
This might seem simple steps and should be integral part of any decision making, but believe me I have seen people not doing it for lots of important decisions and end up believing they were a little unlucky.

So hope now you know how I get lucky!!

~Later