The Passionate Programmer

April 14, 2022

You can’t be remarkable if you don’t love your environment, your tools, and your domain. Leading a remarkable career is the best way to kick start that same desire for leading a remarkable life—one where you don’t just become a better and more valuable worker, but you become a better human too.

This book is not just about making better widgets and feeling secure in your job. It’s just as much about developing the skills and sensibilities for leading a more rewarding life filled with many remarkable aspects, with work just being one of them.

Software is a business. As software developers, we are businesspeople. Our companies don’t employ us because they love us. They never have, and they never will. That’s not the job of a business. Businesses don’t exist so we can have a place to go every day. The purpose of a business is to make money. To excel at a company, you will have to understand how you fit into the business’s plan to make money.

Think of your career as if it’s the life cycle of a product you are creating. This product is made up of you and your skills.

  1. Choose your market. Pick the technologies and the business domains you focus on consciously and deliberately, balancing the “risk and reward” and “supply and demand”.
  2. Invest in your product. Properly investing in your knowledge and skills is critical for making yourself marketable.
  3. Execute. You have to execute and deliver the right value for the company.
  4. Market. The best product in history will not get purchased if nobody knows it exists. How do you get recognition in both your company and the industry without “sucking up”?

Executing

You work for an institution that is, most likely, trying to make money. Your job is to do something that helps the organization meet that goal.

We’re being paid to create value. This means getting up out of our reading chairs and getting things done. To be successful, the raw ability will get you only so far. The final stretch is populated by closers—people who finish things.

Getting things done feels good.

Do It Right Now

Parkinson’s law states that “Work expands to fill the time available for its completion.” The sad thing is that even when you don’t want it to be this way, you can fall into the trap, especially when there are tasks you don’t really want to do.

A sense of urgency, even if manufactured, is enough to easily double or triple your productivity. Try it, and you’ll see. You can do it faster. You can do it now. You can get it done instead of talking about getting it done.

If you treat your projects like a race, you’ll get to the end a lot faster than if you treat them like a prison cell. Create movement. Be the one who pushes. Don’t get comfortable.

Always be the one to ask, “But what can we do right now?”

  • Look at your proverbial plate. Examine the tasks that have been sitting on it for a long time, the projects that are starting to grow mold, or the ones you’ve been just a little bit stuck on—perhaps in bureaucracy, perhaps in analysis paralysis.
  • Find one you could do in between the cracks of your normal work, when you would normally be browsing the Web, checking your e-mail, or taking a long lunch. Turn a multimonth project into a less-than-one-week task.

Over-deliver

If you always do what your customers ask for when they ask for them, you will satisfy your customers. However, if you do more than what they ask for or you have already done things before they ask, you will delight them.

Managing people and projects is challenging work. People who can keep a project moving in the right direction without being given much guidance are highly valued and appreciated by their often overworked managers and customers.

The mind-reading trick, if done well, leads to people depending on you—an excellent recipe for a career you can drive the direction of. It’s a skill worth exploring and developing.

Daily Hits

All of us can benefit from scheduling and tracking our accomplishments. Every day, have some kind of outstanding accomplishment to add to your daily hit list. Send a summary of this report to your manager at the end of the week.

Simply setting a goal (daily, weekly, or whatever you’re capable of) and tracking this type of accomplishment can radically change your behavior. When you start to search for outstanding accomplishments, you naturally evaluate and prioritize your activities based on the business value of what you might work on.

Be Where You’re At

As a manager, I can tell you that the most frustrating thing to deal with is an employee who’s always aiming for the next rung on the ladder.

You spend all your time wanting something. Craving is the opposite of contentment. You wake up in the morning and have to go to “that bloody job” where nobody understands your potential. With resentment, you toil over your work, going over strategies to get ahead. You fantasize about what you would do in the latest situation that your manager screwed up—how you would handle it differently. You put off living while at work until you can do it your way in the position you deserve.

Keeping your mind focused on the present will get you further toward your goals than keeping your mind focused on the goal itself.

Focusing on the present allows you to enjoy the small victories of daily work life: the feeling of a job well done, the feeling of being pulled in as an expert on a critical business problem, the feeling of being an integral member of a team that gels. These are what you’ll miss if you’re always walking around with your head in the clouds. You’ll always be waiting for the big one while ignoring the little things that happen every day that make your job worth showing up for.

Put your career goals away for a week. Write down your goals for your current job. Instead of thinking about where you want to go next, think about what you want to have accomplished when you finish the job you’re in. What can you have produced in this job that will be great? Create a plan that is both strategic and tactical. Spend the week implementing these tactics to support the long-term goal of “finishing” this job.

At the end of the week, take stock of your progress toward meeting these job goals. How long will it be before you’ve accomplished everything you feel you need to in your current role? How will you know you’re done? Plan the next week and repeat.

How good a job can I do today?

Why is it that, without facing great pressure, we’re often unable to work ourselves into this kind of altruistic, ultra-productive frenzy? How well would you perform if you could treat the most uninteresting and annoying tasks with the same feverish desire to do them right?

How much more fun would your job be if you could treat the most uninteresting and annoying tasks with the same feverish desire to do them right?

Look at your workday and ask yourself, “How good a job can I do today?” You’ll find that you’ll like your job better, and your job will like you.

Eight-Hour Burn

When it comes to work, less really can be more. When we’re tired, we can’t think as effectively as when we’re rested. When we’re burned out, we aren’t as creative, and the quality of our work reduces dramatically. We start making stupid mistakes that end up costing us time and money.

If you burn the midnight oil, in the long term, you’re going to crash so hard that the recovery time will be larger than the productivity gains you enjoyed during your eighty-hour weeks.

We treat scarce resources as being more valuable, making more efficient use of them. In addition to money matters, we can also apply this to our time. When you have too much time to work, your work time reduces significantly in perceived value. If you have seventy hours available, each hour is less precious to you than when you have forty hours available.

Budget your work hours carefully. Work less, and you’ll accomplish more. Work is always more welcome when you’ve given yourself time away from it.

Make sure you sleep well. Start work at the exact time. Work intensely for four hours. Take a break. Then work for four more hours so intensely that you are absolutely exhausted and can’t do anymore. Go home, relax, and have fun.

Learn How to Fail

We’re all going to make stupid mistakes on the job. It’s part of being human. So, within reason, we don’t judge each other on our mistakes. We judge each other on how we deal with those inevitable mistakes.

Raise the issue as early as you know about it. Don’t try to hide it. Mistakes caught early are less of a problem than mistakes caught late.

Take the blame. Don’t try to look for a scapegoat, even if you can find one. Even if you’re not wholly to blame, take responsibility and move on.

Offer a solution. If you don’t have one, offer a plan of attack for finding one. Speak in terms of concrete, predictable time frames.

Ask for help. Even if you are solely to blame for a problem, don’t let your pride make it worse by refusing help in a resolution.

The difference between how a company treats us when they make a mistake can be the ultimate in loyalty-building (or destroying). A mistake handled well might make us more loyal customers than we would have been had we never experienced a service problem. Remember this with your customers whenever you make mistakes on the job.

Say It, Do It, Show It

The easiest way to never get anything done is to never commit to anything. Planning can be a liberating experience. When you have too much to do, a plan can make the difference between confused ambiguity at the start of a workday and clear-headed confidence when attacking the tasks ahead.

Being able to start the day and answer the question “What are you going to do today?” is a great first step.

At the start of the day, write down the list of all tasks you will work on that day. As you complete each item on the list, mark it DONE. At the end of the day, look at your list of DONE stuff and feel like you’ve accomplished something.

It’s a stimulating process. It’s rhythmic. It allows you to divide your days and weeks into a series of small victories, each one propelling you to the next. You’ll find that not only does it give you visibility into what you’re accomplishing, but you’ll actually get more done than if you weren’t watching things so closely.

A final benefit of communicating in terms of plans is that your commitments become more credible. If you say what you’re going to do, and then you do it and show that it’s done, you develop a reputation for being a doer. With credibility comes influence.

Stand on the shoulders of giants.

How do other programmers solve particular problems algorithmically? How do others strategically use variable, function, and structure naming? Even more important than finding solutions to specific problems is using existing code as a magnifying mirror to inspect our own style and capabilities.

As you’re reading through the code, you will find things that you would have never done. You will find things you might have never even thought of. Why? What was the developer thinking? What were their motivations? You can even learn from bad code with this kind of critical, self-aware exploration of existing work.

Pick a project, and read it like a book. Make notes. Outline the good and the bad. Write a critique, and publish it. Find at least one trick or pattern that you can use from it. Find at least one bad thing you observed that you would add to your “What not to do” checklist when developing software.

Marketing

On the surface, marketing yourself is simple. You have only two goals: to let people know you exist and to let them know you are the person who can solve the tough problems that keep them up at night.

Instead of feeling like you are the computer genius, descending from computer heaven to save your poor customer from purgatory, turn the tables around. If you’re, for example, working in the insurance industry, think of your customer as a subject matter expert in insurance from which you have to learn to get your job done.

Suit Speak

To sell a product to an audience, you have to speak to that audience in a language they can understand and relate to.

As a software developer, that means framing your accomplishments in the context of the business you work for. Sure, you got it done, but what was it? Why did it matter? How was this so-called accomplishment not just a waste of company time?

Let Your Voice Be Heard

Don’t think of yourself as a programmer at a specific company—after all, it’s not likely that you’ll be at the same place forever—but as a participating member of an industry. You are a craftsperson or an artist. You have something to share beyond the expense-reporting application you’re developing for your human resources department or the bugs you’ve got stacked up in your company’s issue-tracking system.

Companies want to hire experts. Wouldn’t you want to hire the person who “wrote the book” on the technology or methodology you’re attempting to deploy? While a résumé with a solid list of projects is a good way to demonstrate experience, nothing is better at a job interview than for the interviewer to have already heard of you. It’s especially great if they’ve heard of you because they’ve read your articles or books or they’ve seen you speak at a conference.

Build Your Brand

Brand building has two parts: actually making your mark so that people will recognize it and then making sure that mark is associated with positive traits: Recognition and respect.

Remember that the things you choose to do and associate yourself with have a lasting impact on what your name means to people. And, now that so many of our interactions take place via the Internet on public forums, websites, and mailing lists, many of our actions are public record and are cached, indexed, and searchable—forever.

Guard your brand with all your might. Protect it from yourself. It’s all you’ve got.

Release Your Code

Aside from building a name for yourself, contributing to open-source software shows you are passionate about your field. Even if a company hasn’t used or heard of your software, the fact that you’ve created and released it is a differentiator in itself.

Open-source contributions demonstrate skill. If you’re making real code and contributing to a real project, it’s a lot better on your résumé than just saying you know a technology. Anyone can write Rails or Nant on their résumé. Very few can write Rails contributor or Nant committer.

Find an open-source library that you use daily. Now find some feature that’s not tested. Add unit tests for it. Submit your changes as a patch/pull request.

The beautiful thing about this is that it’s measurable and can be done quickly. There’s no excuse not to try it.

Remarkability

Remarkable definitely doesn’t mean the same thing as good. Usually, remarkable products are good. But, products that are good are seldom remarkable. To be remarkable means that something is worthy of attention. You will not become a remarkable software developer by simply being better than all the other software developers you know. Being incrementally better than someone else isn’t striking enough to result in the viral spread of your reputation. If someone were to ask, you might have a glowing report card, but remarkability means that people talk about you before they are asked.