Archive

Archive for January, 2010

Branching and Agility

January 30, 2010 2 comments

I’ve been thinking a bit lately about how much a company’s code branching strategy says about their adherence to agile/lean principles.

Consider mythical Company A.  They occasionally have branches that are created on-demand from a tag or label when the need to patch a live production or field-released build arises. 

At this point in the game, the head (aka main line) has already moved on, and since a production patch should usually introduce as little change as possible, it is desirable to patch on a branch of the code that is based on its released state.  Given Company A’s frequent release cycle, these branches never have much activity.

Company A also has occasional short-lived branches that are used for technical spikes, where the introduced change represents a speculative investment.  They might not take that code forward, and if they do, they will tackle the merge pain at that time.

Other than these two scenarios, Company A doesn’t have much call for branching.

Consider mythical Company B.  They have a main line.  They also have an active branch that represents what they are currently attempting to stabilize/harden for their next release.  This process takes a long time, so this is a long-lived branch.

They have another branch that represents what is in production.  They don’t release “significant” revisions to production very often, but frequent production bugs demand patches, so this branch is fairly active over a long span.

The slow release cycle has the business folks impatient.  They want to begin work on the “next” big release right now, and management has decided that there are enough resources that they should go ahead and do this.  So, another branch from the main line is created to accommodate that next-release work.

Have it straight?  We have branches for last release, pending release, main line, and a future release. 

We have a ton of work in progress.  We have a potential need for a large amount of error-prone merge activity.  We have a need for multiple builds, and multiple environments to host the Dev/Test/Stage aspects of all these code lines.  (If we’re not managing database schema inline with the branch, we have another whole set of issues to deal with.)

All of this pain is brought about precisely because Company B isn’t shipping frequently, and doesn’t exit short iterations with a crisp quality bar.  In other words, their need for branches is a direct reflection of how much (excessive) work they have allowed to be in progress.

Your branching strategy isn’t just an SCM concern – it can be a “process smell”, too. 

Categories: Shipito Ergo Sum

Purist Is A Dirty Word

January 21, 2010 Leave a comment

Oliver Kelley Farm - Anoka, MN

Kudos to Simon Bennett on this post – for once, I’m speechless :-)

Purist Is A Dirty Word

Categories: Shipito Ergo Sum

Black Is White, Only Different

January 15, 2010 1 comment

My son is a linguist-in-training; he tells me that “semantics” is the study of the meaning of words.  I guess that’s why I find it funny when someone says, “You’re just arguing semantics”.  Really?  If you are not arguing about ideas and what they mean, then what else would you argue?

When you work in an industry where ideas are evolving and changing, it’s interesting to watch how existing or new words get introduced to describe these new ideas.  We have all seen that this can happen for a variety of reasons – sometimes the ideas are truly new and more useful than the old ones and therefore you need a new lexicon to describe them.  Other times it is just rebranding or co-opting of existing ideas for the purpose of trying to create distinction and demand in the marketplace.

Oliver Kelley Farm - Anoka, MN

I’ve been watching this happen as the notions of Lean and Kanban first introduced in the context of manufacturing are now getting reapplied to the domain of software development.  Given my focus on operations management in MBA school, I feel like I got a decent grasp of these concepts and how they are applied, and I can understand the allure of the analogy.  The principles of Lean cross over very well to software development and I’ve been making comparisons for some time now and I would describe Agile as an appropriate application of Lean principles to software development.

BUT (you knew that was coming, didn’t you), given my understanding of what Kanban is in the manufacturing realm, I find that term not only dangerous to apply to our domain, but in a sense it’s just plain wrong.

There is an idea behind Kanban that is very powerful if not disruptive, in operational systems.  It’s a simple pull-replenishment system in which the request for one unit of output sets up a chain reaction that triggers pulling your needed sub-components from nearby until that stock location needs replenishment.  The “kanban” was the card used to trigger the replenishment through a very simple signalling system.

Behind that simple idea is a very powerful implication – if your source for replenishment can give you a fast response time and never run out, then you can run your manufacturing system with much less planning and much less work in process and inventory while actually increasing throughput in the system.

You can realize that same goal in a software development organization – Agile is about identifying and eliminating process bottlenecks and accomplishing that same kind of reduction in work in process in your development organization.  You build only what your customers really need by reacting quickly to their demand signals.  The analogy this far is great, but this is where they start to lose me.

As mentioned earlier, Kanban is a means for signalling that a downstream dependent process step needs something, and the idea is that when this signal arrives it would get produced or replenished “just in time”.  It establishes a continuous flow of subcomponents into final products.  Software development does contain dependent process steps, and I can see the attraction to the idea that the movement of work through concept, design, coding, and testing should just flow freely upstream until the team has everything it needs to do the work.

BUT (here’s where I explain my concern) the challenge is that shipping software always requires the convergence of many parallel paths to a moment in time.  There is always a need for “ship mode”, always a need for a collective push that leads to the pinnacle of the project.  I know that in principle that happens at the end of every Sprint, but in practice there are usually special activities associated with shipping a product, the least of which is coordinating marketing, etc around the launch of that product to the market.

Now, I can imagine that there may be organizations where the either the gradual release of features makes sense (especially if they are internal) or that are willing to commit to delivering features that are off by default until they get revealed later by turning them on. I can also imagine a world where our product truly is DONE in every sense of the word every two weeks, but the closest we ever got is a three week delay to launch.

My second concern is that time-boxing is not only an important feature, it is the most important feature of Agile methodologies.  Software projects are a gas – they always expand to fill (and slightly exceed) the available volume.  Any idea can be improved, and refactoring can go on forever unless something like a deadline brings it to a stop.  I know every engineer on the planet is convinced that this is the reason that they never get to build the perfect product, but time is not really the enemy.  The real issue is economics – time is money, and there is limited money available for any software product.  Sprints help snap us out of our collective concentration and to realize – oh yeah, we’re supposed to have something done now.  We always have many paths to an acceptable solution – sprints help make sure we chose an economical one.

Finally, as much as I respect the industrial revolution, developing software remains a creative, human enterprise.  A healthy team ebbs and flows, and no one can maintain a constant and unending flow of work.  We need to form a collective vision, refine the ideas needed to deliver it, bear through the crisis point, and celebrate our success when it is done.  High functioning teams are driven by this rhythm and it is part of what helps them remain together long enough to achieve that exceptional performance.  Software development can learn from manufacturing, but it will never be manufacturing.

Categories: Shipito Ergo Sum

Recommended Reading

January 11, 2010 2 comments

We’ll update this from time to time as new and interesting material is published or discovered.  Feel free to comment if you have any strong recommendations yourself.

Recommended

  1. “The Goal, Third Edition” by Eli Goldratt and  Cox, J.
  2. “Implementing Lean Software Development: From Concept to Cash” by Mary Poppendieck and Tom Poppendieck
  3. “Agile Adoption Patterns:  A Roadmap to Organizational Success” by Amr Elssamadisy
  4. “Peopleware” by Tom DeMarco and Timothy Lister
  5. “Quality Is Free: The Art of Making Quality Certain” by Philip B. Crosby
  6. “Practices of an Agile Developer” by Venkat Subramaniam and Andy Hunt

Other Noteworthy Agile- or Software-Related Blogs

  1. “Joel On Software”, http://www.joelonsoftware.com/
  2. “Project Connections”, http://www.projectconnections.com/articles/glory.html
  3. “The Agile Management Blog”, http://blog.versionone.com/blog/versionone

Other Supporting Background

  1. “Managing Offshore Development Projects: An Agile Approach” by Upadrista Venkatesh
Categories: Shipito Ergo Sum

Location, Location, Location

January 9, 2010 1 comment

The most important part of making an offshore relationship work are the employees within your company that assume responsibility for the daily communication, work direction, and architectural guidance of the remote team.  As we’ve described before, these people are allocated to the feature team in about a 6:1 ratio (I think there is diminishing returns at about this point, but depending on the skill of the individual you may be able to push this to 8:1) and they are the conduit for ideas, directions, and decisions flowing in both directions.  In short, they are responsible for the quality of the ideas and the work product and are the life blood of a distributed Agile team.

Wintering Trumpeter Swans - Monticello, MN

For these people, flexibility is key.  To be successful, the will need to find a new lifestyle that is different than the typical 9 to 5 working hours and this is usually possible, if not mutually rewarding, as long as your let them figure out what is going to work best for them and their team.  It’s a sure sign of trouble if you see them coming in to talk to the team early in the morning and they are still there at 5 pm every day – you need to encourage them to find a sustainable lifestyle.

Sustainability is essential – when its new and fun and the project is just getting underway, it’s energizing to be doing something different, but this is when the bad habits start.  They schedule meetings early in the morning and late at night and think that they also need to be there in the office all day to stay connected with everyone else.  In short, this is not possible to sustain – they need to adjust to become something of a remote employee themselves.   The closest comparison might be a regional sales force, and just like any company with a remote sales force knows, you need to create regular communication channels and provide the telecommunication infrastructure for them to work any time, anywhere.

Let’s assume you do all of these things right and you now change only the location of the remote team or teams – you would expect the same result, right?  I recently experienced watching just that situation play out as we switched from a long term sustainable structure to one with portions of the team on the west coast of the US and other portions in India.  Where the leads had been able to maintain a stable communication overlap of 2-3 hours per day in a regular time period, they now had to work hard to juggle schedules on almost a daily basis to find ways to communicate.  We would have meetings until midnight and then need to be in the office again by 7 the next day.  The team thrashed its communication methods and times constantly to share the inconvenience roughly equally between all involved.

I’ve heard of other teams that try different alternatives – the offshore provider will say they can solve this problem for you and will likely propose one of two things:  they will but one of their employees onsite to be the liaison or they will tell their team in the remote geography that they need to work strange shifts to accommodate their client.

Now, I’ve been fortunate enough to work with many people in many countries, and so far I have to tell you despite cultural, language, and economic differences, they are all just people.  There is no reason to think that these people want to live a lifestyle that you would find intolerable.  Instead, in the first alternative you only manage to insert another communication layer involving someone with less knowledge of your product and an increased likelihood of churn because they are not your employee.  In the second alternative, you will experience a flight of quality as the most talented people in your remote team look for alternatives that will give them a sustainable lifestyle.

Wintering Trumpeter Swans - Monticello, MN

My conclusion?  Despite years of wanting to believe that I could make any situation in any geography work, I now believe that the best predictor of long term success in a distributed team is location.  If you can’t create stable communication patterns, then it’s only a matter of time until the circumstances deteriorate.  If you are only in it for the short run (3-6 months), then it probably doesn’t matter, but if you want to be able to retain quality employees at  both ends of the distributed chain, then you need to make sure that they have at least 2-3 hours of overlap every business day.  For this reason, geographies such as South America, Eastern Europe, and someday soon Africa will continue to have structural advantage in providing lower cost, distributed Agile teams.

Categories: Shipito Ergo Sum

Group Hug

January 4, 2010 Leave a comment

As an introverted engineer, it would be fair to say that I’m not a huge fan of touchy-feely team building.  I’ve always found it easiest to get to know people in the context of working with them, but of course this leaves you knowing more about what they can do than who they are.  I’ve been through a few team profiling activities as well – these are basically psychological profiles of differing rigor that help you understand who you and your team mates are and how you will best work together.  I was recently asked if I had ever been through one of these that I found useful, and since I have I thought I would tell you about it.

As part of getting introduced to the executive team at Gearworks, the pre-work for our offsite strategy session was a book and online assessment called “Strengths Finder 2.0″ by Tom Rath.  The book is a quick read and comes with a supporting online questionaire that helps identify your top 5 strengths.  The premise is simple – instead of identifying and focusing on weaknesses, instead understand your teams strengths and make sure your plans and priorities play to those strengths.  In our case, the executive team had in previous years identified a weakness – most of the team members tipped heavily in the direction of “strategic thinking” with little strength in execution.  As a result, while they were driven by great ideas, follow through had been a challenge.

Oliver Kelley Farm - Anoka, MN

My top 5 strengths were (in descending order):

  • Strategic
  • Learner
  • Responsibility
  • Self-Assurance
  • Maximizer

There’s an interesting balance in this portfolio – the strategy strength helps me understand and align with a good strategy, but my daily activities are dominated by Learner, Responsibility, and Maximizer and this is really why they added me to the team.  Some strategic thinkers suffer from the problem that they have never seen a strategy they didn’t like – as a result, they get blown around by changing winds.  Worse yet, since the ships they steer can’t turn that fast, the end result is lots of changing of the sails and little forward motion.

I’m continually reminded that Agile teams come from Agile people, yet there is also the risk that agility gets confused with anarchy.  Agile development should be as rigorous as any other methodology, yet I recently heard an early Agile experiment described as lacking any visibility to the senior management team.  This just didn’t sound right, so I pressed further and found that the team was formed by grabbing a handful of developers and turning them loose to see what would happen.  No product owner, weak team leadership – is it any wonder that they got this result?  One could probably argue that this was possibly political – this effort was in contrast to a very waterfall methodology used elsewhere and there were many that did not want it to succeed.

So, as you are considering how to construct your team, consider using a profiling technique like Strengths Finder to make sure you have a balance of strengths within the team.  Your alternative is to sort it out as you go, using retrospectives to identify and correct what the team lacks, but keep in mind that this is best accomplished by changing the members of the team and not just by asking somebody that is already on the team to do something that is not natural.

Categories: Shipito Ergo Sum
Follow

Get every new post delivered to your Inbox.