What Tools and Practices Make Us Backend Developers Productive?

As backend developers, we use a diverse set of tools and techniques on a daily basis. From project management tools to programming tools and practices it’s crucial to use and adapt the ones that make us productive and deliver high-quality code. I conducted a survey among my colleagues and compiled their responses. In this post, you can find a brief description of each tool or practice, along with quotes from our developers about their experiences using them.
Terminal & Shells & CLIs
- Kitty – has been mentioned multiple times not only because our backend devs love cats. It is a fast and feature-rich terminal emulator that offloads rendering to the GPU for less CPU consumption. It offers a familiar customizable and portable setup, consistent look of fonts, colors, user interface and shortcuts across all the platforms via a shared configuration.
I use it to separate work on the project I am currently working on.
- iTerm2 – MacOS users’ preferred replacement for Terminal. As an alternative to Kitty and iTerm2, we suggest also having a look at tmux.
- Fish shell – unix shell that defines itself as a free, open-source shell utility that is incredibly easy to learn and use. Fish focuses on interactivity and usability and provides a lot of features by default, rather than by configuration.
- Zsh with Oh My Zsh – MacOS gang’s favorite. Oh My Zsh is a framework that manages your Zsh configuration and comes bundled with thousands of helpful functions, helpers, plugins, themes and so on. Our favorite plugins are git, zsh-autosuggestions, z (see more) and configurable theme powerlevel10k.
- Aliases – highly popular is the use of the alias command that enables a replacement of a word by another string. Developers created their aliases for custom git flow, defining in what environment the following command should be run by providing a specific file with environment variables, external tools setup (e.g. Redis, GCP), proxying the connection through our package Goproxie. Aliases increase developer’s productivity in everyday use even though it might seem to be hard to maintain.
IDE setup
Having a well-setup IDE is important for a developer’s productivity. A good setup provides a comfortable and efficient workspace that can save you a significant amount of time and effort when coding. These tips from our backend developers can be applied to any IDE, not just VSCode, which is the favorite for most of our team.
- VSCode Debugger
I am a fan of VS Code Debugger. I don't have to add logs to the code I write nor do I use live-reload, which in my experience, doesn't improve the coding effectiveness, but it does debugging – stopping the code execution where I need to and track the state and reason to check whether it's still correct. It takes some getting used to, because you need to know how to set it up in the first place, and the startup with debugger is a bit slower (depending on which potato PC you are running), but you need to run it far fewer times.
- VSCode Extensions
I think I only have three extensions. GitLens — Git supercharged – in order to see git info on the line with focus so I know how old it is and click through on Gitlab for the commit. Second one Numbered Bookmarks and third one Partial Diff which is the only extension I found can make simple diffs from even unsaved tabs (no, terminal alternatives are not better in any way).
- Code formatting – we use the settings of IDE that formats the code on save action, and also we have our Ackee styleguide backend config.
- Fonts
I use Cascadia Code font that is readable, not awkwardly tall & narrow, supports ligatures. But I had a good time with Ubuntu mono, JetBrains Mono, Fira Code, Anonymous Pro & Victor mono.
I am using the default font. For me the default is good enough, why waste time on changing it with no benefit. Also I have the font size set as big, so when I scroll up, max line number I see is 38. I feel like the important parts of the code should fit that size, so why smaller font?
- Shortcuts – check KeyCombiner if you would like to master your IDE shortcuts.
I am using the default shortcuts. I don't invent mine, due to switching machines more often than I switch editors, I rarely change the default shortcuts, I think they’re mostly well designed.
Database clients
If you are lucky enough and your IDE includes database integrations like a paid product of JetBrains you probably go with that. However, we mainly use these database clients:
- DBeaver – free multi-platform database tool for developers, database administrators, analysts and all people who need to work with databases. Supports lots of popular databases.
- TablePlus – another database client we find very useful. It supports a whole set of relational databases and also some NoSQL such as Redis which makes TablePlus helpful also for bigger projects thanks to friendly GUI.
- pgcli or mysqlcli – command line interface for PostgreSQL or MySQL.
API testing
To be frank, Postman is way easier to manage body and headers than terminal alternatives. I usually create the request from copying a request as cURL from the browser, or set it up from a plain Postman tab. Close and forget afterwards, if it's important, the request should be in some more shareable form like the cURL.
- HTTPie – command line HTTP client written in Python for making HTTP requests as a human-friendly alternative to cURL.
Project management and note-taking apps
As a backend team, we heavily started using Notion. We use it for project documentation that we find useful to share with each other, as well as for storing notes for weekly backend meetings. It has been a helpful tool for organizing and sharing information within our team. Do you wonder what other tools except for Notion our developers use for personal purposes? Here is the list:
- HackMD – collaborative markdown editor that allows users to write, edit, and collaborate on markdown documents in real-time. It offers features such as real-time collaboration, version control, and the ability to embed images and videos.
- Google Keep – note-taking tool that allows users to create notes, lists, and set reminders.
- Trilium – personal knowledge management tool that allows users to create and organize notes, lists, and outlines
- Obsidian – personal knowledge management tool that allows users to create and organize notes using markdown. It offers features such as the ability to create links between notes, add tags and metadata, and create a customizable graph view of the user's notes.
At our company, we use Redmine as our project management tool to organize and track the progress of our projects and tasks. Backend developers also use these tool for their personal use cases:
- Trello – web-based project management tool that uses a Kanban board layout. It allows users to create cards representing tasks or ideas and move them across different columns or "boards" to represent different stages of progress.
- Google Calendar tasks – feature of Google Calendar that allows users to create and manage tasks within the calendar interface
- Taskwarrior – command-line based task management tool. It has a number of features, including the ability to prioritize tasks, add tags and comments, and create custom reports.
We estimate future tasks to help project managers with the project planning phase. When working on a task we are used to tracking the spent time. Understanding the cost of tasks helps the company with allocating resources and budget more effectively. For tracking time spent on projects our developers use:
- Toggl – time tracking software to boost performance and get paid for every billable minute.
- Clockify – time tracker and timesheet app that lets you track work hours across projects. Unlimited users, free forever.
- Timewarrior is a command-line based time tracking tool. It has a number of features, including the ability to track time in multiple projects and contexts, generate reports, and set up alerts and reminders.
OS specifics
- Ubuntu Dock – graphical application launcher and task switcher.
I am using Ubuntu Dock and its shortcuts to launch/focus applications, e.g. Super+1 launches or focuses apps placed on the first position of the dock. I use it to quickly open my most accessed apps in the following order: Slack, Google Chrome, Kitty, Mailspring.
- Rectangle – window management tool for MacOS that allows users to easily resize and move windows using keyboard shortcuts.
- MTMR (short for "My TouchBar My Rules") – MacOS utility that allows users to customize the touch bar. With MTMR, users can add custom buttons and controls to the touch bar, and create rules to control which buttons are displayed in different applications.
Working environment
- Cleanliness
One monitor, one virtual desktop. I've been the guy with multiple monitors, but maybe I got older, maybe my workflow changed, but these days I like to focus on one thing at a time.
I love having "Zero inbox". I am cleaning my inbox regularly to see what is important there.
Starting clean. I switch off my computer every day, closing all the tabs in Google Chrome, all the terminal windows, all the DBeaver windows, without saving the progress. If I need the information, it should be saved somewhere.
When I return from a longer vacation, and I see the hundreds of emails, I am not going to go through all of them. I'll just mark them all as read. If it's important, it will come back to me.
- Less distractions
I have silenced all the apps from popping up notifications every time I receive an email or message in Slack. I like my unread messages empty, but I want to clear them when I want to not to break my focus. I have just a small indicator icon on the Ubuntu top bar for unread messages and I developed a habit to check those when I feel like it.
Slack on a separate desktop, notification sound turned off, MacOs bar set to auto-hide. So even when someone tags me, I don't see it immediately, but only when I switch to Slack. Also, checking emails only twice a day (1st either in morning, or after 2-3 hrs of work, 2nd time either after lunch, or few hrs before going home).
- Recharge
Time Out_ _app is my favorite break reminder app. For me each 20 minutes I have 15s break, each 2h I have 10 minutes break.
I typically take a break for ~5 minutes every hour ( to walk around, stretch my legs, get water). It helps me to stay focused throughout the day.
I walk in silence (no music, no podcast) alone back home. Time to slow down after the day of work, a moment of relaxation for the brain.
I highly recommend buying a standing-desk for your home. I usually stand during the meetings and also several times during the day when coding. Also, buying a good chair, and recently I also tried computer glasses.
Fun stuff
While it is certainly important to focus on our tasks and deliver high-quality work, we also believe that enjoying our work and finding enjoyment in what we do can lead to increased motivation and productivity. We like memes, GIFs, custom emojis, and cats!
- Ezgif – simple online GIF maker
- Emojifinder – you write a word and get related emojis
- Gitmoji – emoji guide for commit message
- Meme Generator – easily add text to images or memes
- Cat as a service – must have API for cat lovers
