3.1. Structuring of Software Developer Working Time
Let
W be the working time that a software developer spends being assigned to a project. Project working time,
W, can be divided into parts such as project scope implementation,
M, which is part of working time spent for developing project features (it also includes team collaboration related to the development); working time spent on general project activities,
G, including project meetings (daily stand-ups, sprint plannings, demos, retrospectives, etc.), environment setup at the beginning, project stabilization before releasing; non-working time,
N, when a developer does not do any real project work (vacations, sick leaves, day offs, waiting time while being blocked by dependencies). Hence, project working time,
W, can be expressed as the sum of the three components mentioned above:
Typically, to implement a software project, it is necessary to combine a few programming technologies (e.g., back-end, front-end, database). A particular software developer can be a specialist in a single programming technology or be able to do tasks belonging to different technologies (usually, back-end engineers also do database tasks, or so-called full stack developers perform both front-end and back-end tasks). Let project scope implementation working time belonging to technology
s,
, consist of two major components: development working time (DWT),
, and supplementary development activities
. Component
is the working time that a software developer spends on coding only excluding supplementary development activities,
, such as team collaboration, defect fixing, writing unit tests, etc. Therefore, project scope implementation working time,
M, is expressed by the following equation:
where
q is the number of development specializations in the team.
Under a Scrum team with differentiated specializations, it is understood a Scrum team each developer of which can perform tasks of only 1 specialization: if a software developer j has specialization , then and for . In turn, if there are members of a Scrum team who can perform tasks of more than one specialization, the team is called a Scrum team with mixed specializations (such teams are out of the scope of the current study).
The non-working time component,
N, can be split into two completely different subcomponents: leave time,
O, which includes planned vacations, days off, sick leaves, etc.; idle time,
I, when a software developer cannot do project tasks due to, for example, lack of project tasks or being blocked by unresolved dependencies. It is worth noting that non-working time does not include days excluded from the working calendar (e.g., weekends or state holidays). Then, the equation expressing non-working time,
N, is the following:
Combining (2) and (3), Equation (
1) is written as:
By the definition, variables from (4) are greater than or equal to 0: , , , , , and . The basic measurement unit for these variables is the man-hour.
Given that a development team consists of
n members, and a project lasts for
k sprints, it implies from (4) that the equation applicable for a particular software engineer from the team is:
where
i is a sequence number of a sprint,
j is an identifier of a software developer. Additionally, to have a possibility to intentionally exclude development activities for a certain sprint, team member, or specialization, it is introduced parameter
with two possible values: if
, project scope development is included into sprint
i for developer
j and specialization
s; if
, otherwise. For example, if
is a stabilization sprint (that includes final defect fixing found during regression testing and preparing software components for releasing), development of new project scope is not supposed to take place, therefore,
.
Let
be duration of sprint
i (expressed in hours). For example, in the case of a sprint lasting 2 weeks (i.e., 10 days for 8 h each),
h (of course, if no state holidays within the 2 weeks). The relationship between project working time,
, and sprint duration,
, is expressed by the equation:
where
is an involvement coefficient of developer
j into sprint
i:
where
is the maximum possible value of the involvement coefficient limited by the higher allowed boundary for overtimes. Since regular overtimes cause decreases in the productivity of individual team members (that even may affect the productivity of the whole team), considering overtimes in estimates is a question rather related to risk management, therefore, it is out of the scope of the current study.
3.2. Normalized Development Estimates
For estimation and further project implementation monitoring, it is important to have a unified measure of project scope size. Let an “average” software developer (ASD) be a software developer who is competent enough (i.e., possesses the required knowledge, skills, and experience) to act as a player of a development team performing a certain type (or types) of tasks with an acceptable level of quality without permanent supervision from more skillful colleagues and, at the same time, still has some space for improvement of the competency level, first of all, in terms of efficiency and complexity of the work done. The closest position to the “average” software developer defined in competency matrices of software development companies is the position of a middle software engineer.
Let
U be the normalized development working time (NDWT) which is the DWT spent by an ASD on implementing a certain amount of project scope. If
D is DWT spent by another developer on the tasks, then the following expression takes place:
where
is a productivity coefficient (PC); in turn,
is a competency level productivity coefficient (CLPC), and
is an involvement productivity coefficient (IPC). For an ASD,
; if a competency level is lower than ASD, then
; if a competency level is higher than ASD,
;
if a developer is not competent in a certain specialization. In turn, coefficient
depends on the involvement,
:
The normalized development capacity (NDC),
C, is the maximum possible value of NDWT that can be spent on project scope implementation:
where
is a set of all possible values of NDWT,
U. In essence, NDC expresses the maximum possible amount of scope that can be implemented by a particular developer or the whole team within a certain time range (e.g., project sprint). Drawing the parallels with the Agile estimation techniques [
8,
17,
18,
19], NDC is nothing else as a forecast of the velocity of a Scrum team expressed in time-based units. For a development team with differentiated specializations, NDC is defined as a vector each item of which corresponds to a particular specialization:
where NDC for a particular specialization is a sum of NDCs of each software developer for all the sprints:
Considering (7), NDC for developer
j on sprint
i for specialization
s is defined as follows:
where
and
are sets of all possible values of NDWT and DWT respectively for developer
j on sprint
i for specialization
s.
The normalized development estimate (NDE), E, of a certain project scope is a forecast of DWT supposing that the work is done by an ASD. In other words, the NDE, E, is a forecast of NDWT, U. One of the main purposes of both terms is to unify the measurement of the amount of project scope expressing it in time-based units (e.g., man-hours). It is assumed that NDE can result from expert evaluations (e.g., the three-points estimation of PERT).
Since the implementation of a project requires joint efforts of several specializations, NDE has to be provided for each specialization separately:
where
is NDE for specialization
s;
q is the number of specializations;
is a vector of NDEs for the whole project. Considering (7), the NDE,
, is expressed as follows:
where
is CLPC of developer
j for specialization
s;
is an IPC for developer
j on sprint
i. It is worth emphasizing the assumption that the competency levels of the software developers are not changed during the project, i.e., parameters
do not depend on a project sprint,
i.
3.3. System of Working Time Balance Equations
After combining (5), (6), and (10), it implies the following system of working time balance equations:
Assuming that working time spent on supplementary development activities,
, proportionally depends on development working time,
, we receive the expression:
where a supplementary development activities coefficient (SDAC),
, can change along with the project implementation (e.g., on project start, a portion of supplementary development activities is higher due to, for example, the necessity to get familiar with project tasks and build as a team); also,
depends on peculiarities of a specialization (e.g., back-end development requires writing unit tests whilst database development usually does not).
Similarly to (12), given that general project activities,
, proportionally depends on a project’s working time,
, deducting the leave time,
(a developer on a leave cannot participate in general project activities):
where
is a general project activities coefficient (GPAC) that might vary depending on the project phase (e.g., usually, the coefficient values are higher on project start and finish).
It is worth noting that coefficients
and
reflect, in particular, the amount of working time spent on team collaboration. Therefore, the coefficients have to take into account a team-building lifecycle (in Scrum, they are usually applied to the model that defines such stages as forming, storming, norming, performing, and adjourning [
35]). A study of the dependence of coefficients
and
on the team development stage is out of scope.
Substituting in (11) variables
and
expressed by (12) and (13) respectively, we get a modified version of the system of working time balance equations:
If a software developer
j has specialization
, then
, and
for
. Hence, the first equation of system (14) can be written as follows:
From (15) and (6), it is possible to get an expression to calculate DWT for developer
j (that possesses specialization
):
which, in turn, leads to the expression for NDC:
where
and
are sets of all possible values of leave time and idle time respectively for developer
j on sprint
i.
3.6. Example of Applying the Method
As an example, let us consider a project of the development of a software product that consists of components such as a web application, mobile application, back end, and database. The task is to suggest a development team and find the duration of the project for the optimistic and pessimistic scenarios.
3.6.1. Step 1. Normalized Development Estimates
NDEs for the optimistic and pessimistic scenarios provided by technical experts (the PERT-based 3-point estimation method is used) are specified in
Table 2.
3.6.2. Step 2. Release Planning
Then, it is necessary to split the project into phases each of them has its own goal, duration, and values of parameters from system (14).
At the beginning of the project implementation (phase a), the core developers get familiar with the requirements, configure project environments, and set up preconditions to add more members to the team. In this phase, the development of the project scope starts; however, a significant amount of working time is spent on general project activities and supplementary development activities.
In phase
b, the rest of the developers are added to the team. One of the main goals of the current phase is to overcome the so-called storming and norming stages of the team building lifecycle [
35]. Due to this, the amount of working time spent on general project activities, especially on collaboration among the team members, is still relatively high.
The primary goal of phase c is to implement the project scope. In this phase, the development team is supposed to demonstrate the highest performance in comparison with the other phases. The duration of this phase, , is unknown, and one of the estimation tasks is to find its fulfilling conditions (18).
The next phase, d, is intended for preparing the software product for the user acceptance testing (UAT). Usually, the stabilization phase includes regression testing, defect fixing, and preparation of an environment for UAT. Development of the project scope is not supposed to be done in this phase (since the whole project scope is implemented previously).
During the UAT phase, a selected group of end users test the delivered software. Since there is no project scope to develop, part of the team members is unassigned. The reduced team is focused on the preparation of launching the software system to production.
The main tasks of the final phase, f, are to fix defects found during UAT, prepare the production environment, and release the system. Like the previous two phases, no development of the project scope is supposed to be done.
Summary of the project release planning, as well as values of the parameters, are provided in
Table 3.
3.6.3. Step 3. Development Team Composition
According to the project release plan (
Table 3), the development team in the initial phase
a includes only core members who are intended for setting up the project and making preparation for further scaling of the team. In the next phase,
b, the team is supplemented by a certain number of software engineers. This team composition remains the same until completing the stabilization phase,
d. In the two finalization phases
e and
f, the number of developers is reduced (since a team with so big development capacity is not required anymore). Then, the reduced team fixes defects found during the UAT and releases the software for production. Development team composition parameters are specified in
Table 4.
The IPC,
, have the following values:
where
is a project phase, and
j is an identifier of a software developer. As can be noticed, there are two exceptions in defining coefficients
: for the technical leader,
, the coefficients are equal to 1 (since the technical leader spends the other half of his working time on management activities on the same project, therefore, the part-time involvement to development does not decrease the productivity); senior database engineer,
, who is involved into other projects in parallel, consequently, the corresponding IPC is lower than 1.
Given that a software developer is absent one day per month due to an unplanned day off, a sick leave, etc., then , , . Additionally, no idle time is planned: , , .
3.6.4. Step 4. Project Duration Estimation
Applying criteria (18) and calculating NDC according to (17), we find the project duration for the optimistic and pessimistic scenarios. In the case of the optimistic scenario, it is going to take 19 sprints (approximately 9.5 months) to implement the project. In turn, for the pessimistic scenario, the project duration is 22 sprints (approximately 11 months).
Figure 1 and
Figure 2 depict the dynamics of project scope implementation expressed as reduction of NDEs for the remaining project scope (without compromising representation of the general trend, some of the NDE values are omitted intentionally in order to ensure readability of the charts).
The calculations in this section were performed by means of the Google Colab Notebooks technology using Python 3.7.13 as a programming language and the Matplotlib 3.2.2 library for visualization (the used distributions of Python and Matplotlib were provided by the Google Colab as of 9 May 2022).