As a developer, you are constantly learning and improving. There are a lot of different benchmarks you are supposed to fulfill. When you are applying for a job, you are supposed to check all the boxes. Do you know Java? Do you have experience working in an agile environment? Design patterns? TDD? In consulting, you get to do this again with every new customer and project. But what then?
In our daily business, things get a bit fuzzier. It boils down to perceived competence and speed. Does this developer know what they are talking about? Do they get work done on time? The first boils down to the checkboxes again. The latter, though … How do you become faster? Without compromising on quality, that is.
It is one of those obscure pathways. When I got out of university, there was a ton of real-world knowledge that I needed to pick up. My software development know-how was one lecture I had in the second semester. Clean code? You are supposed to write lots of comments, right? Sure I can do git. Just add everything, commit it and push, right? What are unit tests again? Let me google that … It took a while until my Pull Requests stopped coming back with thirty comments each.
Speed is one of those things nobody teaches you. That is mainly because everyone finds their own way, and most of us subconsciously, I think. If you are as puzzled about it as I was, here is some advice.
Software isn’t made for you
It is made for as large an audience as possible. Whatever you use for your work has a lot of unnecessary features … or not enough. It will feel large and bloaty or flimsy and incomplete. It is up to you to adjust your tools to your needs. No one will do it for you (any more than they already have). Things you might want to do:
- Deinstall unnecessary plugins. It will make it easier to take care of the existing ones.
- Evaluate one new plugin for one piece of software a week. Or look at new pieces of software when you run out. Start with your IDE and the language you write code in. Read a bit of the plugin’s documentation daily and take it through its paces.
- Know your config files. Know where they are and skim them. Back them up so you don’t lose them. A git repo works well for this.## Reflect upon your workflow
So change it!
Most programs let you change your hotkeys. However, we have all been in this confused state where we didn’t know what to assign to what. What will be useful? The people on Reddit won’t know. The people in your office won’t know. You don’t even know! You need to collect data wherever you can. It would help to look at what you spend the most time on and what tedious tasks can be most easily improved with a shortcut or a script.
- Collect data and review it. Start with your command-line history and look at the commands you keep using. Many IDEs track what features you use; just google it. If necessary, install spyware on your computer. Our memories aren’t objective. Data is.
- Set a timer and take a note. Or just do it whenever this occurs to you. You will want to reflect on what you do and how you do it regularly. While you are at it, ask yourself if what you are doing is the most effective use of your time. Thank me later.
- Make a plan. Invariably, you will learn new things and want to make new decisions. What work will you do first in the morning? What will you do about meetings where you don’t have much to contribute? No matter how inexperienced you believe yourself to be, don’t become a victim of your circumstances. Start acting instead of reacting.
Optimize your workflow
The most efficient workflows you can use are hybrid. Your job can’t be fully automated (yet), but you are not doing it without a computer. If you lean on a computer a little more heavily, it can significantly improve your speed, though. Computers are great at remembering things. Computers don’t grow tired no matter how boring the task is.
- Need to do something once a day? Write a cron job.
- Need to do something a hundred more times today? Write a macro.
- A helpful feature is hidden deep inside the menus? Assign a hotkey. What to assign it to? Doesn’t matter. You are not using the hotkey you are replacing, or you would know it already. How will you remember it? Well…
Upload it to your brain
The best place to store the information you need RIGHT NOW is inside your brain. Medical doctors spend years of their life just learning things by heart. They can’t spend time looking things up while their patient is bleeding out on the floor. You can, but it is much easier to reach a state of flow if you don’t need to. Plus, you will get that nice feeling of mastery.
- Write cheat sheets. Any time you learn a useful shortcut, it goes on a sticky note next to your computer. If you need it today, chances are it might come in handy tomorrow. If it’s really useful, you will probably start to remember it on your own. The sticky will then have outlived its usefulness.
- Spaced learning. Flashcards are the best way to learn. You want them digital, though. Let me save you a google search: You want Anki. It comes with a cellphone app you can use instead of scrolling social media. Less frequently used shortcuts and concepts go in there.
- Daily practice. Want to learn Kubernetes? Do it every day. Do it until you can deploy pods while being on life-support in an artificially induced coma. Never underestimate what levels you can reach just by doing something for a couple of minutes every day. Get a streak tracker. It’s really motivating.
Go full cyborg
Wouldn’t you love to control a computer with your brain? Don’t worry; it’s coming. Until then, we need alternative means to speed up our workflows.
- Use a macro keyboard. Or programmable buttons on your keyboard. Start by putting a modifier shortcut (e.g., CTRL+SHIFT+K) onto a single key. In Windows, Autohotkey is your friend. Unix systems have more friends than I care to list.
- Reprogram a key through the operating system. This will be a little different on each operating system, but easy enough to google. It would sure be great if that symbol key you never used did something useful. Start with Caps-Lock, a useless key that is beautifully reachable. Continue from there.
- Build your own goddamn keyboard. No, I don’t kid. Keyboards are optimized for typewriters. Letters that should be close together are spaced far apart, so the typewriter doesn’t jam. Keys are staggered. Nowadays, you can either invest time to print a keyboard parameterized to fit your hands or pay money. Both work. Just like the tires are your car’s connection to the road, the keyboard is your brain’s connection to your computer. Its importance can’t be overstated.
Your axe is made for chopping
„If I only had an hour to chop down a tree, I would spend the first 45 minutes sharpening my axe.“ That’s a quote by Abraham Lincoln, and it’s edged into my brain. Want another quote?
„Great tools help make great games. Spend as much time on tools as possible.“ That’s by John Romero, co-creator of Doom, Quake, and Commander Keen, among others. Don’t take this to mean you should spend seven hours each day on your environment (unless you can deliver eight hours of work in the remaining hour). However, id software’s tile editor was used on thirty-three shipped retail games. For how many years have you used your IDE?
It is my assumption that minor improvements can go a long way. Lots of useful software already exists. It can save us hours and days of work over the years for a modest initial investment. Sure, the person who invests three days of work to automate a five-minute task is almost a meme by now, but how much did they learn doing it? How much can they still build on that foundation? And how silly will anyone think they are if it turns out their solution can scale to thousands of developers?
Software developers are in a unique position to adjust their tools to their needs. Doing so will reduce the mental friction of inefficient software. It will sharpen our skills. And yes, successful software products have grown from scratching that itch most people didn’t even notice they had.
It’s a journey
Ultimately it’s all about flow. You want to be neither overwhelmed nor bored at any given moment, and the workload that accomplishes this can vary hour by hour. Anything can be learned, and the optimal speed to achieve it is exactly there, in your own middle. If done right, this will put you into a state of quiet concentration, and work will be fun. Don’t compare yourself with others too much; you can only improve at your own speed.
That’s what I’ve learned so far. Hope I was of some help.