21 Building Your Timeline

CONTENT

A cartoon image of a grey Gryphon. It is holding a pointer stick and pointing to something to its right.

  • Rules to Consider
  • How to Build a Timeline
  • Other Considerations
  • When Timelines Go Long

SLIDE DECKS

Some of the material presented in this chapter will be discussed in class. It is your responsibility to ensure you cover all the concepts presented both in class and in this textbook.


Building a good timeline requires us to balance several different things. First, we need to consider the categorizations, prioritizations, and dependencies of each requirement that we determined in the previous chapter. Second, we also need to consider the fact that our time on the job is not 100% devoted to coding, as seen in the previous section.

Rules To Consider

Before we start building out the timeline, we need to consider/identify the following things:

  • How many team members will be developing the project?
  • What is the team’s velocity? This will depend on experience, but 70% tends to be a good starting place. With more inexperienced folks on the team, your velocity likely will be lowered.
  • Does the company have shifts? That is, is there a 9 am to 5 pm team only, or does production run for 24 hours a day?
  • Does the company work weekends?
  • How big is the scope of the project, and is it possible for dependent production to occur simultaneously? For some small projects, it may be possible to implement a requirement and the requirement it depends on at the same time (or at least overlapping). For example, it might make sense to have someone building elements of the database and API at the same time that someone is developing the user interface and backend code that depends on the existence of the database and the API.

While the answers to these questions will vary based on the size and complexity of the project, team, and company, we will simplify things in CIS3750 by setting a few rules.

Timeline Rules for CIS3750

  • Each team member (i.e. student) will work full time despite your actual schedule. You aren’t expected to work full time (because you have other courses), but we will plan as if you are.
  • We will assume that each team has 4 team members (regardless of the actual size of your team) working the same 9 am to 5 pm shift.
  • We will assume a velocity of 80% unless otherwise stated.
  • We will assume an iteration of 10 working days (i.e. two weeks) unless otherwise stated.
  • You will develop a timeline such that each member of the team is working in parallel (assuming dependencies allow this).
  • The team will not work weekends. Do not schedule work on weekends.
  • You must respect dependencies. That is, there will be no simultaneous or overlapping production of a requirement and its dependencies, even though our project might seem simple.
  • A requirement will be assigned to only one person.
  • Do not split requirements across iterations.

How To Build A Timeline

While we will explore this more actively in class and in our lab, building a timeline will take some care and patience. To begin, we need to first consider the number of productive working days we have during each iteration.

Given our class rules, how many productive working days do we have per iteration per team member? Per team?





With these values in mind, you now know the maximum amount of work that can be assigned to each person and each team within an iteration. This doesn’t mean you will be able to assign the maximum to each person, but you definitely shouldn’t assign more.

Begin by selecting the very first requirement in your list of requirements. Assign this requirement to the first team member at the beginning of the very first day. If the length of time expected to complete the requirement exceeds the total productive days available to the team member, you will need to re-evaluate the requirement, and perhaps redraft it as two or more smaller requirements.
Once you’ve assigned the first requirement, we move on to the second one on our list.

If the second requirement depends on the completion of the first requirement, then it must be assigned after the first requirement is complete. It can be assigned to the first person (if the combined total of requirements 1 and 2 is less than or equal to the number of productive working days they have available to them) or to any of the other developers if the amount of time available to them allows for them to completely implement it. Otherwise, the requirement will need to move to the next iteration.

If the second requirement does not depend on the first, then it can be assigned to any of the other developers beginning on day 1 (or after the completion of any other requirement).

This process is repeated for each of the requirements; filling in the requirements where feasible (a little like Tetris). This is illustrated over the next four pages, where iterations are filled out so that each developer is assigned work to fill up their timeline. Note, there will be cases where a particular job will not allow every developer to be fully loaded.

Consider the following set of requirements and dependencies. The length of these requirements are indicated by the length of the box (either 1, 2, or 3 days in length). Our goal is to assign them to the empty timeline below. How might we do this?

An example set of requirements (1 through 21).
A set of 21 requirements for an unknown project. Requirements 1, 4, 5, 9, 11, 13, and 20 are one-day long. Requirements 2, 3, 8, 10, 17, 18, and 21 are two days long. Requirements 6, 7, 12, 14, 15, 16, and 19 are three days long. Several requirements depend on others. Requirements 2 and 8 depend on Requirement 1. Requirement 10 depends on Requirement 3. Requirement 12 depends on Requirement 5. Requirement 18 depends on Requirement 11. Requirement 19 depends on Requirement 12. Requirement 21 depends on Requirement 14.
A blank timeline consisting of 7 productive working days, and 4 developers.
A blank timeline spanning 7 productive working days. There are 4 rows in the table, one for each of the four developers. Each of the productive working day has 2 cells – which allow you to assign half days of work to any developer.
An example set of requirements (1 through 21). The first two requirements have been added to the timeline.
The same set of requirements previously described – however 2 of them (requirements 1 and 2) have been added to the timeline (below).

Following our general list of rules, we can opt to assign Requirement 1 to Developer 1 during day 1. We could have opted to assign Requirement 1 to Developers 2, 3, or 4. Further, we could have opted to start production on day 2, but that doesn’t seem like the best use of our developers’ time.

Having assigned Requirement 1 to Developer 1 during day 1, our task is now to assign Requirement 2 to the timeline. Since Requirement 2 depends on Requirement 1, it cannot be placed in the timeline until after Requirement 1 has been completed. That means it could be assigned to days 2, 3, 4, 5, or 6. We can’t assign it to day 7 since it is too long to fit. We can also assign it to any of the developers. Here, we assign it to Developer 1, but note that it could be assigned to any of the other 3 developers.

A partially complete timeline consisting of 7 productive working days, and 4 developers. Requirement 1 (which is one day in length) has been assigned to developer 1 starting at the beginning of productive working day 1. Requirement 2 has been added to developer 1 at the start of day 2 (spanning 2 days), but it could also have been assigned to developer 2, 3, or 4 beginning on day 2 (because of its dependancy on Requirement 1).
A partially complete timeline illustrating how Requirement 1 (which is one day in length) has been assigned to Developer 1 during the first day of production. Requirement 2 has been added to developer 1 at the start of day 2, but it could also have been assigned to developers 2, 3, or 4 beginning on day 2 (because of its dependency on Requirement 1). Where else could Requirement 1 have gone? Can you think of a reason why you might want Developer 1 working on both Requirement 1 and 2?

Repeating this process – assigning requirements to a developer based on the time they have available to work while respecting the dependencies could result in different timelines. Check out the following timelines that respect the dependencies, but which assign different requirements. Requirements that don’t make it into this iteration might then be assigned to the next iteration.

A complete timeline consisting of 7 productive working days, and 4 developers. In this case, every developer is busy for the duration of the timeline, save for developer 2. Fifteen different requirements have been assigned - covering 27 productive working days.
A complete timeline consisting of 7 productive working days, and 4 developers. In this case, every developer is busy for the duration of the timeline, save for developer 2. Fifteen different requirements have been assigned – covering 27 productive working days. All dependencies have been met. Could you develop a better timeline?

If we were careful, we could rearrange the timeline and perhaps select a different set of requirements to use all the available production time that our team has. For example, a full timeline might look like this:

A alternate version of a complete timeline consisting of 7 productive working days, and 4 developers. In this case, every developer is busy for the duration of the timeline. Fifteen different requirements have been assigned - covering 28 productive working days.
An alternate version of a complete timeline consisting of 7 productive working days, and 4 developers. In this case, every developer is busy for the duration of the timeline. Fifteen different requirements have been assigned – covering 28 productive working days.

 

Note that when you fill out the Excel or Google Sheet templates that are provided for Assignment 2, you must enter the requirement number in each cell that the requirement spans. Do not use the merge function. Only place integer values into the cells. Be sure to follow the rules outlined in Assignment 2.

For example, the alternate timeline shown above would look like this in the Excel or Google Sheet template (assuming the iteration length was 7 days and we allowed work on weekends):

 

A screenshot of a timeline written using the Excel or Google Sheet template provide.
The alternate version of the timeline identified above, as translated into the Excel or Google Sheets templates provided. Cells A1 through O7 are shown. The labels in column A are: halfday, day, Iteration, P1, P2, P3, P4. The halfday row (starting in cell B1) includes integer values from 1 to 14. The day row includes integer values from 1 to 7, with each value repeated (e.g. 1, 1, 2, 2,…). The Iteration row includes the value of 1, indicating this is the first iteration. The rows labelled P1 through P4 indicate the requirements assigned to each developer (P1 through P4). Requirements numbered 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, and 17 have been assigned to the developers (with P1 receiving 1, 2, 6, and 13, P2 receiving 3, 10, and 7, P3 receiving 4, 8, 9, and 14, and P4 receiving 5, 12, 11, and 17). Requirement 1 was scheduled to cover 1 productive working day, so it is assigned to P1 by indicating a 1 in the cells for day 1. Requirement 2 was scheduled to cover 2 productive working days but its production depends on requirement 1 being complete, so it is scheduled for the 2 full productive working days after requirement 1 is finished. This is accomplished by placing the number 2 in each of the cells for P1 spanning day 2 and day 3. The remaining requirements are assigned in a similar manner.

You may want to review this video before beginning to develop your timelines.

Other Considerations

The goal when building your timeline is to do your best to ensure that each of the developers on your team is fully assigned work. That is, if they have 7 productive days of work available to them, then the goal is to give them a set of requirements that respect the dependencies and sum to 7 days of work.

There are, however, other considerations that you might consider when building a timeline.

Should you assign a requirement that depends on another to the same developer? You may opt to do this because it could help achieve the velocity you need to complete the project on time. By doing this, you may reduce the amount of overhead required to bring another developer up to speed. However, you also risk having a single developer miss something that a second developer might catch. Having a pair of requirements – where one depends on the other – assigned to two developers gives you a chance of catching things before you get too deep in production.
Should you assign work that will require a developer to spend time on it before and after a weekend? For example, on the previous page, requirement 8 would technically span a weekend since each week in the 10-day iteration would only allow for 3.5 productive working days (given a velocity of 70%). Is it likely that the developer will be able to immediately jump into the task
on Monday morning, or are they going to need to take some time to recall what they did Friday before leaving for the weekend? You may want to avoid scheduling things over the weekend if you think it might negatively impact the velocity you are trying to achieve.

When Timelines Go Long

Regardless of your planning, there’s a chance that the project you’ve been assigned to build is going to take longer than you have to build it. Perhaps the team hasn’t been working as effectively as you originally expected or the time estimates aren’t accurate resulting in a lower velocity than planned. Perhaps someone quit or has been off sick. Or perhaps there have been changes identified by the client that weren’t originally planned.

Whatever the case, what do you do if suddenly you realize your timeline is going long?

Typically people immediately resort to adding another person. While this might seem to be a good answer, it is problematic for several reasons. First, a new person will need to be trained – this will take time, so even if they are excellent, they won’t immediately help the velocity (and might actually make it worse). Second, a new person could impact the dynamics of the team – possibly to the detriment of the project. This is especially true for larger teams that typically require more management. Third, a new person might require more money and resources, but you might not have those on hand.

Another response is to have the team work overtime to get things caught up. Again, this is not the best option because it will affect their health and wellness, stretch budgets, and likely leave the team burnt out. The long-term result is reduced velocity, lack of motivation, and broad dissatisfaction.

Generally speaking, the best approach to a timeline that has gone long is to:

  • work with the team to see if there are any specific roadblocks or challenges that might be easily solved.
  • work with the client to re-evaluate the requirements, milestones, and timeline. The client should be consulted so that they can be part of the solution. This isn’t suggesting that the client will simply say it’s okay to take more time, nor will they likely open up their wallets to fix the problem. However, keeping them informed keeps them invested in the project, builds trust, and helps them to really identify what is essential and not so essential to the product they want to be built.

Review Questions

License

Community-Engaged Systems Analysis & Software Design Copyright © 2024 by Daniel Gillis and Nicolas Durish. All Rights Reserved.

Share This Book