Growing the Development Team

We have a small development team of four members.  Each of us has varying levels of skill and years of experience in the industry.  As many of you know, years of experience are not directly proportional to level of skill, our team is no exception.  I actually have the least years of experience on the team.  The main problem I see is that we have no Team Lead or Architect that guides the overall development of the Product.  Some folks would say that is a good thing and that Leads are a waste of time.  That's true if you have a team of super stars or some other process that replaces the need for a Lead.  Because we have no overall direction, what happens is we each go into our own little hole for the duration of the development cycle and emerge with disparate pieces of functionality that when cobbled together form our Product.  Here is the makeup of our team:

  • Mort - A solid developer who's skills have never been pushed to the next level.
  • Jade - An excellent developer, the closest to what I would consider the team lead (but with no authority to say "Because I said so"), who's fed up with trying to improve the process.
  • Primadonna - If he didn't write it, it's crap.  He has nothing new to learn because he already knows the best way to do everything.
  • Troublemaker - Gets into trouble because he always ask "Why...don't we have an automated build process...don't we write unit tests...don't have automated testing...don't have coding standards...do we tolerate bugs..."?

When I was first brought onto the team I spent a solid week looking over the code trying to get a handle on how things worked.  When I came across poorly written code or pieces of functionality that didn't make sense the answer to my question was "Oh, that was written by Scapegoat, she left the company a year ago." No one understands the code and the code is extremely difficult to maintain because it was written in a vacuum.  Any problem with the Product is because of Scapegoat.  So why don't we fix it?  "We haven't fixed anything that Scapegoat has done because we don't have time."  When I question portions of the code written by Primadonna, the answer is "Well, I didn't have enough time to code it properly.  I was just told to fix it." 

I was tasked with improving the speed/performance of a critical portion of our Product.  In the process I have refactored to separate concerns, write code that was testable, written unit tests, and done everything in a consistent manner.  It's not perfect but it is progress.  I realized today though that I am only perpetuating the problem.  I have gone into my little hole and I am writing my own code and will emerge with something that will be part of our next release of the product.  I can feel good because I know my contribution was well written, easier to maintain, has automated unit tests, and adheres to a standard.  However this doesn't do the team any good because they have no idea what I've done.  If a bug comes in it will automatically be assigned to me because that's my "subsystem."  It may be easy to maintain, but only for me, because I understand the code, the tools, the unit tests, mocks, etc.

I can't fix our problems just be writing good code.  I'd like to begin a peer/code review process to achieve the following goals:

  • Grow the skills of the team.  Explain concepts like how to write testable code.  How to properly separate code so that each portion fulfills it's intended purpose. How to write unit tests.  How to write good unit tests.  How to use mocks.  When to use mocks.  Knowing when to refactor.  How to refactor with confidence, IoC, ORM, good exception handling practices, implementing logging...etc. 
  • Cross training and TEAM ownership of the Product.  That's not my bug because it was found in a piece of code I wrote.  It's our bug and any one of us should be able to reproduce it, write a unit test for it, and fix it.
  • Identify problems early.
  • Collaborate on a set of standards.
  • Foster a setting where members can demonstrate a desire to improve.  If I see something I don't understand, I can ask for an explanation and learn something new.  If I'm struggling with a particular feature I can ask for input from the team.

What I don't want our code review sessions to be is are technology workshops.  I don't want to stand up and spend 30 minutes giving a presentation on IoC and separation of concerns.  What I do want is for the team to ask "Why did you choose to use an interface rather than just write the class."  I'm really not hung up on coding standards.  What I'm more concerned about is seeing 1500 lines of code in the set accessor of a property.

I don't think code reviews are a long term requirement.  I hope that eventually the skill level of the team will begin to see diminishing returns from code review.  At that point we can have short standup meetings and spike sessions to hammer out particularly troublesome features.

I would love to hear from everyone else's experience using code reviews and/or alternatives to growing the team.

 

Technorati tags:

posted @ Thursday, March 08, 2007 11:38 AM


Print

Comments on this entry:

# re: Growing the Development Team

Left by Mike at 3/8/2007 12:12 PM

Hey Bill...thanks for sharing that.
I work alone so don't have the same experience tho I see a little bit of each of these types in myself at times. It has been fun to see the stuff you have been learning over the last year and mature in your knowledge, etc. I feel like I've been trailing along behind learning the same stuff you are getting into in some ways. Good luck being the Troublemaker!

# re: Growing the Development Team

Left by Willie Tilton at 3/8/2007 1:02 PM

I think the biggest problem will be the management team won't get why you'd want to change what they perceive to be a working process. While I as a developer, think that it is plainly obvious, from a business standpoint: Why spend that money and time on our team when we have a working product? What is the real benefit?

It's almost the same argument that I think dev and designers have when going down the table-less web layouts. Sure it's complaint with more browsers. Sure it's easy to change up stuff. Sure it's more accessible. But what is the business impact if it takes a week longer to develop and test properly?

The biggest thing right now that I run into is that the management team thinks only in development time. They even set aggresive deadlines based on development time alone. The don't give any time to documentation, or testing - but as long as the system spits out 4 when adding 2 and 2 they're really happy. This week the system runs fine, in two years...who cares, we're not there yet.

Having said all that, good post. I think you describe the coder's utopia. Those places do exist, you just got to search hard.

# re: Growing the Development Team

Left by Ayende Rahien at 3/8/2007 2:25 PM

> What I'm more concerned about is seeing 1500 lines of code in the set accessor of a property.

Next time, please give a warning, I had to clean my monitor because of that.
More answer in my blog

# How to grow a development team?

Left by Ayende @ Rahien at 3/8/2007 2:57 PM

How to grow a development team?

# Ayende Weighs In

Left by at 3/9/2007 8:21 AM

Ayende Weighs In

# re: Growing the Development Team

Left by Sneal at 3/10/2007 1:40 AM

I thought you were describing my work situation at first, but then I realized your situation isn't as bad as mine. At least it sounds like your team generally gets along and respects one another, even if they write a 1500 line setter.

Personally I never found that code reviews or presentations work that well (although they are better than nothing). Its hard to maintain peoples attention and have them really grok what is going on, "how does this help me, right now?" I have found the best way for me was to pair with everyone on my team for short periods of time, that way I could steer them in the "right" direction in little increments. Above all being consistent and persistent with the message pays off, repetition has a way of swaying people.

# re: Growing the Development Team

Left by Jeff Brown at 6/21/2007 3:32 PM

Hmm. Stuff to think on.

I've found code reviews to be very productive but only among developers with similar skills and shared values. Code reviews can be helpful for cross-functional training purposes but there seem to be practical limits to which new skills and sophistication can be imparted that way. It is particularly difficult to extricate opinions from those who are not opinionated or whose priorities are elsewhere. In my experience, most development groups (that do not consist entirely of superstars) benefit immensely from motivated leads to provide unity of purpose, directed intention, pride, and self-improvement.

Lately I've been thinking that Morts are probably more useful to the business than Troublemakers. (But I think we have more fun. It's less fun becoming a demoralised Jade...)

Your comment:



 (will not be displayed)


 
 
 
Please add 7 and 4 and type the answer here:
 

Live Comment Preview:

 
«October»
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678