The quest on how to improve developer productivity is not short of epic battles. Many of us have searched for the holy grail of productivity for many years. In this article, I will provide the scars and glory of my fights. Time-sink dragons have been slayed and…
On a less novelesque note, I want to share with you the best tools and tips I have learned over the years. All of them are key pieces in my current toolset. They are my Swiss Army Knives. I hope you will find at least a few of them useful.
Mouseless Programming requires using mainly the keyboard to code. The mouse is something to avoid as a hot potato coming straight from the oven.
Even if you use the mouse occasionally (it can be useful in some cases), the benefits of mouseless programming are too good to ignore:
- Fewer distractions and context switching for your brain.
- Higher speed: You can literally work at the speed of thought.
- Less physical movement: You don’t need to move your hands around (“Where is my mouse?” – “Damn! I just knocked my cup of tea…”).
Coding without a mouse might sound bizarre to people who have never tried it before. It can be hard to get used to it. But once mastered, you will curse when some IDE doesn’t provide a shortcut for a particular action.
Some rolling eyes! 🙂 VIM is not everyone’s cup of cake. Both feverish and hateful folks flood the internet (better not to add Emacs users into the holy war too). This is normal. VIM has a very particular way of doing things. But please consider this:
Even if VIM is not your go-to editor.
Even if you hate VIM with passion.
Even if you never use it again.
Do yourself a favor and learn VIM.
Why learn VIM?
VIM will teach you how to be more precise when editing text. Many people overlook this and move around the screen without a clear direction as if keystrokes were for free (they don’t cost any money, but they cost time and energy).
VIM encourages using precise motions (commands to move around) to go straight to the point. For example, using the
f mnemonic, you can find a particular character on the current line instead of moving the cursor many times. Some plugins even let you go further and search within the document.
The above example is just for text searching. We haven’t dipped into actual editing. The countless benefits of VIM editing are enough material for a whole article, so we’ll leave it here. Please, if you haven’t yet, have a look at VIM. Thank me later.
Coding in VIM will help you get used to mouseless programming. Even if you move onto a fully-fledged, out-of-the-box editor or IDE. Even if you never fire VIM up again.
VIM will teach you to code without using the mouse, making your workflow more efficient. The benefits are great, as we have already seen. VIM provides a fast way to do pretty much any task without touching the mouse.
You will likely create a VIM configuration from scratch, making your editor unique. This has some disadvantages (pairing with other developers on your editor). But if you can tailor your text editor to your specific needs (every person thinks differently), you will have the upper hand.
I admit that going down the rabbit hole of customization is not particularly productive 🙂 But investing the time into configuring your ultimate text editor that suits your particular needs can be worth it in the long run.
You can tweak VIM very in detail. If you ever ditch it for another tool, you will miss customizing it and rush to the settings to make it work your way. VIM will make you want to customize your next text editor or IDE. This is a good thing, as out-of-the-box IDEs aren’t as usable as they could be.
Most text editors or IDEs support VIM. Whether it is plugins or other add-ons, most text editors have some kind of VIM integration. A good amount of your VIM mastery can be taken with you if you decide to move on to other tools. You can even have the best of both worlds with VIM’s incredible text edition and more advanced IDE features.
The same goes for some TUI applications (see later section in this article). A good amount of them support VIM motions.
Even some browsers have extensions to move around as if you were using VIM (see next section).
Learning VIM compounds and it is useful even outside VIM. If you are really interested in giving VIM a go, I recommend installing NeoVim, which is a modern version of the original VIM.
If creating a new configuration from scratch is daunting or time-consuming, there are quality pre-built variants ready-to-use, such as LunarVim.
Vimium helps with mouseless browsing. You can use VIM motions to move around. Some of the motions I use are:
jto move up and down.
lto move left and right.
Hto navigate back.
Lto navigate forward.
ggto scroll to the top of the page.
Gto scroll to the bottom of the page.
/to find text (although I typically use the browser find feature).
fto find a clickable element (see details below).
?to show the Help screen, useful to see the shortcuts list.
To open a link, press
f, and it will show the shortcut for each link:
Then press the combination of keystrokes for the desired clickable element.
If you want the link to be open on a new tab, press
F instead of
f in normal mode (before seeing the shortcuts for each link).
You can refer to the Vimium website for a complete list of shortcuts.
More mousless ideas. I often see people using IDEs with their mouse to move between files and other similar tasks. Or clicking on a button to open a new terminal.
One of the best productivity hacks is to learn the shortcuts of at least the following:
This is your primary tool, so learn it well. Learn all the shortcuts to open files, switch between tabs, split screens, toggle the explorer, run the program, and a long etcetera.
You don’t have to start learning them all. Find the most repetitive tasks, then learn the shortcuts for those first. Aim for the 20/80 rule.
There is a shortcut to open the actions list on some IDEs, such as IntelliJ or VSCode. This is the first shortcut you should learn. Open the actions list, start typing what you want to do, and press Enter. Usually, you can also see the actual shortcut for the action, so you can learn them as you search.
There aren’t that many shortcuts you need to learn to use a terminal. But, if you use something like iTerm or Kitty, you probably want to learn the shortcuts to:
- Open a new tab or window.
- Close a tab or window.
- Open a new panel.
- Close a panel.
- Move around panels.
We use browsers for all sorts of things, not just for coding. So learning a few basic shortcuts can improve your life even after your workday. Learn at least the following:
- Open a new tab.
- Open a new incognito tab.
- Move between tabs.
- Close a tab.
- Open a new window.
- Toggle the inspector.
Touch Typing is the art of typing without looking at the keyboard. I would even say that true Touch Typing requires using the correct fingers for each key.
As programmers, it is important to avoid distractions and focus on what we are doing. We can lose focus if we constantly look at the keyboard to find some keys. Touch Typing is especially important if you use VIM in any form, as you need to use the keyboard more than “usual”.
Don’t obsess too much about speed (60-70 words per minute is plenty). Accuracy is way more important. You don’t want to be cursing at the text editor when you are in the middle of implementing the critical part of what you are working on.
There are many tools to learn Touch Typing. It is very important to learn it right from the beginning, using the correct fingers. If you want to learn or sharpen your skills, two tools that could help you are:
- TypingClub: I haven’t used this one, but it has got videos and looks very well organized. It is gamified, which can help with staying motivated.
- Touch Typing Study: This is the tool I used a few years ago when TypingClub wasn’t around (or wasn’t as popular). I would still recommend this tool if you just want to go straight to the point. It will challenge you and make you repeat tricky combinations, but it will make you improve.
Coding requires focus. If your eyes flee towards the clock, the wifi signal on the tray, or any other distraction clutters your screen, you might have a hard time being productive. Of course, some people suffer from this more than others. It’s not a big deal for everyone. But, if you are like me, you will appreciate using full-screen mode.
Where to use full-screen mode?
If you use a terminal editor, you should be able to toggle the full-screen mode on the terminal.
Most GUI editors and IDEs also support full-screen.
I use Google Chrome. If you do as well, you can enable full-screen from the three dots menu on the top-right.
You might think that it will be difficult to switch tabs on full-screen. But Chrome provides a shortcut to go to a specific tab. On Windows and Linux, you can
ALT+num to go to up to 9 different tabs.
“But 9 tabs are very few tabs!”
This is debatable, for sure. I won’t claim that I’m right here. But I believe that having more than 9 tabs open hinders productivity. Having dozens of tabs open is another mental overhead, another distraction for your brain. And you can’t access tabs after #9 with a shortcut (you can access the last, right-most tab, though, with
When I work with a couple of web apps at once, and need to focus, I like having them on the same browser window and moving between them with shortcuts. It should be manageable to memorize the position of up to 9 tabs and move quickly between them with two keystrokes. This has been a game-changer for me.
I encourage you to use other tools in full-screen mode when supported. I use full-screen on things like my DAW (Digital Audio Workstation) when I make some music, and just about any app that supports this mode.
There are many Terminal UI tools, especially in the Linux world. They tend to be simple and fast to use.
There are all kinds of TUI applications. For an exhaustive list, please check awesome-tuis.
I will share the ones I personally use:
We’ve talked about this one already. Just install it if you haven’t yet.
Ranger is a terminal explorer. It supports VIM motions if that’s what you are used to.
The good thing about a terminal explorer is that you can fire it up from a spare terminal window, or from the current one (use
CTRL-z to get out of the current process, do something, then come back with
fg). This is much faster than navigating on the GUI file explorer.
Ranger has been around for a while. It is a bit old but still works very well.
Some people will disagree, but I’ll explain my reasoning.
Git has been the go-to version control system since a while ago. Someone who doesn’t understand Git enough will have a hard time as a software developer.
While it’s true that using Git graphical interfaces can be more productive in some cases, you can’t be productive if you don’t know what’s going on under the hood.
From my experience, people tend to use GUI applications without understanding how Git works and what the GUI is actually doing. This can lead to surprises.
Learning how to use Git on the terminal gives you an understanding of what Git does at each step. Even if you choose to go for a graphical interface later, struggling with the terminal until you master Git will be beneficial for the years to come.
I still use Git on the terminal regularly. I used it for years after finding out that some hackers still use it. I learned so much using the terminal that people usually resort to me to solve their Git issues. These days I tend to use vim-fugitive because it is amazing. But I still use Git on the terminal if I have to (for example, on a remote server).
TDD is commonly considered one of the pillars of modern software development these days. Learning TDD will help you:
- Thinking from a user’s perspective first: TDD means your test will be the first use case of your production code. This helps write public APIs that are easy to use. It also helps thinking from an end user’s perspective.
- Getting used to thinking of edge cases: When you TDD your code, you will inevitably think of more ways your code could break.
- Getting constant feedback.
- Working in small iterations, increasing confidence.
- Reducing the number of bugs.
And a long etcetera that could fill pages and pages.
This is especially useful for having tests and production code side-by-side. I can’t believe how few people use this hack.
Having tests and production code side-by-side is such a mental energy saver compared to looping between tabs. If you also have a widescreen monitor, add your terminal with the test watcher running on one side. Have the test code on the left, the production code on the middle, and test watcher on the right hand-side. Your TDD flow will skyrocket.
You can also use split-screen on most desktop environments, to have sticky windows that take up half the space. This can be useful if you are following a tutorial and want to follow along and type, so you can have your code editor on one side.
There are many productivity systems. I have tried many for years but couldn’t stick to any of them. Until I found one that seems to work.
Everyone has their own quirks, and recommending a concrete productivity system doesn’t make much sense. But I can share my productivity system that works well for my scattered brain if it helps someone else. It is a mix of Google Calendar, Google Keep, Trello, and Post-It notes.
This tool changed my life for real. Scheduling tasks and getting notifications helps me not forget to do important things.
I use Google Calendar for:
- Scheduling a task to be done on a particular day and time.
- Time Blocking key time slots if I need extra focus.
- Birthdays and other non-work events. It helps clear mental space and have the peace of mind of knowing you won’t forget.
Google Keep is wonderful. You can capture ideas on the go. You can create simple backlogs or collections of stuff you want to remember later. I use it for capturing pretty much everything.
Of course, this is a simple tool, so it doesn’t suit handling a big project. I still use GitHub kanban boards or Trello for each specific project.
But Google Keep excels at keeping track of unrelated things and sharing it with others.
There are other tools such as Notion, which look more powerful, but I haven’t tried them yet. After years of struggling, I like to keep things simple these days. So I will stick with Google Keep for now.
I use Trello to create Kanban boards for certain projects (this blog!). It provides the flexibility and features that Google Keep lacks (by design). And it keeps getting better and better.
I don’t like using Trello for capturing random stuff, though. I use Google Keep for that purpose, as I mentioned before. I find it difficult to remember to open Trello or to capture things on the go.
Digital is good. I’m a digital guy. But I tend to forget to open the above tools for my daily planning. Post-It notes, or even just a piece of paper, is the last piece of my puzzle.
I like keeping track of small tasks and daily TO-DO lists on an analog system. I tried Trello and Google Keep, but I kept forgetting to open them, and they often get stale because I don’t update the progress that regularly. Having a piece of paper nearby makes it easier for me to stumble on it and actually use it.
I hope you find my list of productivity tools and tips valuable. I use all of them on a regular basis, so they have stood the test of time, patience, and shiny object syndrome.
We could go more in-depth, and even recommend something like learning some UNIX. But not every developer works on a UNIX environment, so I tried to keep the list as cross-domain as possible.
My list above is quite orthogonal and should be a good starting point for most developers out there. As usual, take the good parts that work for you and ditch the rest.
Thank you for reading!