KKMIN

Managing a Project via Task Pipelining

Recently, I completed a small project together with a few fellow students, and I was tasked with managing the project overall. While project management can be considered as more of a non-technical skill compared to development work itself, I found myself seeing a lot of parallels between the two.

Context

We had a team of 7 developers, myself included. We chose to create a simple web application in React with Firebase for the backend and authentication. There are three core functionalities along with other utility features like user registration, login, etc.

Some of us had some prior experience with React and Firebase and they were compatible with web development, so it was deemed as a strategic choice to use these two.

Management Methodology

We used the Agile methodology for our project management with weekly sprints. Every week, we would have a meeting to do two things:

  • Outline the tasks for the week
  • Review the previous week's tasks for modifications if necessary

This worked out well for us as it provides a clear direction for the week and a buffer to make changes to our features if necessary. When we view the this process from a high-level task-centric perspective, we can see the pipelining of tasks happening.

Pipelining

In computer architecture, pipelining is a technique used to increase the throughput of a processor by executing multiple assembly instructions simultaneously. This is done by partitioning the instructions into multiple stages.

Once the pipeline is up and running, at any given time, the processor is executing multiple instructions which are in different stages. See here for more information.

If we take a look at our work schedule, we realize that it is also a form of pipeline, albeit each task is only broadly partitioned into two stages: in-progress and modification after review.

Task Set 1

Task Set 2

Task Set 3

Task Set 4

   Week 1    

Week 2    

Week 3 ...

A visual of how our task pipelining looks like with two stage tasks.

After the first week, we see how we are completing tasks at a rate of 1 task per week. This is taking into account any modifications that need to be done for each task after review as well. This worked out really well for us; assuming we always start our tasks 1 week in advance to the deadline week (end of week), we always have a buffer week and we always meet our deadlines.

In reality, we actually have a little more buffer time as task deadlines aren't usually so rigid to be on a 1 task per week basis, but it doesn't hurt to have a little more buffer time.

Task Dependency & Pipeline Stalling

Ideally, if the task sets are all independent of each other, the pipeline works as intended with no issues. But in reality, that is sometimes not the case. Sometimes, dependencies exist between tasks where cannot start on one without another being completed first. In such cases, we can stall the pipeline.

Task Set 1

Task Set 2

NOP

Task Set 3

   Week 1    

Week 2    

Week 3 ...

Task Set 3 has a dependency on Task Set 2

Of course, stalling the pipeline is not ideal and considered as a last resort. If the task set permits, we can try to break down the task set into smaller stages, and insert the part without dependencies into the pipeline first, and then the part with dependencies later.

In our project, I had to stall the pipeline only once (where critical database functions were still in development and needed more time). For other tasks with dependencies, we either broke them down into smaller stages or swapped the order of tasks if possible to avoid stalling the pipeline.

Closing Thoughts

While it is true that management is a different skillset from development, there are definitely many core concepts that are shared between the two. We can take some inspiration from how computers schedule work to optimize into our own project management and development work.

The end goal between us and the computer is quite similar after all: to get the best results as efficiently as possible.

← Back to home

Comments