Every software dev is a contractor
Seeing my full-time job as a long-term contract has helped me improve and contribute, without taking things personally or falling into complacency.
The work we do for any company in any role, even as full-time employees, is still just contract work, when you really think about it. It may be a very long term contract - years or even decades - but eventually the contract ends. We pass the baton and someone else runs with it.
Keeping that in mind has subtly changed my outlook and approach.
This is not your baby
Whatever work I happen to be doing, it's not mine. Someone's paying me for my knowledge and experience, to make their vision a reality. And that can actually be a freeing thought.
Imagine hiring someone to lay a patio for you. They spend weeks arguing with you and their fellow patio installers, about the shape and design, using new cutting-edge materials, pouring cement from front to back and top to bottom (lol). They finally pour it out, break it up and repour it, destroy it and rebuild it, again and again. And the whole time, they're charging you for their time and materials. Absurd, right?
I've known developers who do that. They demand the product be written (or rewritten) in some new language or framework, obsess over it and chastise the rest of the team for not getting on board, and ultimately produce little. The business didn't ask for it. The customers don't understand it. But someone chose to make it their personal hill to die on.
Yes, it's good to take professional pride in the work we do. Yes, it's good to leave things cleaner than we found them. Yes, it's good to be diligent about how we do what we do, so the product is reliable to use and easy to build on.
But we're doing the same thing as that fussy patio installer when we see the product as our own and take every feature and flaw personally. Each of us is just a single runner in a long relay race.
This is not your home
I've also known coworkers and friends who say they wish their company would just fire them so they'd be forced to look elsewhere. Imagine that. Staying at the wrong place so long that you simultaneously can't stand it one more day, but can't fathom doing anything else unless someone forces your hand.
I've never gotten to that point, of just hoping to be fired, but I have fallen into a lull and gone on autopilot for periods of time. Even if I'm not growing or the circumstances are less than ideal, at least it's familiar. So instead of challenging myself, I ride it out. Sound familiar?
When I was doing contract work for the first time last year, I kept meticulous notes about what I did day-to-day, in case I needed to prove to someone why I put down the hours I did for a particular week. It had an unexpected side effect. It kept the days from blending together, and I was much more aware of what I was doing week-to-week and month-to-month.
If I had a few slow days, I could look back and ask myself, did I still do a good job? If not, why not? Could I improve anything under my control? On the good days, I could look back and ask myself, why was it good? What did I learn? Am I still learning anything, about coding or any other skill I want to work on?
Even though I'm full time now, I still do it. It helps me constantly re-evaluate my "contract". Look at each project you're on as a mini-contract. Is it still working for you? Are you learning what you want to learn? Contributing where you want to contribute? Improving personally and professionally?
You aren't stuck
There are always other opportunities out there. I like Scott Hanselman's post on renewing your boss. It's not a dig on anyone's particular boss, but a call to really ask yourself, is (my boss, my boss's boss, this company, the project) still doing it for me?
If the answer is no, don't settle for "at least it's familiar". You can always change it, hopefully right where you're at, but always somewhere.
Comments / Reactions