Basic principles when managing ongoing tasks

March 25, 2018
team management project management team leadership software engineering management

Software is complex

Building new software is challenging1. Even when you take examples considered simple, such as building a new website or a basic CMS, note how they will likely contain at least one of the following:

The above list is incomplete, but each of its elements above builds up on the level of risk. It calls for the manager of this project and its team to respect its complexity.

It is important to characterize the mindset needed for this role (either called a project manager, or a software engineering manager, or, in a more general way, a team leader) as it is pinned by this underlying responsibility of making this complexity clear to the relevant people, and to minimise it in a continuous, restless, graceful and structured way.

The loaded context and the larger goal

During the execution, there is at least 2 contexts in which management needs to be paying attention to. In an analogy with how computers work, one context is what I call the loaded context, which is like the RAM (Random-access memory) of the project. It includes the tasks you are working on right now (at this very moment), and it’s mostly fresh in the team members’ brains.

The second context, or the larger goal, means planning or assessing things that we will have to do, but are sitting in the HD (Hard Disk). Conversely it could be a task in the backlog that needs to be done, but not currently in execution. It may also include things like anticipating information for tasks that you are still not working on, or making sure that the general need for the software you are building still exists.

These contexts require different techniques and approaches to be managed properly.

Some things to watch for when managing the loaded context

So, as discussed, the loaded context is what you are working on right now, or your ongoing tasks. In order to tackle its complexity, beware with the following.

Words to never say

I just recently read the book Rework2, by Jason Fried and David Heinemeier Hansson from Basecamp, and noted how, amongst dozens of other knowledge pearls, it beautifully list the “words you should never use in business”. I will take a few sentences from the book and group them together in the single quote below:

They’re need, can’t, must, easy, just, only, and fast. And also watch out for their cousins: everyone, no one, always, and never. ASAP is poison.

Clearly saying things like “Everyone will need this feature” brings a sense of absoluteness that might not be exactly true in practice, or might not be corroborated by data. It goes against focusing on what’s really needed. Moreover, saying something like “Can you add this feature in? Just this time, it’s really fast!” can become addictive and cause scope creep to quickly become a problem. It shows that there is no prioritization. One might even go further and say that this is an “easy” task, but, as also noted in the book, what is “easy” anyway? The definition differs for everyone.

These words go against the objective of a team manager, as it adds to the existing complexity instead of removing it. It brings imprecision and bluntness to a context in which reality is already sufficiently rough.

Issues need owners

Another point is that a manager needs to be constantly paying attention on where the team spends their time on, and what are the issues affecting productivity.

A behaviour that I observed as damaging is when problems are discussed only in an informal way. These can be conversations between, just as an example, team members in which they clearly describe an ongoing challenge, most of the times even proposing a vision on how it could be resolved, but end the conversation without formally raising the issue. This is done with an implication that someone will eventually resolve the problem. The manager needs to make sure these issues affecting the team are properly registered, and then assign them to an owner and give it proper allocation.

For an example, suppose someone says: “We’ve just set this database up with all-default settings and, at some point, before we go to production, someone needs to fine-tune and optimise it”. This information as it is now is, unfortunately, just adding to the complexity of the project. It will likely not get tackled if not rapidly recorded and tracked. If it is captured then it can be assigned, properly planned, and subsequently followed up for completion.

Tying with the previous point, the word “ASAP”, in my experience, is unfortunately used a lot in this context. Imagine the confusion of having an issue that is mentioned to be resolved “ASAP”, but is not even recoded somewhere, and has no owner.

Final notes

I strongly recommend reading Rework for more insights on building software products. It is a “classic” that I took a while to get my hands on, but that is constantly mentioned in any technologist reading list. Not everything in there struck me as correct in general, but it is clear that it worked for Basecamp (or 37signals, at the time) and describes their culture in practice.