Autonomous Software Development
An autonomous vehicle has to accommodate and react to almost infinite environmental factors to successfully navigate the roads and arrive at its programmed destination. Software development, however, is not navigating one vehicle to one specified destination. Successful software development requires navigating a fleet of requirements of different sizes, different features, requiring different routing and arriving at different times. In software development parlance, these different requirements are referred to by many different names, viz. stories, use cases, functional requirements, technical requirements etc. In whatever fashion they are named, they need to be developed and delivered so viable software is available for use.
So how do we get a fleet of cars to their destinations autonomously? Simple! each car routes itself to its destination based on its very specific needs. Why not apply this exact same idea to software development. Every identified requirement can be considered to be a single car in the fleet, which needs to be routed independently to its desired destination.
Principles for self-driving software development
Every requirement is assigned a valuation
All identified requirements, whether early stage or detailed, need to be measured and assigned a valuation. The valuation algorithm considers 4 parameters that are assigned to the requirement. These 4 parameters will be size of function, size of work effort, priority and ROI. Either t-shirt or precision measurements can be used to assign number values for each of the parameters. The algorithm will generate a valuation number for each requirement. Requirements can then be queued based on their values.
Every requirement is assigned to a task-list
All the tasks that need to be completed for delivering a requirement are contained in a task-list. Based on team needs, different sets of tasks can be created upfront in task-lists. This allows easy assignment of tasks to requirements. The task-list also indicates the proportion of effort for each of the tasks in the given task list.
Every task is assigned to a workflow
A workflow determines the routine work stages for a task. It defines the status of the task at each stage and the role of the team-member that has responsibility for that stage of work. Each team member updates task progress and status for their assigned work based on their assigned roles. These updates automatically determine the next owner and completion state of the task.
Every team member is assigned to at least one role
A role defines work responsibilities. Team members can be assigned to multiple roles. Every team member has to be assigned to at-least one role. Any work in a workflow is completed by team members assigned to the role that performs that work.
Every team member has a work queue
Work items in workflows tied to tasks contained in task-lists assigned to value based requirements, ensures that team members have the highest value work in their respective work queues. Team members can easily flag an item in their queue that is blocked or waiting on a dependency and move on to the next item.
Every requirement's delivery status is available on-demand
Monitoring and adjustment is a continuous and routine activity. Summation of scope sizes for all targeted requirements automatically determines the total scope size. All task status and progress is available on-demand. Overall progress across requirements is represented through burnup charts. Risks that need to be mitigated and issues that need to be resolved can be evaluated based on flagged blockers or dependencies.
Self-adjusting triple constraints
A casual study of the science of project management indicates two fundamental activities for any project success
1. Managing execution (the right work gets done by the right person in the right way in the right amount of time)
2. Managing the triple constraints of scope, schedule and cost (right results are delivered at the right time for the right cost)
The key objective of self-driving development is to focus on execution excellence and allow the triple constraints to self-adjust. This necessarily dictates that all activities focused on managing the triple constraints have to be minimized and potentially even be eliminated.
Scope & Change control
Scope control activities have to be driven based on requirements valuations. Highest valued requirements always automatically float to the top of the queue, ensuring that work is always focused on the most valued requirements. Change control does not need to be managed actively. Shifting requirements priorities are automatically reported through available on-demand reporting.
Project Task planning
Tasks are auto generated based on task-lists. Project or delivery based task breakups are automatically available through self-generating task plans.
Task estimation & scheduling
Time spent on estimating tasks to try and predict timelines and work-effort is minimized. Task-lists with predefined individual task proportions will generate estimated times for every valued requirement and allow for auto predicting delivery timelines.
Resource allocation
Auto generated work queues based on task-lists and associated workflow will automatically be assigned to team members based on autonomous rules. Depending on team culture, work queues can also be created through self or directed assignments.
Application of self-driving development
Self-driving software development is not necessarily dependent on the development methodology that is being practiced by the development team. The core principles of self-driving software development should be applicable to any methodology, whether Agile, XP, Iterative, Waterfall or any other. The intent is not to dictate the stages of development but to maximize automation of workflow. The objective is to allow Scrum Masters, Delivery Managers, Project Managers or whomever has delivery responsibility to focus on execution excellence.
Development teams that have honed the utilization of fine grained RESTful microservices in their implementations will find that self-driving development can be effectively leveraged for dramatically increasing delivery efficiency. The inherent nature of microservices will allow the team to implement most requirements independently without needing to flag tasks for dependencies.
The time for autonomous software development has arrived and teams that actively work towards implementing self-driving principles will see a competitive advantage in the market place.
You can click here for my post on rapid continuous evolution for software products.
The views and opinions expressed here are posted in my personal capacity and do not represent any other entity that I may be affiliated with. I will love to hear your thoughts, comments or questions on this post. - Matin Bajighar, February 5, 2017.
Subject matter from this article has been used for the paper entitled "Autonomous Software Development: Sustain Market Share in Constantly Changing Software Product Industries" to be presented at WMSCI 2017