Be the worst at something

Emotionally its easy to be a young moderately talented programmer. Your boss's expectations are probably low to average, so when you knock it out of the park it hits the goddamn moon. You're probably a cowboy, and business people adore cowboys. You hack code at lightning speed because you're not worried about how your work affects tomorrow because you've never seen tomorrow, you yes-you-were-born-yesterday son of a bitch.

Somewhere along the line things change. You wonder, "When did my job become maintaining code? All the code I've written is shit!" You hightail it to the interwebs and read everything on writing maintainable code. You're ambitious and you take it as far as you can.

Armed with all your design patterns, best practices, years of experience, and senior-level title you're off to the races. Business people don't understand why your projects seem to take a bit longer, but who cares. Your developer peers looks at you like you are motherfucking Neo. Expectations are high, you are The One after all.

Your comfort zone has ballooned. You spend all day, every day within arms reach of it. That is what your job is asking of you, of course. You refine your process ever so finely. You're becoming an expert on the things you do most days.

Then a curveball comes. A new challenge. A paradigm shift. You need to adapt, but adapting isn't so easy anymore. A junior developer would handle it fine, and why wouldn't he? He went from working as a novice in subject A to working as a novice in subject B and thats where his managers expect him to be.

But you're a different story. You have high expectations, rules, practices. You don't just hack code. It actually feels impossible for you to submit code you know is terribly flawed.

You start building a set of patterns and practices to deal with this new challenge based on the patterns and practices that already serve you with your regular day-to-day work. Your first projects are bloated with refactoring cycles. You can see your mistakes but sometimes you aren't too sure the right way to solve them. You aren't just writing code; you're thinking, researching, and making a lot of new decisions. You're patient and adjust as you go. Adjusting takes time. Maybe lots of time, and now you're behind schedule.

This is a bad spot for anxious people. Your expectations and maybe your project managers' expectations are too high given the reality of the situation. You aren't good at this - not yet - and your senior-level title doesn't change that fact.

If you're here theres a few things I think you should keep in mind:

  • Forgive yourself. You don't know everything, and, unless you're an asshole, you probably don't pretend to. This challenge is one of those things you just don't know. Be honest and upfront about it.
  • Don't expect perfection. Your standards should be high but you need to face the fact that your first project in this new world will not be your best work and thats OK.
  • Don't go into hero-mode where you stop communicating and put in a billion extra hours to meet that overconfident project estimate that seemed reasonable before you dove in. Hero mode seems like a good idea only if it works (you make the deadline), but if it doesn't work you look like a bad programmer and, in fact, are a bad communicator and teammate.
  • Communicate. Let your managers know how your project is progressing. How they react to it is not something you can control, so don't burden yourself by worrying about it. This is a common situation that everyone needs to learn how to deal with.
  • You probably won't get fired. Its OK to get a chink in your armor once in a while. Lots of companies are bad at letting loose under-performing programmers, and if the story thus far describes you then you aren't one of those guys anyways.
  • The absolute worst thing that could possibly happen here is you get fired. Not beaten or murdered in the street. It seems silly to point this out, but this is the absolute worst case scenario and its recoverable. When it comes to anxiety its easy to forget these simple facts.
  • Your employer is better off giving you the time to learn. If you don't learn you stagnate and your skills become irrelevant as the next wave of new technologies comes in and takes over. At this point your employer has invested years and an increasing salary into an employee whose practical value may be dropping.
  • If you get fired you might be better off. Believe it or not, you want new technical challenges. The reality is that the risk you're facing is low and the potential gain is high. There could be more risk in not facing challenges like these.

When you're terrible at something theres no place to go but up. Stay positive and embrace the opportunity for learning. A good employer understands that this is part of doing business and its in everyones best interests to continue to invest in you. You're a senior developer. You're a leader. A strong leader stands to strengthen those he leads. Be a strong, confident leader and march on!