Tuesday, March 28, 2017

Cost of delay

Cost of Delay
The Cost of Delay (COD) is a term used in Software Product Development. It is a method used to understand and communicate the effect of time against predicted outcomes. It provides a method to determine and evaluate the cost of not finalizing something now, by choosing to do it at a later stage.

In software development, COD can be used to determine the cost of delaying the deployment of one feature over another. Taking things a step further, if a company has multiple projects running at the same time, using COD calculations can help them prioritize which projects should be done first.

A business is there to make money and it’s logical to prioritise what you do in such a way that you maximize profits. Calculating your COD allows you to do exactly that. Let’s use a very simple example. If you’re developing a product that will add a value of $10,000 per week to your company, you will lose that amount for every week that you’re late. A delay of 6 weeks will cost the company $60,000. If you knew that up front, it would make sense to, for example, hire an additional programmer for $15,000 if that means the product will be released on time. You would still be $45,000 better off.

Quantifying the Cost of Delay

Suppose we have 3 features that we can include in our software, each with a different value and each having a different development time. We can use Cost of Delay to make the best financial decision on what to do first.

Step 1 – Determine Feature Values

Put the features, their values and their development time in a table as shown below.

Dev Time
Value / week
CD3
Feature 1
2 Weeks
$3,000
1.5
Feature 2
5 Weeks
$9,000
1.8
Feature 3
7 Weeks
$12,000
1.7

The CD3 value is calculated by dividing the value in thousands by the dev time, e.g. 3 / 2 = 1.5

Step 2 – Compare Scenarios

Let’s compare different scenarios, showing the return on investment we would get using different priorities.

1.  Do all features at the same time.
2.  Complete feature 1 (shortest time) first, followed by 2 and 3.
3.  Complete feature 3 (highest value) first, followed by 2 and 1.
4.  Complete feature 2 (highest CD3) first, followed by 3 and 1.





Step 3 – Calculate Financial Impact

Scenario 1 - All
If we do all features at the same time, we get $24,000 of value on our 15th week.  For the 14 weeks we are developing, we incur the COD of all features = $24,000.

Total COD incurred = $336,000.

Scenario 2 - Time
In this scenario, we will get our first ROI of $3,000 from week 3, $9,000 from week 8 and $12,000 from week 15. For the first 2 weeks, our COD is for all 3 features = $24,000 x 2 = $48,000. From week 3 to 7 (5 weeks), our COD is Feature 2 + Feature 3 = $21,000 x 5 = $105,000. From week 8 to 14 (7 weeks), our COD is Feature 3 = $12,000 x 7 = $84,000.

Total COD incurred = $48,000 + $105,000 + $84,000 = $237,000.

Scenario 3 – Value
In this scenario, we will get our first ROI of $12,000 from week 8, $9,000 from week 13 and $3,000 from week 15. For the first 7 weeks, our COD is for all 3 features = $24,000 x 7 = $168,000. From week 8 to 12 (5 weeks), our COD is Feature 2 + Feature 1 = $12,000 x 5 = $60,000. From week 13 to 14 (2 weeks), our COD is Feature 1 = $3,000 x 2 = $6,000.

Total COD incurred $168,000 + $60,000 + $6,000 = $234,000.

Scenario 4 – CD3
In this scenario, we will get our first ROI of $9,000 from week 6, $12,000 from week 13 and $3,000 from week 15. For the first 5 weeks, our COD is for all 3 features = $24,000 x 5 = $120,000. From week 6 to 12 (7 weeks), our COD is Feature 1 + Feature 3 = $15,000 x 7 = $105,000. From week 13 to 14 (2 weeks), our COD is Feature 1 = $3,000 x 2 = $6,000.

Total COD incurred $120,000 + $105,000 + $6,000 = $231,000.

Summary

The results from the different scenarios described above is surprising. One would have expected that doing the feature with the most value first is the best financial decision, but this is not the case. Prioritizing based on the CD3 value of a feature gives the best results. Although the difference is small in the example used, it may not be the case for your product.

Priority Method
Cost of Delay
All
$336,000
Time
$237,000
Value
$234,000
CD3
$231,000

When next time you prioritize your software development portfolio, don’t try to maximize the value delivered. Limit your Cost of Delay, or at least do the calculation before making a decision.

It’s not only about prioritisation!

COD gives you a number of other benefits that will help when you develop new or improved products:

Improved Decision Making
COD will make the economic trade-offs in your projects and processes visible. Every creative process has these trade-off decisions, where we often need feedback about what will work and what won’t fast. There are many trade-offs at the development system level where Cost of Delay can be used as an effective tool for managing workflow. COD can help you calculate suitable levels of capacity application, managing queue lengths, testing WIP limits, or improving batch sizes at different points.

Optimal Prioritisation
You can deliver more total value by using CD3. As there is never an infinite capacity to develop everything, the demand has to be controlled somehow. You have to decide where to start, determine the order in which things should be done and, importantly, when you have to change direction and move on to something else that is more urgent and valuable. If you understand Cost of Delay, you can stop using gut-feel to prioritise and be very specific in determining what to do next. Having a definitive method available will also allow you to communicate your reasoning and the logic behind it clearly.

Change the focus
By using Cost of Delay, you will change the focus from cost and efficiency, to value and speed. It doesn’t help expecting people not to estimate things like delivery dates or cost, if you are not able to give them a practical alternative that will actually help. By defining things in terms of Cost of Delay, you will achieve more of what you want and less of what won’t help you.

Read more…

Monday, March 06, 2017

Building is the easy part...



DevOps
Agile Frameworks and books tell us how to build a product--that's the easy part... What we are not told are equally important things like maintaining, operating, fixing and extending the built product. When your agile philosophies fail to cover these areas, it greatly reduces agile's benefits. This is where DevOps comes into play.

DevOps is the combination of practices, cultural philosophies, and tools; in order to increase the speed at which organizations deliver applications and services. This results in evolving and improving products at a faster pace than organizations using traditional software development and infrastructure management processes. This benefits the customers who will enjoy better services and the organization which will have a greater competitive edge.

DevOps means joining development and operations. These two teams form a single union, to oversee the total lifespan of an application: development, test, deployment, operations etc. and there are no limitations to the number of skills that can be developed when DevOps is involved. There's the possibility of quality assurance and security teams coming together in close conjunction with development and operations teams for the duration of the application's lifecycle.

These teams use practices to automate processes that historically have been manual and slow. They use a technology stack and tooling which help them operate and evolve applications quickly and reliably. These tools also help engineers independently accomplish tasks (for example, deploying code or provisioning infrastructure) that normally would have required help from other teams, and this further increases a team’s velocity.

Benefits of DevOps

Speed
For customers to get quick services; for organizations to efficiently adapt to the changing market and for them to gain the needed competency for achieving their desired business results; a model that provides maximum speed is required. No better model than the DevOps model to make these results materialize. A quick release of updates is made possible as services are ultimately controlled by the teams.

Rapid delivery
When releases are fast because of an increase in speed; quick improvement and innovation of products follow suit. When there is a consistent release of new features and bugs are quickly fixed; you will retain your customers as their needs are promptly satisfied; thus, you don't lose them to your competitors. The software release process is automatic because of the uninterrupted integration and delivery practices.

Reliability
While your delivery is fast; DevOps ensures that the application updates and infrastructure changes remain qualitative regardless of speed--the consumers continue enjoying a positive experience. To be sure of the functionality and safety of each change, you should test it with continuous delivery and continuous integration. Using practices like logging and Monitoring ceaselessly gives you information about the performance.

Scale
The risk that comes with managing complex or changing systems can be minimized when you operate and manage your infrastructure and development processes at scale. They can be efficiently managed with automation and consistency. Your development, testing, and productive environment, for instance, can be more efficiently managed using infrastructure as code.

Improved collaboration
With ownership comes responsibility and accountability. When the teams are equipped with these, they become more effective--this is what the DevOps model brings about. Labor is divided between the development and operations teams. As they closely work together, time is saved and efficiency level is increased. For example, handover periods that involve writing codes that account for the background environment is placed at a minimal level.

Security
Automated compliance policies, fine-grained controls, and configuration management techniques keep your security intact as you adopt the DevOps model. Compliance at scale can be defined and tracked using infrastructure as code and policy as code.

DevOps practices

With the necessary tools, some key practices can boost the innovation speed of organizations. These practices involve automating and streamlining the software development and infrastructure management processes.

One fundamental practice is to perform very frequent but small updates. This is how organizations innovate faster for their customers. These updates are usually more incremental in nature than the occasional updates performed under traditional release practices. Frequent but small updates make each deployment less risky. They help teams address bugs faster because teams can identify the last deployment that caused the error. Although the cadence and size of updates will vary, organizations using a DevOps model deploy updates much more often than organizations using traditional software development practices.

Another essential practice is implementing a microservices architecture. It is like a breakdown tool; it breaks down complex systems and makes projects simple and independent. Organizations can use microservices architecture to create less rigid applications and ensure quicker innovations. There are varying individual services in an application, with different functions that work independently of each other. This architecture minimizes the coordination overhead of updating applications and as each service is paired and owned by agile teams, the speed of an organization’s progress is increased.

To attend to the operational challenges that might arise because of the combination of microservices and increased release frequency; DevOps practices like continuous integration and continuous delivery come into play to ensure that reliability and safety are maintained even as a rapid delivery remains in progress. Infrastructure as code and configuration management are infrastructure automation practices that help to ensure that frequent changes do not affect the elasticity and response of computing resources.

Furthermore, engineers can track applications and infrastructure's performance using monitoring and logging, to keep them actively reactive to problems. Delivery is fast, updates are reliable and customers are satisfied with organizations that make use of these practices. Outlined below are important DevOps practices.

Continuous integration
With this software development practice; developers can as much as possible merge their code changes into a central repository before running automated builds and tests. Continuous integration ensures that bugs are quickly found and addressed, the quality of software improved, and time isn't wasted in validating and releasing new software updates.

Continuous delivery
Prior the release of a production, continuous delivery automatically builds, tests and prepares code changes. This software development practice deploys all code changes to a testing environment and a productive environment after the build stage, by expanding upon continuous integration. The right implementation of continuous delivery provides developers with a deployment-ready build artifact that has undergone series of standardized tests.

Microservices
The microservices architecture runs a set of small services in a single application. These services are independent of each other and communication between these services is by means of a well-defined interface that uses a lightweight mechanism--an HTTP-based application programming interface (API). Each service has a single function which matches microservices with business needs. There are different Frameworks or programming languages that can be used to write microservices and they can also be set to either function as a single or group of services.

Infrastructure as code
Code and software development techniques like version control and continuous integration are used to merge and provision infrastructure under this practice. The interaction with infrastructure is programmer based and at scale rather than a manual setup and configuration resource. The API-driven model of its cloud makes it possible for system administrators and developers to interact with the infrastructure as such. Code-based tools are used by engineers to interface with infrastructure; hence it is treated like an application code. There being code based makes it possible for infrastructure and servers to be quickly deployed, using fixed standards, also the latest patches and versions can either be updated or repetitively duplicated.

Configuration management
The operating system, host configuration, operational tasks etc. are automated with codes by developers and system administrators. As codes are used, configuration changes become standard and repeatable. This relieves developers and system administrators of the burden of configuring the operating system, system applications or server software manually.

Policy as code
The configuration of infrastructure and infrastructure itself are codified with the cloud. This makes it possible for organizations to dynamically monitor and enforce compliance. It enables the automatic tracking, validation, and reconfiguration of infrastructure. In that way, organizations can easily control changes over resources and security measures are properly and distributively enforced. The fact that resources that do not comply can be flagged automatically for further investigation or automatically restarted to comply, increases the speed level of teams within an organization.

Monitoring and logging
To gauge the impact that the performance of application and infrastructure have on consumers, organizations monitor metrics and logs. The data and logs generated by applications and infrastructure are captured, categorized and then analyzed by organizations to understand how users are impacted by changes or updates. This makes it easy to detect sources of unexpected problems or changes. It is necessary that there be a constant monitoring, to ensure a steady availability of services and an increment in the speed at which infrastructure is updated. When these data are analyzed in real-time, organizations proficiently monitor their services

Communication and collaboration
This is the key feature of DevOps model; as development and operations come together and share their responsibilities, team spirit is enhanced and communication skills are facilitated. Chat applications, project tracking systems, and wikis are some of the tools that can be used by not just developers and operations but also other teams like marketing or sales. This brings all parts of the organization closely together as they cooperate to see to the realization of goals and projects.

Read more…