AI-Assisted Software Development
Build faster with AI while keeping developers (not models) in control
Why this course
AI coding tools can accelerate research, implementation, testing, refactoring, and documentation, but speed without engineering discipline creates a different kind of technical debt: plausible-looking defects, unnecessary rewrites, excessive token consumption, security exposure, and developers who repeatedly ask the model to debug problems it introduced.
This three-day course teaches software developers to use AI as an engineering accelerator rather than an unquestioned source of truth. Participants learn to define requirements before generating code, provide only the context required, constrain agent behaviour, validate every important output, and stop unproductive AI debugging loops. Python and C# are used for demonstrations and practical exercises in Visual Studio Code, with both IDE-based assistants and command-line agents such as Claude Code.
The curriculum incorporates the requested foundations, prompt engineering, specification-driven development, agentic workflows, security controls, and cost engineering. It also reflects current development environments in which coding agents can plan work, edit multiple files, execute commands, and iterate on failures—capabilities that make human review, permissions, context control, and acceptance criteria increasingly important.
The instructor brings more than 30 years of industry experience and will present practices drawn from real software delivery environments rather than treating AI-assisted development as a purely academic subject.
Learning outcomes
Upon completion, participants will be able to:
- Explain how large language models generate code and why their output can appear correct while remaining technically wrong
- Select appropriate AI assistance for research, planning, implementation, testing, review, debugging, and documentation
- convert incomplete requirements into structured specifications and verifiable acceptance criteria
- Write concise engineering prompts that reduce ambiguity, unnecessary context, and repeated token consumption
- Apply a specification-to-plan-to-implementation workflow
- Use AI without surrendering architectural, security, or quality decisions
- Evaluate AI-generated Python and C# code through compilation, tests, static analysis, and manual review
- Prevent repeated AI debugging loops and recognise when conventional debugging is more efficient
- Use VS Code effectively for controlled AI-assisted development
- Operate CLI-based coding agents such as Claude Code with appropriate permissions and repository context
- Manage context windows, repository instructions, conversation scope, and task boundaries
- Apply human approval gates to agentic coding workflows
- Identify prompt injection, sensitive-data disclosure, insecure output handling, excessive agency, and tool-abuse risks
- Reduce AI development costs through model selection, context trimming, task decomposition, caching, and usage monitoring
- Establish practical team standards for reviewing and accepting AI-assisted code
Prerequisites
- Working knowledge of software development
- Familiarity with either Python, C#, or another modern programming language
- Basic understanding of Git and source-control workflows
- Basic command-line experience
- Familiarity with software testing and debugging
- A development workstation with Visual Studio Code
- Python SDK and runtime
- .NET SDK
- Git client
- Access to an approved AI coding assistant
- Access to Claude Code or an equivalent CLI coding agent
- Permission to install the required VS Code extensions and command-line tools
- A non-production repository containing no confidential credentials or restricted organisational data
18 modules
01AI-Assisted Development as an Engineering Discipline4 topics
The Role of AI in Modern Software Delivery
- AI as an accelerator rather than an authority
- Developer accountability for generated code
- Appropriate and inappropriate uses of coding assistants
- Productivity gains versus hidden engineering costs
- Automation bias and overreliance
- Maintaining developer knowledge and problem-solving ability
AI, Machine Learning, Generative AI and Agents
- Artificial intelligence
- Machine learning
- Generative AI
- Large language models
- Coding models
- AI assistants
- AI agents
- Deterministic software versus probabilistic model output
How Coding Models Produce Responses
- Tokens and tokenisation
- Context windows
- Training data and learned patterns
- Inference
- Next-token prediction
- Model parameters
- Dense models
- Mixture-of-experts models
- Reasoning and thinking models
- Quantisation
- Model capability limitations
- Knowledge cut-off limitations
Why AI-Generated Code Fails
- Hallucinated APIs
- Incorrect library usage
- Invalid assumptions
- Missing edge cases
- Version incompatibilities
- Insecure defaults
- Over-engineered solutions
- Unnecessary dependencies
- Silent behavioural defects
- Plausible but incorrect explanations
02Selecting the Right AI Interaction Mode4 topics
Completion-Based Assistance
- Line completion
- Function completion
- Repetitive code generation
- Boilerplate generation
- Localised refactoring
Conversational Assistance
- Technical research
- Requirement clarification
- Design exploration
- Code explanation
- Review support
- Test-case identification
Agentic Assistance
- Multi-file changes
- Repository exploration
- Command execution
- Test execution
- Build execution
- Iterative implementation
- Autonomous correction loops
Choosing the Lowest-Sufficient Level of Autonomy
- Manual implementation
- Inline completion
- Chat-based generation
- Edit mode
- Agent mode
- CLI agent
- Human approval requirements
- Task risk classification
03Engineering Prompts for Software Development6 topics
Prompt Anatomy
- Role and operating context
- Engineering objective
- Current system state
- Technical constraints
- Scope boundaries
- Input artifacts
- Expected output
- Acceptance criteria
- Verification requirements
Requirement Quality
- Intent
- Business purpose
- Functional requirements
- Non-functional requirements
- Constraints
- Assumptions
- Dependencies
- Exclusions
- Definition of done
Prompting Techniques
- Zero-shot prompting
- Few-shot prompting
- Structured prompting
- Constraint-based prompting
- Schema-constrained output
- Step-bounded instructions
- Diff-oriented requests
- Review-only requests
- Plan-only requests
- Test-first requests
Reducing Prompt Ambiguity
- Replacing vague verbs
- Defining expected behaviour
- Specifying supported versions
- Defining error-handling expectations
- Identifying performance requirements
- Identifying security requirements
- Establishing naming and style conventions
Prompt Anti-Patterns
- Asking the model to build an entire system at once
- Supplying unrelated repository content
- Mixing planning and implementation
- Requesting unrestricted improvements
- Accepting unspecified dependencies
- Repeatedly submitting the same failing prompt
- Asking the model to infer business-critical requirements
- Treating generated explanations as verification
Prompt Evaluation
- Requirement coverage
- Constraint compliance
- Output relevance
- Technical correctness
- Context efficiency
- Reusability
- Verifiability
04Specification-Driven AI Development6 topics
From Intent to Engineering Specification
- Problem statement
- User and system context
- Scope definition
- Functional requirements
- Non-functional requirements
- Interface contracts
- Data requirements
- Error conditions
- Security requirements
- Operational requirements
Requirement Decomposition
- Epics and capabilities
- Features
- User stories
- Engineering tasks
- Technical dependencies
- Implementation order
- Risk areas
Acceptance Criteria
- Expected inputs
- Expected outputs
- Boundary conditions
- Failure behaviour
- Performance expectations
- Security expectations
- Observability expectations
Development Artifacts
- Product requirement document
- Technical specification
- Architecture decision record
- Task breakdown
- API contract
- Data model
- Test plan
- Pull-request description
AI-Assisted Research
- Repository discovery
- Existing implementation identification
- Dependency investigation
- Framework capability investigation
- Version verification
- Documentation verification
- Source credibility
- Separating facts from model inference
Plan-Before-Code Workflow
- Repository assessment
- Change-impact analysis
- Proposed file changes
- Dependency changes
- Test strategy
- Rollback considerations
- Human approval of the implementation plan
05Controlled Implementation Workflow5 topics
The Spec-to-Research-to-Plan-to-Implement Lifecycle
- Intent confirmation
- Context collection
- Requirement decomposition
- Technical research
- Implementation planning
- Incremental coding
- Verification
- Review
- Acceptance
Small-Batch Code Generation
- Single-responsibility tasks
- Bounded file changes
- Minimal diffs
- Incremental compilation
- Incremental testing
- Frequent checkpoints
Human-in-the-Loop Controls
- Plan approval
- Dependency approval
- File-change approval
- Command-execution approval
- Migration approval
- Security-sensitive change approval
- Final merge approval
Preserving Existing System Behaviour
- Regression awareness
- Public interface stability
- Backward compatibility
- Configuration compatibility
- Data compatibility
- Logging compatibility
- Deployment compatibility
Preventing Unnecessary AI Rewrites
- Targeted edits
- Diff size limits
- Existing-pattern reuse
- Change isolation
- Refactoring boundaries
- Formatting-only change exclusion
- Unrelated cleanup exclusion
06AI-Assisted Python Development4 topics
Python Project Context
- Project structure
- Python version
- Dependency management
- Virtual environments
- Coding conventions
- Type-hinting expectations
Python Code Generation
- Functions and classes
- Data models
- File and data processing
- API integration
- Exception handling
- Asynchronous code
Python Verification
- Syntax validation
- Type checking
- Unit testing
- Integration testing
- Linting
- Formatting
- Dependency validation
Python Code Review
- Mutable default arguments
- Exception scope
- Resource handling
- Input validation
- Type consistency
- Concurrency behaviour
- Dependency risks
- Security-sensitive operations
07AI-Assisted C# and .NET Development4 topics
.NET Project Context
- Solution structure
- Project structure
- Target framework
- NuGet dependencies
- Nullable reference types
- Coding conventions
- Build configuration
C# Code Generation
- Classes and interfaces
- Records and data-transfer objects
- Dependency injection
- Asynchronous programming
- LINQ operations
- Configuration handling
- API endpoints
- Exception handling
.NET Verification
- Compilation
- Static analysis
- Unit testing
- Integration testing
- Code formatting
- Package validation
- Framework compatibility
C# Code Review
- Async and await correctness
- Cancellation-token handling
- Nullability
- Resource disposal
- Thread safety
- Dependency lifetimes
- Exception propagation
- Input validation
- Security-sensitive APIs
08Visual Studio Code AI Development Environment5 topics
Workspace Preparation
- Repository opening
- Workspace trust
- Language extensions
- Python extension
- C# Dev Kit
- Git integration
- Terminal integration
- Testing integration
AI Interaction Modes in VS Code
- Inline completion
- Chat
- Edit workflows
- Agent workflows
- Terminal assistance
- Repository-aware context
Context Selection
- Current file
- Selected code
- Related files
- Symbols
- Errors
- Test output
- Terminal output
- Git changes
Controlled Agent Execution
- Reviewing proposed edits
- Reviewing generated commands
- Restricting workspace scope
- Monitoring multi-file changes
- Inspecting diffs
- Reverting unwanted changes
- Separating generated and accepted changes
Repository Instructions
- Architecture conventions
- Build commands
- Test commands
- Coding standards
- Dependency policies
- Security restrictions
- Prohibited operations
- Definition of done
09CLI-Based Coding Agents with Claude Code6 topics
CLI Agent Fundamentals
- Terminal-based interaction
- Repository discovery
- File reading and editing
- Shell-command execution
- Build and test execution
- Iterative task completion
Claude Code Project Preparation
- Repository scope
- Project instruction files
- Approved commands
- Build instructions
- Test instructions
- Style conventions
- Architectural constraints
- Security restrictions
Effective CLI Agent Workflow
- Explore before editing
- Request a plan
- Review the plan
- Authorise bounded implementation
- Inspect the diff
- Execute deterministic checks
- Correct specific failures
- End completed sessions
Permission and Tool Controls
- Read permissions
- Write permissions
- Command permissions
- Network access
- External tool access
- Destructive command restrictions
- Approval prompts
Context Management
- Session scope
- Context compaction
- Clearing obsolete context
- Referencing relevant files
- Excluding generated artifacts
- Separating unrelated tasks
- Maintaining project instructions
CLI Agent Anti-Patterns
- Starting without repository instructions
- Granting unrestricted command execution
- Combining unrelated changes
- Allowing uncontrolled dependency installation
- Continuing after repeated failed attempts
- Accepting unexplained file modifications
- Using the agent as the only reviewer
10Verification of AI-Generated Code5 topics
Evidence-Based Acceptance
- Compilation evidence
- Test evidence
- Static-analysis evidence
- Runtime evidence
- Requirement traceability
- Manual review evidence
Layered Verification
- Syntax validation
- Type validation
- Unit tests
- Integration tests
- Contract tests
- Security tests
- Performance checks
- Manual exploratory checks
AI-Assisted Test Development
- Test-case identification
- Boundary-value analysis
- Negative testing
- Error-path testing
- Regression testing
- Test-data generation
- Test adequacy review
Reviewing Generated Tests
- Tests that reproduce implementation logic
- Missing assertions
- Over-mocking
- False-positive tests
- Missing boundary cases
- Non-deterministic tests
- Tests disconnected from requirements
Code Review with AI
- Review against requirements
- Review against architecture
- Review for maintainability
- Review for security
- Review for performance
- Review for compatibility
- Independent human confirmation
11Breaking the AI Debugging Loop5 topics
Recognising Unproductive Iteration
- Repeated speculative fixes
- Alternating between previous solutions
- Expanding change scope
- Introducing unrelated refactoring
- Repeated dependency changes
- Rising token usage without new evidence
- Loss of the original failure state
Evidence-First Debugging
- Reproducing the defect
- Capturing the exact error
- Identifying the smallest failing case
- Inspecting logs and stack traces
- Checking recent changes
- Confirming runtime and dependency versions
- Forming a testable hypothesis
Bounded AI Debugging
- Supplying the exact failure evidence
- Requesting diagnosis before modification
- Limiting the number of hypotheses
- Limiting the files that may change
- Requiring justification for each change
- Running one experiment at a time
Stop Conditions
- Maximum correction attempts
- No new diagnostic evidence
- Expanding blast radius
- Repeated regression
- Unexplained model behaviour
- Need for framework documentation
- Need for human specialist review
Switching to Conventional Debugging
- Breakpoints
- Step-through debugging
- Logging
- Profiling
- Binary search through commits
- Dependency isolation
- Minimal reproduction
- Manual documentation review
12Context and Token Efficiency6 topics
Token Economics
- Input tokens
- Output tokens
- Cached tokens
- Reasoning tokens
- Context accumulation
- Tool-execution overhead
- Agent iteration costs
Context Selection
- Minimum necessary context
- Relevant files only
- Relevant symbols only
- Focused error output
- Concise requirements
- Current implementation state
Context Reduction
- Removing repeated instructions
- Summarising prior decisions
- Excluding logs without diagnostic value
- Excluding build artifacts
- Excluding vendor and generated directories
- Starting a new session for unrelated work
Task Decomposition
- Research tasks
- Planning tasks
- Implementation tasks
- Testing tasks
- Review tasks
- Documentation tasks
Model Selection
- Completion model
- General coding model
- Reasoning model
- Fast model
- High-capability model
- Escalation criteria
Cost-Control Techniques
- Plan before implementation
- Reuse stable repository instructions
- Prompt templates
- Context caching
- Output-length constraints
- Tool-call limits
- Retry limits
- Session termination
- Usage monitoring
- Team spending controls
13Agent Architecture for Developers7 topics
Agent versus Workflow
- Fixed workflow
- Model-directed workflow
- Tool-using agent
- Autonomous coding agent
Core Agent Components
- Model
- System instructions
- Context
- Tools
- Memory
- State
- Control loop
- Stop conditions
Tool Calling
- File tools
- Search tools
- Build tools
- Test tools
- Source-control tools
- External-service tools
State and Memory
- Session state
- Task state
- Repository state
- Persistent instructions
- Short-term memory
- Long-term knowledge
Agent Loop Design
- Observe
- Plan
- Act
- Verify
- Recover
- Escalate
- Terminate
Reliability Controls
- Maximum iterations
- Time limits
- Token limits
- Tool limits
- Approval gates
- Idempotent operations
- Retry policies
- Failure recovery
Single-Agent and Multi-Agent Patterns
- Planner and implementer
- Implementer and reviewer
- Developer and test agent
- Security-review agent
- Context duplication risks
- Coordination overhead
- Cost multiplication
- Conflicting recommendations
14Agent Harness and Workflow Governance6 topics
Agent Harness Components
- Instruction layer
- Context builder
- Tool registry
- Permission layer
- Execution environment
- State manager
- Evaluation layer
- Observability layer
Controlled Context Injection
- Repository instructions
- Technical specifications
- Coding standards
- API contracts
- Security policies
- Relevant source files
Tool Registry Design
- Approved tools
- Tool schemas
- Parameter validation
- Permission boundaries
- Audit logging
- Failure handling
Evaluation Pipelines
- Build evaluation
- Test evaluation
- Static-analysis evaluation
- Security evaluation
- Requirement evaluation
- Human review
Observability
- Prompt logging
- Tool-call logging
- File-change logging
- Token usage
- Cost tracking
- Failure tracking
- Approval history
Failure Recovery
- Rollback
- Checkpoint restoration
- Retry with revised context
- Human escalation
- Session termination
- Incident review
15Enterprise Knowledge and Retrieval-Augmented Development4 topics
Retrieval-Augmented Generation Fundamentals
- Embeddings
- Vector representations
- Chunking
- Semantic search
- Retrieval
- Context injection
Software Engineering Knowledge Sources
- Architecture documentation
- Coding standards
- API documentation
- Runbooks
- Historical decisions
- Known-issue databases
- Approved implementation patterns
Knowledge Quality
- Source authority
- Version relevance
- Document freshness
- Contradictory guidance
- Deprecated content
- Access permissions
Retrieval Risks
- Irrelevant context
- Outdated documentation
- Poisoned content
- Excessive retrieval
- Cross-project leakage
- Sensitive-information exposure
16Secure AI-Assisted Software Development7 topics
Trust Boundaries
- Developer workstation
- Source repository
- AI service
- CLI agent
- External tools
- Build environment
- Deployment environment
Data Classification
- Public information
- Internal information
- Confidential information
- Personal data
- Source code
- Credentials and secrets
- Regulated information
AI Security Threats
- Prompt injection
- Indirect prompt injection
- Sensitive-information disclosure
- Insecure output handling
- Supply-chain risks
- Data and model poisoning
- Excessive agency
- Tool abuse
- Context poisoning
- Overreliance
Secure Prompt and Context Handling
- Sensitive-data exclusion
- Secret redaction
- Repository access control
- Context validation
- Retrieved-content distrust
- Instruction precedence
Secure Agent Tooling
- Least privilege
- Command allowlists
- Network restrictions
- File-system boundaries
- Environment isolation
- Credential isolation
- Destructive-action approval
Generated Code Security Review
- Input validation
- Output encoding
- Authentication
- Authorisation
- Secret handling
- Injection prevention
- Error handling
- Logging safety
- Dependency safety
Governance and Auditability
- Approved AI tools
- Acceptable-use policy
- Data-retention requirements
- Prompt and action logs
- Source attribution
- Code ownership
- Review responsibilities
- Compliance evidence
17Team Adoption and Operating Standards5 topics
AI-Assisted Development Policy
- Approved use cases
- Restricted use cases
- Prohibited data
- Approved tools and models
- Required verification
- Human accountability
Definition of Done for AI-Assisted Code
- Requirement traceability
- Successful build
- Successful tests
- Static-analysis completion
- Security review
- Dependency review
- Human code review
- Documentation update
Pull-Request Expectations
- AI involvement disclosure
- Change summary
- Requirement mapping
- Verification evidence
- Security considerations
- Known limitations
Team Metrics
- Accepted versus rejected suggestions
- Review effort
- Defect escape rate
- Rework rate
- Token consumption
- Cost per completed task
- Time to validated completion
Sustainable Developer Practices
- Maintaining foundational coding skills
- Reviewing before accepting
- Learning from generated code
- Avoiding dependency on one model
- Preserving architectural knowledge
- Sharing validated prompt patterns
- Recording failed AI approaches
18Integrated Practical Development Workflow5 topics
Python Implementation Track
- Requirement definition
- Technical specification
- AI-assisted planning
- Incremental implementation
- Unit-test generation
- Manual code review
- Failure diagnosis
- Token-use review
C# Implementation Track
- Requirement definition
- Technical specification
- AI-assisted planning
- Incremental implementation
- Build validation
- Unit-test generation
- Manual code review
- Failure diagnosis
- Token-use review
VS Code Agent Track
- Repository context configuration
- Plan generation
- Controlled multi-file editing
- Diff inspection
- Test execution
- Change acceptance
Claude Code CLI Track
- Repository instruction configuration
- Task scoping
- Permission control
- Plan review
- Bounded implementation
- Command review
- Context management
- Cost review
Final Engineering Review
- Requirement compliance
- Functional correctness
- Security
- Maintainability
- Test adequacy
- Context efficiency
- Token efficiency
- Human ownership
This course outline is provided as an indicative training framework and may be refined, reordered, expanded, reduced, substituted, or otherwise amended by the trainer to reflect participant experience, organisational priorities, technical dependencies, software availability, security requirements, time constraints, and developments in the relevant technologies. Such adjustments may be made at the trainer’s professional discretion without prior notice, provided that the overall learning objectives of the programme remain substantially represented.
A programme built around your team.
Share your training goals and requirements.