« XSD Versioning and Semantic Changes | Main | Letter to CXOs »
Jeremy Miller talks a little bit here about the effects on productivity that can be achieved when there's continuity on a project team.
I find this interesting because it's a point I've been pondering for a couple of years now. I used to talk about this and argued for ways to ensure some level of team continuity throughout projects on a previous job, without much success. I think ensuring continuity of at least a small core team definitely helps a lot in creating a better work environment, more trust and understanding between team members. Some others (particularly those in technical presales) argued this just was impossible to achieve in a solution provider kind of company because the timings at which new projects could be secured and the kind of projects/customer was just too unpredictable.
Personally, I don't quite buy this argument, particularly after witnessing the effects on productivity and quality of juggling too many projects at the same time and continously shuffling people around to put out fires and put teams together hastily to staff projects late in the game. But, at the same time, I fully understand how it can be complicated for a medium/large company to deal with the planning and administrative burden of keeping everyone working on projects somehow just to ensure payroll can be paid on time every month.
I think some better planning and more control over what a company can chew at any given time can help, as well as more conciousness over what projects to go for can definitely improve this somewhat, but it's not always easy. I would love to know, though, what other people's experience on this is, so if you have something to share, please do leave a comment or post on your blog.
Continuity of the team, the project, or both?
Looking at Jeremy's article, however, I can see that there are two somewhat different factors at work to improve productivity for his team. They are related, for sure: The first thing is team continuity itself: Team members get to know and trust one another far more than with frequent rotations, and that can lead to a more cohesive team with more synergy. The second one is working on projects for a longer time, particularly when you actually get to do multiple releases (i.e. V1, V1.1, V2.0) can make a big difference in the team's attitude in regard to tooling and automation and in technical debt, at least in my experience. Many people will just avoid creating tools or automating stuff when they are under the impression that they'll only need to do it once (or a few times, each and every single one thinking "this is probably the last time I have to do this, so why bother automating it?").
I spent close to three years working on single project through multiple releases, and while we had a lot of team members come and go, the members of the core development team got pretty close and friendly, and we had some great times working together. While it was pretty though, and the project itself had tons of problem (including a very waterfallish methodology thanks to a lot of misinterpreted RUP kool-aid during the beginning of the project), we did manage to become fairly effective at developing the product itself in the end. However, some of the real improvements we made were really related more to the fact that we had to deal with multiple releases and versions of the product, than with the fact that it was the same team members working on it (though I think one implies the other, up to a point). Here are some of the up- and downsides we had:
I've also been on the other side, multitasking two or three projects at the same time, and it just sucks big time. This is hard to do when you can cleanly divide your time between projects (project A on mornings, project B in the afternoons), but it can be really frustrating when you can't (like when you're at the mercy of whatever meetings some project manager or sponsor requests you attend at whatever time they feel like it), because it makes it much harder to track time, and context switching just kills any productivity you might get otherwise. It also means that it gets very hard to integrate with other team members. Sometimes it got so bad that I almost didn't feel like I belonged to the project, and once you start feeling like an outsider instead of a team member things start to go downhill from there.
That said, one thing that I definitely like sometimes is to be able to experience at least a couple of different projects/environments a year; at least during the early years of my career. It helped a lot to open up to a lot of different opportunities and experience first hand different roles, responsibilities, work environments and open up to different view points.
Update: Some spelling errors corrected, thanks to my friend Beto for pointing them out!
Tomas Restrepo is a software developer located in Colombia, South America. His interests include .NET, Connected Systems, PowerShell and lately dynamic programming languages. More...
email: tomas@winterdom.com msn: tomasr@passport.com
Copyright © 2002-2008, Tomas Restrepo.
Powered by: newtelligence dasBlog 2.2.8279.16125