Keeping track of development tasks

Igor Mandrigin
3 min readMar 15, 2018

--

When we implement a change in a codebase, it isn’t a single task. It’s a whole project, containing creating new objects, abstractions, functions and methods. We alter a few behaviours, we workaround platform-specific issues. If a change we are implementing isn’t trivial, then development lasts for weeks. It is very easy to forget all the details you knew about it.

If course, that is where different task manager apps are supposed to help. Except they usually don’t. They are usually too inconvenient to keep track of these tactical tasks.

Can we do better than that?

Let’s look at the outside world. When a carpenter fixes furniture or build a new summer house, she doesn’t keep every in a TODO application. They rely heavily on making a lot of marks on the material they are working with.

🤔

When a road worker needs to change asphalt they don’t keep the exact coordinates of the places to dig in their notebook either.

So, let’s keep all the tactical tasks in the source code itself.

Handling tasks inside the source code.

FIXMEs and TODOs, are already used quite heavily in the source code. But, these labels are usually “Someday/Maybe/Never” kind of tasks.

Let’s use the same technique to keep all the tactical tasks we need to do achieve when implementing a new feature, doing a refactoring and taming bugs.

I personally prefer to use a separate prefix for these kinds of tasks, to not being mixed with TODOs: TASK.

Write down as much as you can, don’t keep the tasks needed to do in your head.

Now, we have a super developer friendly task list for our feature. We can always search for TASKs through the workspace and find what we wanted to change. Each task will bring you to the place you need to finish this task. No app switching, no context switching.

When the work is done, there shouldn’t be any TASKs left. If there are, they might be converted to TODO, FIXME, etc for documentation purposes.

let iTunesSetting = BoolSetting(id: "pause_itunes_if_playing", name: "When the timer fires: Pause iTunes if playing")

// TASK: Create and register DND setting here

let settingsModel = SettingsModel(settings: [globalHotkeySetting, iTunesSetting])
func loadFromDB() *Model {
// TASK: implement Model loading from the DB
}
function handleAppStateChange(state) {
// TASK: handle all possible states from React Native docs:
// see: https://facebook.github.io/react-native/docs/appstate.html

// TASK: add logging if invalid state is passed
}

What to do with some more general tasks? Research, read, review. Well, since all the tasks will be displayed at the same time, you can put them anywhere. Even README will do.

The benefits are obvious:

  • no need to switch between a dev environment and a task manager app;
  • location of the task itself becomes a part of context;
  • it’s compatible with any editor;
  • checks are easily automated;
  • you can push the code with these TASK for pre-review.

Hope that simple trick will help you to keep track of longer projects.

--

--

Igor Mandrigin

independent developer & security researcher with passion for blockchain: https://ffconsulting.org