To prepare an article about time savers for software engineers, I’ve run a series of interviews with my teammates at Railsware, a product studio that builds Mailtrap, among other interesting products. I’ve asked them the same question: “Could you please describe what saves you time and energy during the development process, with examples of tools you use?” And I received many completely different answers. One was focusing on planning and managing incoming data, another was talking about the collaboration tools, while others shared their development tips. However, there were a few common threads: everybody emphasized the importance of communication, as well as that development is more about approaches than about particular tools.
I’ve gathered so much insightful and helpful information that I decided to create two separate articles:
- one about productivity tips, and the other
- about development tools
Now you are reading part 1 where I focus on planning, task and time management, communication, and some general helpful tips.
Planning and task management
What do the British Army and software development have in common? The “7 Ps” adage: Proper Planning and Preparation Prevents Piss Poor Performance. While the product team builds product roadmaps and performs high-level project planning, every engineer emphasizes the importance of the proper task and time planning for effective everyday work.
Arrange your personal commitments
Before you start organizing your development scope, make sure you are ready to focus on it.
Usually, personal commitments have a high priority and if not properly arranged, they will disturb and distract you. One interesting and helpful approach is to divide your personal and work-related tasks and plan them each accordingly.
This idea is not new, so there are tons of tools and methodologies created to solve such tasks. One of the most effective and popular ones is GTD (Getting Things Done) by David Allen. It is defined by its creators as “a personal productivity methodology that redefines how you approach your life and work”. GTD is based on five steps:
- capture (write down everything that requires your attention);
- clarify (decide which actions should be taken);
- organize (categorize and prioritize);
- reflect (review and update);
- engage (take and implement decisions).
The methodology is tool-independent, but the most popular ones (also recommended by the authors) include Asana, Nirvana, Todoist, Trello, and others. My teammates prefer Microsoft To Do (previously known as Wunderlist), in particular for the subtasks and shared project support.
Plan your development tasks
In most cases, personal and work task management are done separately. We won’t recommend any particular software – in our company, we use Asana, Jira, Pivotal Tracker, or Trello, depending on the project and the team. The only important thing is that you actually have a task list for your development scope. Here is a list of principles that can help you execute your plans more efficiently, using any tool you prefer.
- Separate planning from execution (coding). Multitasking kills your productivity, so first concentrate on thinking, decision-making, and building the plan. After that, move on to executing it by converting your planned points into code.
Usually, evening planning is considered more efficient: Build a single list of things to do the next day, set priorities, and book time in your calendar right away. You don’t have to strictly follow it – this should be just a high-level, flexible plan that shapes your task list into a structure. Undoubtedly, there will be unexpected situations or urgent requests, but they won’t turn your task list into chaos if it is well-structured.
- Write implementation plans. An implementation plan is a detailed checklist of actions required to execute a development task (a user story). It helps with understanding the problems, then finding any uncertainties and gaps. This way, you can ask questions and get missing details before you start coding. This approach helps you to separate planning from execution (see p.1) and lets you find the best way to solve the task. In the end, you can easily share this plan with your team to discuss, or even reassign the execution to your colleagues.
To write implementation plans, you can use any tool with a checklist function: Dynalist, Trello, Smart Checklist add-on for Jira, etc.
To get more details on the whole approach, check this article.
Example of an implementation plan created in Smart Checklist for Jira
- Store a pool of small tickets that require little context and effort. This is a bit obvious, but still a very helpful tip. Everyone has small tasks, questions, or requests. There is a simple way to contribute to your productivity, especially if this list of minor tasks is long – keep it all in one place. This way, when you still have time and energy at the end of the day but don’t feel like starting to dig into something big, you can quickly resolve this small stuff. Alternatively, when you are waiting for a blocker to be resolved, you can also spend this time more efficiently by fixing minor tasks.
- Include dependencies in your plan. In short, don’t rely on things in your plan that you can’t control. Even if you work with the most punctual people in the world, there is always a chance that something may go wrong. If you have built your plan around something that was not delivered as expected, you will lose focus and feel anxious. Instead, create alternative plans: if the item is delivered at 1 p.m., do task A; if it is not, then do task B (for example, a small task from the previous point).
Using your time wisely means keeping a balance between focused work and breaks.
Pomodoro technique and forcing breaks
There is a popular technique known as Pomodoro, named after the tomato-shaped kitchen timer (from the Italian word “pomodoro” for a tomato). According to it, you break your working process into time intervals (the classic length of each is 25 minutes). Then you take a short 3-5 minute break, and after each fourth working interval, you take a longer 15-20 minute break. In particular, following Pomodoro is useful to feel time discreteness, and to better work in a flow state.
You will find many tools in this category. Free apps can offer enough functionality and customization (Marinara Chrome extension), but synchronization between devices usually requires a paid plan (Be Focused Pro for macOS/iOS).
If your aim is rather to force yourself to take breaks in order to move enough during the day and rest your eyes, you can select from the work break timers that are independent of any framework. My team uses Time Out – Break Reminders and BreakTime for macOS/iOS, or Break Timer for Chrome.
Ways to manage distractions
Another aspect of time management is handling your main distractions, such as a never-ending flow of incoming information (emails, social media notifications, news portals, etc.). You can simply block particular resources or limit their usage, but email requires a more thoughtful approach.
Many email clients offer filtering and labeling functionality to automate the organization of incoming messages. One of my teammates has ~20 labels and ~80 filters for his personal Gmail!
The main principle is to contextualize notifications to focus on what matters to you. You can automatically sort task notifications, newsletters, payment requests, etc., and then review the appropriate folders according to your priorities.
Communication is crucial for development, especially for distributed teams. Much has been said about this, but in this article, I want to emphasize the situations when proper communication saves your time and energy.
- Communicate to clarify the real requirements. Even if you have a task/card created in a ticket system, with comments and detailed descriptions, in most cases, you need to clarify the real requirements. You need to understand what your client/product manager/team lead/whoever you work with wants, and in fact needs. Quite often, a task already contains the solution you are required to implement. To make this work at a high level, you need to understand the problem which you need to solve, and make sure that a proposed solution is actually the best one. However, each of us may interpret the same words differently. Ask questions to make sure that you and others are on the same page.
- Don’t be afraid to discuss your challenges with other developers and teammates. We have different experiences and habits, and we use different tools and approaches to solve problems. When you are stuck or just don’t feel confident about your solution, talk to others. There is a good chance that together you will come up with a great decision.
- Stay up to date. When working on a team, especially a distributed one, it is especially important to stay synchronized. For this purpose, we run daily standups in teams (squads) to quickly catch up on our to-dos, discuss questions, and resolve blockers. Larger team planning includes IPMs (iteration planning meetings, to discuss the scope for the next two weeks) and retrospective meetings to reflect on “good” and “to improve” points.
Only the best content, delivered once a month. Unsubscribe anytime.
As you can guess from the header, we use Slack for instant messages, calls, and company updates. Every tool has its pros and cons, but let’s focus on Slack’s time-saving features that may be not too obvious.
- Custom notifications. Options that help convert incoming information into action points are especially valuable in communication tools. Slack gives you a few options:
- In message actions, there is a “remind me about this” feature that allows you to set a custom reminder so that you can return to this message at a later time.
- There is a list of slash commands that also contain various reminders. The command /remind [@someone or #channel] to [What] [When] allows you to ping other people or the whole channel, for instance.
- Pinned and starred messages are saved in a specific place for you to easily find the necessary information whenever you need it.
- Notification management. You can customize nearly everything, including what, when, and how you would like to be notified. Go to Preferences->Notifications in your account and select whether you want to be notified about direct messages, channel or thread mentions, or track only those messages that contain specific keywords. You can also disable all notifications for a set period of time, or choose different settings for desktop and mobile.
- Scratchpad. You can have a great conversation with yourself or even better, you can use your own chat space as a scratchpad that is always at hand. This allows you to test messages, save files, images, or links that you can review and clean up later.
- An extensive list of keyboard shortcuts. There are just a few that you will actually remember and use. We like the following shortcuts :
- Jump into conversation (Use Command + K on macOS, or Ctrl + K on Windows/Linux, and you’ll see a search box pop up.)
- Create a reminder about a message (F6+M for all systems)
- Go to mentions and reactions (use Command + Shift + M on macOS, or Ctrl + Shift + M on Windows/Linux to go to the list of messages that require your attention).
Personal wiki / knowledge base approach
Every day you work with a great amount of data that you can’t keep in mind. There is a list of methods my teammates use to keep this information organized and easy to find.
The idea is that you create your own knowledge base; saving important articles, documents, descriptions of solutions you implement, questions, ideas – literally everything you face in your everyday working process. It is important to organize your notes in a way that you can easily access and use as your personal wiki.
Here is how exactly my teammates manage this data.
- Make notes to create a knowledge base folder for each of your projects. For every project you work on, you accumulate information that is hard to remember. Keep track of the solutions you implement, describe approaches you use, and even write down code snippets that are frequently used. This way, you can just go to the appropriate section and reuse the solution. This is especially helpful for code snippets – you can just copy and paste them instead of writing them from scratch each time. Such an approach saves time and energy for repetitive tasks you need to return to after a while.
- One of the available tools for your personal wiki is Evernote.
- Another option used by my teammates is VimWiki plugin for the Vim editor. It might be not the most convenient tool for managing your wiki, but when you need to keep everything in one place and don’t want to switch from your editor, this is a lifesaver. VimWiki supports three types of syntax: VimWiki (default), Markdown (markdown), and MediaWiki (media), that can be then converted to HTML. This way, you can use headers, create lists, and so on.
- Similarly, you can create worksheets or a captain’s log to note everything you (and your team), do and explain/describe the steps. It is especially useful to write down questions, to-dos, etc. It is a scratchpad to aid your focus, and also an addition to your knowledge base. To effectively handle all your notes, you need to clean them up once in a while. One of the interesting options is Sematic MediaWiki. It is a framework and also an extension to MediaWiki, designed to organize your wiki content with tags and semantic annotations. It can be used similar to SQL – you can make requests to receive appropriate expected information. Wikipedia was built with MediaWiki, by the way.
- Another great approach to managing various types of information is Pocket. It is a simple but super-useful web application for saving different types of content, including articles and video. Everything you save to Pocket is available across all your devices, and can be even accessed offline. My teammates use it to review work-related documentation as well.
Other useful tips
Finally, here is a list of tricks and tools that my colleagues use to make their working life more comfortable and efficient. They can’t be grouped into any particular category, so here you go:
- Enhance the quality of your audio/video calls with a noise cancellation app. We use Krisp – it works really well, cancelling background noises coming both from your microphone and speakers.
- Finally, arrange a convenient workplace. Whether you work from home or in the office, it is one of the first things that affect productivity. Do your best to have the highest possible level of comfort. Standing desks are gaining more popularity these days, and our team also extensively uses them. You can change your position during the day, move more, and reduce anxiety and back pain.
That’s it for now. Meet you in the second part of this article focused on the development tools and tricks.
If this post added points to your productivity, share it on social media, spread the word about your techniques, drink more water, and enjoy what you do!