The Source for Java Technology Collaboration
User: Password:



Tom Ball

Tom Ball's Blog

Is Writing Code a Career Limiting Move?

Posted by tball on August 19, 2006 at 11:02 PM | Comments (20)

A CLM, or Career Limiting Move, is an action on your part that threatens your promotion chances, or even your job. Regardless of whether you have heard of a career limiting move, most of us know one when we see one; serious ones include harassment or ethical violations, as well as less severe ones like backing your car into your manager's new Porsche or mocking the VP's favorite sports team without realizing who's eating lunch at the next table. Engineers may joke about something being a CLM, but real ones are to be taken seriously.

I love to write code and am a big believer in the Agile software development model. Most Agile software methodologies require that the design grow from an initial prototype which gets refined based on early and frequent user feedback. In theory, the project lead can specify a design which someone else prototypes, but the user feedback is much more likely to be heeded and integrated early (when it can have the biggest impact) if the project lead is actively involved in the prototype's code.

To date, my CLMs have been minor, such as avoiding useless meetings. But recently it appeared that my love of programming was a more serious CLM, as it seemed to undermine my credentials as a senior software engineer. How? The top jobs these days are for "software architects", and architects aren't supposed to write code; instead they write specifications which us lowly programmers are to blindly follow. This was certainly true with the J2EE engineering team a couple of years ago, where the "spec lead" was not allowed to write any code; that was the job of the junior "implementation engineer" for that API. I got into a heated exchanged with one of their Distinguished Engineers over this issue, and of course arguing with DEs at Sun is yet another CLM! I doubt that practice is true these days, however, as Java EE 5 is so much easier to use it's obvious that coders must have actively participated in its design.

I've been reading a great book from the Pragmatic Programmer group called Practices of an Agile Programmer. One of its chapters is titled "Architects Must Write Code", which includes this gem: "Real insight comes from active coding." Tim Lindholm, Distinguished Engineer and Java ME Architect, put it more sucinctly eleven years ago when we worked on the JDK team together: "there are coders and there are bullshitters*." (I hope he is still coding now that he is an architect!) I think this "architects write specifications, not code" is a holdover from the discredited Waterfall model of software development, where systems analysts fully specified a project before coding began. While this model may have made sense in the sixties writing COBOL (though I doubt it), I don't understand how it is able to remain entrenched in development organizations forty years later.

The good news is that many companies will acknowledge and correct their biases when you make them known. I recently complained to my management at Sun about this subject, expecting at best silence on their part. It was quite a shock to see them turn on a dime, reaffirm the importance of coding for senior developers, and make changes that addressed my personal career concerns. So if you are in a similar situation where it looks like your coding is no longer appreciated, discuss the problem with your manager. You may be surprised to find coding's "career limiting" is all in your mind!


*I think it's okay to say bullshit on java.net, as it's an acceptable word for intellectual discourse since the Princton University Press published On Bullshit. It's a great book; read it to learn more about why architects who don't write code can be so successful. :-)

Bookmark blog post: del.icio.us del.icio.us Digg Digg DZone DZone Furl Furl Reddit Reddit
Comments
Comments are listed in date ascending order (oldest first) | Post Comment

  • Great blog Tom, thanks for a good read :)

    Posted by: evanx on August 20, 2006 at 03:49 AM

  • Coding is only a CLM if you are good in it and your organization true lives up to Peter's Principle.

    Posted by: csar on August 20, 2006 at 03:55 AM

  • Unfortunatelly I believe that answer to the questions from the title is YES. I left Sun because of that three years ago and see similar symptom at another big company that I work for now. Fortunately as an external contractor - so avoiding useless meetings and coding are no longer CLMs. The solution might be "outsourcing" - a word that the managers like and that means that even coding can make your living. BTW the best architechts I have met are active coders (both from Sun and the other company that I work for).

    Comment to the previous comment: every big organization lives up to the Peter's principle, that is nature. You can't avoid it since you only find out that someone is incompetent after you give him the job (s)he can't do. Don't know if there is another principle like that but from what I see is that the big organizations never demote people. Not sure why. Anyone seen someone demoted in a big org? In the worst case the person leaves for another big company to get the same position ;-)

    Posted by: dstrupl on August 20, 2006 at 04:07 AM


  • I think I’m suffering from something similar at the moment. I’ve had my head down for the past six years in a small software house as a senior Java hacker. But one sad day we were told the companies going into administration and we got given our notices Since then we’ve spend every day for the past few weeks pouring over the job sites and todays java job wanted ads. It seems to me that most of the Senior Java Programmer positions are asking for only 2 years experience, I’ve even seen some that required as little as ones years exposure to Java to be eligible for a senior role. Other ads will explicitly state they’re after 2-5years of experience and the majority will max out at around £35K (some a bit more with niche skills). With a solid 9 years of Java now under my belt I’m asking myself where do I fit? What comes after a Senior Java Programmer? The job ads suggest nothing. I seem to have wandered into a no-mans land. While you’ll see the odd system architect role they’ll often come in around £50k-£60k, but a good many of them seem to be farming out UML and specs to foreign outsourcing teams, most definitely not hands-on or much fun.


    As they’res several of us in the same boat, I find we’re often chasing the same jobs, talking to the same recruitment agents within minutes of each other – but despite having very similar skills it’s the younger team members getting all the calls, 2-3 a day whereas I’m lucky to receive the same in a week. When we put our CV’s forward to the same job, for the same money, at the same time, time and again it’ll be my younger colleague who’ll secure the interview while I just get the cold-shoulder. (No I don’t think it’s the CV six years ago it’d get me all the calls, and I’ve gotten feedback over it everybody thinks its fine). I’ve even been turned down for a job I was perfect for on paper, I didn’t even merit an interview because I was told they cap their experience level at five years max, despite being willing to accept the advertised salary (it wasn’t much less than I was getting already).


    So I don’t understand where I’m supposed to go. I’ve tried team leading / management and hated every moment of it. Like most hardcore developers I don’t have the social skills and lack the self-confidence. Do you strengthen your weaknesses or play to your strengths? My passion is for coding not the death by a thousand cuts managing seems to entail. There’s far fewer management jobs than coding ones anyway, where are all the old programmers at? Is there some twilight care home somewhere out there? All comfy slippers, horlicks and sharing fond memories of AmigaOS.. sigh!

    Posted by: osbald on August 20, 2006 at 08:03 AM

  • I'm finishing a software engineering graduate program at a university here in the states. I find that most of the people in my classes are not going into a programming-centric job. (Some of my classes overlap with other graduate degrees). There aren't a lot of people anymore going into "programming" per-se. It actually seems to me that fellow students are afraid to code. The decline of people going into bachelor computer science programs aligns with my observations (see cnet.com articles on this issue) -- a lot is due to the fear of programming jobs being outsourced. I actually believe that outsourcing will create jobs here in the states (an explanation I'll leave for another blog). I am also starting to see a trend where job posts for programming jobs are going unfilled and I believe this to be the start of a greater trend where there will not be enough people to fulfill technical roles such as coding. While I'm happy that this makes me (and others like me) more valuable as a programmer, it will, in essence, hold back economic growth in general. What I see is that salaries are recently increasing for people that are programming or moving into programming from another technical role. I plan on keeping software engineering as my career with java, database and scripting languages as my current focus.

    Comment to previous comment: 1) Most companies don't know how to properly label jobs, therefore "Senior" often doesn't mean much, 2) stay with programming and learn more about languages, your skills will keep you valuable, 3) Don't worry about other people getting jobs, 4) ask interviewers why you didn't get the job instead of postulating (the one that told you about an "experience-level" cap seems like a backwards organization you never want to work for), 5) Work on your "social skills",as you say, so that you can appropriately articulate & summarize your experience in an interview and sell yourself as a valuable asset to the programming team -- do that and you'll have no problem.

    Posted by: jweden on August 20, 2006 at 09:02 AM

  • >I don't understand how it is able to remain entrenched in development organizations forty years later.
    Because as Tim Lindholm put it, there are "bullshitters" in every organization - big and small.
    The chapter title you quoted reminded me of several lines from Agile Software Development with Scrum; my favorite one is: "Where traditional organizations call for the definition of static roles, Scrum developers can change hats dynamically, often passing as analysts, testers, coders, designers, architects and integrators in a single day."

    Posted by: gsporar on August 20, 2006 at 04:45 PM

  • Would learning about and practicing plumbing be a CLM for a plumber?.

    Writing code is no different. We have a skill and we need to stay loyal to the skill and not be hung up on corporate hierarchies. Once again the key is to remember that you are a software developer and not just an employee. YOU CAN EVOLVE TECHNOLOGICALLY OUTSIDE YOUR WORK. If you are a pure coder at work, then be a software architect for an open source project at night or vice versa.


    Does your career always exist in the context of a corporate environment?. Would a lawyer not be a lawyer if he did not work for a law firm? Would a doctor cease to be a doctor if he did not work for a
    big hospital? If you perceive that your career is limited to what you can do at work then YES, just coding would be a CLM. But if you think of yourself as a IT professional who is into using IT to solve problems through coding, designing, architecting then you have a career. You can freelance, consult, participate and contribute to the global programming community. Those are all career oriented activities IMHO.

    I personally would not let a corporate label limit my thinking/skill abilities. A software architect refusing to write code is like a doctor (hung up on his "Dr" label) refusing to use a defibrillator because it is the job of an EMT.


    I think not coding would be a CLM for an IT professional.

    Posted by: alpot on August 20, 2006 at 07:24 PM

  • TomI couldn't agree with you more that Architects need to code... but coding must not get in the way of their core responsibilities, which are to make sure that the design is what the client needs, and to make sure that the builders understand and follow the design.
    I think that Agile programming helps build good architects, because Agile programmers (to be successful) have to learn how to communicate with customers and other developers... The iterative discovery nature of the projects demands it. Contrast this with an "implementation engineer" who just codes to a spec. These folks sometimes lock themselves in rooms (so to speak) and seldom speak with users...

    Loving to code is not a CLM in my book... as long as you also learn to communicate (and to delegate).
    -JohnR

    Posted by: johnreynolds on August 21, 2006 at 05:15 AM

  • Here are my 2 bits: Nothing will ever change. Business centric management have this urge to turn "coders" into a "chickens" laying golden eggs of software artifacts. Good coders want to understand. Good business people want to exploit (the understanding part is just a biochemical side effect of the brain for them). Ever seen how angry a business type gets when a developer start to refuse to understand their business needs! Not fair they claim, but in a game of tit-for-tat between the servant and the master, fairness is such an unequal concept. So I don't think coding is CLM, it is more like a "CLI" Carreer Limiting Industry. No matter how many studies and articles one read on this communication gap between tech and management, no information can overcome this so-called "communication gap" of, "if-they-can-just-understand". Because "they" choose to limit their understanding to pure business matters.

    Posted by: melopink on August 21, 2006 at 05:18 AM

  • "To date, my CLMs have been minor, such as avoiding useless meetings." Avoiding meetings is the real CLM in most companies, especially larger ones. In fact the company I left a few months ago explicitly mentioned a 95% attendance to meetings as a requirement for all staff, if you didn't make that (illness excluded, but you'd better plan your vacations in between the larger meetings) you would be passed over for promotion.
    And yes, any technical job is a CLM in itself in most companies. Sales and marketing, and of course management positions, are the ones where you can advance. Anyone in a technical position (even in IT firms) will never grow to a position beyond team lead (or maybe project lead in some daring companies). Without an MBa you can forget ever becoming more than a code monkey in the eyes of the people pulling the strings.

    Posted by: jwenting on August 21, 2006 at 06:24 AM

  • don' t talk the talk work the work
    lie to everyone not to self

    Posted by: javaniraj on August 21, 2006 at 06:31 AM

  • Hi Tom -

    I can't talk for all of Sun, but I have never considered writing code a CLM.

    Back to career growth. I find it useful to think of "how to best solve the engineering / technical problems facing my group / division / company", with the scope / complexity of the problems growing with the seniority of the engineer. The problems may be solved using "software", "communication", "organizational", and other mechanisms, and I suspect that the "less time coding" phenomena you are observing is because it is _often_ (not always) more effective for a senior engineer to influence than to write code directly; but, as pointed out elsewhere in the thread, there is a real danger in not writing code.

    Posted by: pelegri on August 21, 2006 at 07:22 AM

  • I think Intel, Microsoft were so successful because there were people at board level who had been at the sharp end. However as companies get bigger and the founders move on, then the people that get to the top are political animals who manipulate agendas and 'network' rather than go near the details. I don't think Intel has much future now its being taken over by marketing types. The problem is the UK is even worse as you need an arts or classics degree to be taken seriously in management. The reaction of Sun to your concerns sounds thoroughly enlightened.

    Posted by: c_armstrong on August 21, 2006 at 10:57 AM

  • The only good architects are the ones who keep fresh with the code. Everyone wants the high-level guy to solve the problems, but time and time again, the devil continues to be in the details. Just because we say we're abstracting away several datasources, doesn't mean they are abstractable.

    I think this is why it *is* possible for thigns to simply not change. Companies will continue to miss the fact that really the heart of a good implementation begins with good implementors.

    While everyone wants to turn programmers into construction workers, (and some already are), the fact remains that programming is a high-level activity in and of itself, and will always be a moving target. What was bread and butter this generation might very well be an obsolete skill next gen.

    A good example are administration type crud web apps, I don't see how much longer those can stick around.

    Posted by: ilazarte on August 21, 2006 at 01:56 PM

  • So to answer the question, no I don't think coding is a CLM. Maybe coding only Java or only coding Ruby might be a CLM, but understanding how to code and doing it probably will never be :)

    Posted by: ilazarte on August 21, 2006 at 01:57 PM

  • "A good programmer can code in any language." I forget who first said that, but it's still true today.

    Posted by: tball on August 21, 2006 at 02:42 PM

  • @osbald
    I feel your pain brother.
    Keep the faith. never give up, never surrender!
    Something I do every now and again is to ruthlessly trim down the CV, but with six years at one place this shouldn't be too much of a problem.
    Rates in the UK took a big hit after the bubble burst. It was pretty brutal, you saw a lot of the people who were riding the 'contractor gravy train' all of a sudden discover that even if they weren't being paid, they still had to shell out for the mortgage and car loan. A lot of ex-contractors took jobs at 25k and were grateful.
    My recommendation: do something to make yourself stand out, differentiate yourself from your ex-co-workers. I've recently been playing around with Java EE 5 (read as: really getting into it, reading the spec, trying out different combos of technologies etc), and I like it so much that I'm going to basically pitch my CV that way, and not apply for J2EE roles unless they want to upgrade.
    Another way to differentiate is to upskill with triple f: "fad-framework-of-the-fortnight". Spring gurus are sought after, Sun is very keen on JSF, but who is actually using it? Struts is too horrible to wish on anyone...
    Unlike some of the other posters I've come to realise that it is not just about being good at coding - in retrospect 'marketing' is the most important skill for a programmer, for exactly the reason you are discovering. But there are other reasons not to neglect the people skills, you spend less time out of work, people like you more so work environments become nicer, you get better assignments, your ideas get more respect etc.
    A lot of the programmers who had good people skills did 'get beamed up to the mother ship' and replaced with pod-architects... but that says more about their people skills than their coding skills.
    So the important question is - do you want to stay a coder? A slightly less important question if the answer is yes - do you want to stay with Java? Prior to Java EE 5 I was seriously considering a jump to an entirely different platform and language (no, not .net or Ruby, they both suck and there are no jobs for them anyway).
    Either stay active (go to gym, do 4+ hours of coding a day, refine your cv, pound the streets looking for work in unusual places). Or take a break, go to Hawaii for a month (or Ibiza or Moscow or wherever) - get away from it all. Whatever you do, don't just sit at home waiting for the phone to ring. That is way too stressful. Either full on relax, or full on be productive, don't try to sit on the fence between those two - it doesn't work.
    Perhaps a way of keeping your hand in for coding is to contribute to an existing open source project which 'scratches your itch'. Don't try to start your own, since who knows, you may find work next week, and the last thing we need is another half baked open source project. This may also be a way to differentiate yourself from other job seekers.
    Good luck.

    Posted by: rickcarson on August 21, 2006 at 05:00 PM

  • Uh, thanks, but as I mentioned in the last paragraph, everything worked out great with my management. I'm back to being a happy camper, as they say, getting some coding done in between my other responsibilities. My point was that many of us share this perception, and we should discuss it with our management because it may or may not be a real issue in your organization.

    Posted by: tball on August 21, 2006 at 05:51 PM

  • Personally, different jobs call for different things. If you are "not allowed" to code, perhaps you can structure your relationships with the implementation teams better so you can receive more and better input with respect to your architecture. I've found that if I can't code, spending several hours sitting in offices of the people using the architecture can prove extremely valuable, sometimes moreso than coding yourself since 5 people cover more of your architecture than you will. The feedback can be great as long as you listen without getting defensive.

    THEN, save your coding for things at home or special projects that are below the radar of your management (not on the project schedule but would add a significant boost).

    Finally, its not a CLM if the environment doesn't call for coding, its only a CLM if you you need coding on your resume and / or you lose touch with technology.

    Just wanted to give an alternative viewpoint :-)

    Posted by: pmonday on August 22, 2006 at 06:13 AM

  • Hi Tom,

    Been a while since EO.

    Anyway, coding is probably a CLM, which is why I've been a consultant for the past 15 years ;-)

    But there is a solution to being bumped up to "Software Architect" - and that is that the specs an Architect generates should be executable code!

    This is why I now write 99% of my code in Python - I can "almost" write the spec as Python - certainly I can write the top-level logic that way, with the smallest of shims between that and raw Python.

    Try it, you'll like it (if they'll let you do that at Sun!).

    Best -Mike

    Posted by: cheponis on August 25, 2006 at 08:36 PM





Powered by
Movable Type 3.01D
 Feed java.net RSS Feeds