Software Developer Maturity Stages

In the software industry (as in many other industries), developers are commonly categorized as either Junior-level, intermediate, or Senior-level.  The most typical definition for these distinctions is based on the number of years of experience (0-2 years = junior, 2-5 years = intermediate, >5 years = senior, or something along those lines).  This post describes an alternative basis for making these distinctions that is based on the type of designs that a developer creates, rather than the number of years they have been creating software professionally.

Since our trade is fairly difficult intellectually, I don’t think that the number of years of experience accurately dictates the effectiveness of a developer, and thus it’s a poor basis for distinction.  If you’re not actively trying to improve, additional years of experience probably doesn’t make you much more effective, and my experience working with a fair amount of developers at a number of different companies reflects that.

Here is the basis I’m going to start using for categorizing developers:

Junior: Creates overly-simple designs with lots of duplication. Their apps are easy to understand, but hard to maintain.

Intermediate: Creates overly-complex designs with lots of unnecessary indirection. Typical code smells that indicate an intermediate developer are very long, convoluted class names that don’t convey much meaning, unnecessary abstractions and use of frameworks that aren’t adding any value in the context (but increase complexity). Their apps have a high learning curve to understand the architecture, but then are fairly maintainable (for at least intermediate-level developers) once you’ve successfully grokked all the indirection.

Senior: Creates simple, elegant designs.  Their apps are fairly easy to understand (for at least intermediate-level developers), maintain and enhance. They use abstractions where they make sense and frameworks that add value to the particular application.

Am I right/wrong/silly? Leave a comment!

Print | posted @ Thursday, September 23, 2010 6:24 PM

Comments on this entry:

Gravatar # re: Software Developer Maturity Stages
by Joe at 10/14/2010 2:46 PM

I totally agree. But this doesn't just classify developers, it also describes architects.

Currently I'm under an architect that designs like an intermediate level developer. It is very painful. In a perfect world a beginning architect should be a senior level dev, but we all know that it's always the case.
Gravatar # re: Software Developer Maturity Stages
by James at 10/20/2010 11:30 AM

I agree 100% I’ve noticed with myself that just because I have 10yrs of professional dev exp, I don't consider myself a senior developer just yet.
I think it's definitely dependent on the individual developer and sometimes where they work. I know from my experience with my last job (I was there for 9 yrs), it really pigeonholed me because we didn't take advantage of all the exciting emerging technologies out there. Looking back, it seemed the company and management were really complacent, so rarely was I encouraged to dive into new things Unfortunately that complacent attitude is contagious! Probably one of the best things for my career was getting laid off:) Weird to say, but it has really forced me to get more involved in what’s going on with our craft. I am definitely excited to see what new path I take next to becoming a more technological well rounded, senior developer.

Your comment:

Title:
Name:
Email:
Website:
 
Italic Underline Blockquote Hyperlink
 
 
Please add 5 and 5 and type the answer here: