Contemporary software development process is fairly manual with sprinkles of automation. As our current technological landscape permits, automation is limited to repetitive and rule based tasks. The prime examples of existing automation are:
- Static Code analysis
- Behavior Driven Development (BDD) generating Behavior / Functional Tests from a rule bound acceptance criteria
- Auto execution of Unit Tests at each build
- Auto execution of Tests (pre-written as test script) after deployment in sub prod environments
- Auto deployment using CI/CD Pipeline
- Executing Regression test suit
All of the automation listed above have following characteristics:
- In each project/product development environment, deployment environments, availability of tool set, technical landscape, and product under consideration itself are unique, so act of creating automation is not automated;
- Automation is hand crafted by engineers; and
- Fragmented automation
Following areas of software development are not automated at all (or most of it):
- Requirement Management
- Technical Architecture and Design
- Technical Architecture and Design review (for ease in change, accuracy, efficiency & utilization of underlying resources, future proofing (sic!), compliance & regulatory requirements, security and performance requirements, policy compliance, and adhering to best practices)
- UX Design
- UX Design review (for usability, ease in change, accuracy, efficiency & utilization of underlying resources, future proofing (sic!), compliance & regulatory requirements, security and performance requirements, policy compliance, and adhering to best practices)
- Code writing (recently code generation is started gaining traction)
- Unit Tests writing
- Code and Unit Tests review (except for static code analysis)
- Writing Functional tests
- Executing Functional tests
- Writing Integration / End-to-End tests (except for Behavior tests under BDD regime)
- Executing Integration / End-to-End tests (
- Writing Performance / Load tests
- Executing Performance / Load tests
- Writing Security tests
- Executing Security tests
- Technical Documentation (Most of the IDEs generate inline documentation but at low level, not explaining Architecture and Design)
- Project Management (Agile, hybrid, waterfall)
- User Documentation (Training material)
- Automation of automatic tasks
With the arrival of GenAI and contemporary developments in machine learning a paradigm shift is taking root in code writing - usage of AI Assistants Agents (e.g. Copilot from GitHub) for code generation within IDE. Code generation by AI tools has started acting as fellow developer who can write code from well-crafted prompts.
The tool chain for software development tasks are fragmented and require highly specialized persons and in large number due to
- Complexities of underlying business requirements;
- Available platforms, tools & technologies;
- Dependency on underlying infrastructure; and
- Inter-dependencies of above.
The next level of automation in software development will be a framework of interconnected AI Agents, AI Assistants, and AI bots. This automation will drastically change software development team composition and put pressure on team’s skill set.
A fully AI immersed software development framework will have collaborative AI Agents, Assistants and Bots:
- Collating and compiling evolving requirements;
- Developing & maintaining Technical Architecture & Design and continuously reviewing it;
- Developing and maintaining UX Design and continuously reviewing it;
- Generating Code and unit testing in accordance with agreed upon Technical Architecture & Design, UX Design, and Requirements;
- Continuous reviewing the generated code (and unit tests) and giving feedback to code generation AI toolset ;
- Generating functional & non-functional test cases and test scripts for automatic execution;
- Refactoring the Technical Architecture & Design and code to incorporate results of testing and evolving requirements;
- Configuring CI/CD pipeline and deploying it; and in the last;
- Deploying the code in non-production environment; and
- Deploying the code in production environment and validating it.
The envisioned AI immersed software development will have following characteristics:
- Software development team will consists of two types of team members – Human and AI members
- Each Human team member will have at least one companion – specialized AI Agent or Assistant
- Rule based automations will be taken-care by AI Bots
- Human team members will focus on human interactions (e.g. eliciting requirements)
- Human team members will also focus on jobs which does not have table-top environment (e.g. Defining Technical Architecture, defining UX Design, defining rules for AI Bots, etc.)
- Majority of Human team members will be performing requirement elicitation, defining & reviewing Technical Architecture, defining & reviewing UX Design, Rules for CI/CD pipeline, validation in production environment, deploying AI tool set (Agents, Assistants, and Bots)
- TDD is fading and soon be past
- BDD will drastically change to accommodate emerging AI toolset
- A new SDLC will emerge where different phases will merge into each other (not like Agile) and some will fade to give way to new ones
- A new team structure is emerging which is Business/System Analyst, Sr. Technical Developer, and Sr. Quality Analyst heavy who can elicit requirements and provide oversight over AI toolset
- Project Management (whether Agile, Hybrid or Waterfall) will change drastically. A new way of managing SDLC cycle is emerging to accommodate new SDLC and team structure
In future articles, I will be exploring different phases of SDLC, team structure, software development methodologies, and metrics evolving in response of AI overtake of software development.