✍️ Writing

Short reflections on building software in education contexts, managing infrastructure, and lessons learned from deploying systems under real constraints.

🤖 The Power of AI-Assisted Development in VS Code

AI-assisted coding has fundamentally changed how I approach software development. What once required hours of documentation diving, Stack Overflow searches, and trial-and-error debugging now happens in real-time conversation with an intelligent assistant that understands context, suggests improvements, and catches issues before they become problems.

Beyond Autocomplete

Early code completion tools were pattern matchers—useful, but limited. Modern AI assistants like GitHub Copilot in VS Code are something entirely different. They understand intent. Write a comment describing what you need, and the AI generates implementation. Describe a bug, and it suggests fixes. Ask it to refactor for readability, and it restructures code while preserving behaviour.

This isn't about replacing developers—it's about amplifying capability. The AI handles boilerplate, remembers syntax across languages, and surfaces patterns you might not have considered. You stay focused on architecture, logic, and the actual problem being solved.

Managing Complexity at Scale

Real projects have lots of moving parts: multiple files, interconnected services, database schemas, API contracts, test suites, and deployment configurations. Keeping all of this in your head while writing code is cognitively expensive.

AI assistance changes this equation. Ask it to trace through a call stack. Have it identify everywhere a function is used before refactoring. Request it generate tests that cover edge cases you hadn't considered. The AI becomes a second set of eyes that never gets tired and has perfect recall of the codebase it's been given context about.

Testing and QA

Writing comprehensive tests is one of those things developers know they should do but often skip under time pressure. AI assistance removes much of that friction:

  • Unit test generation — Describe the function, get test cases including edge cases
  • Test coverage analysis — "What scenarios aren't covered by these tests?"
  • Mock data creation — Generate realistic test fixtures in seconds
  • Integration test scaffolding — Set up test infrastructure for complex workflows

Tests that would take an hour to write manually can be generated in minutes, reviewed, adjusted, and committed. The barrier to good test coverage drops dramatically.

Debugging as Dialogue

Traditional debugging is a solitary hunt: set breakpoints, inspect state, form hypotheses, test them. AI-assisted debugging adds a collaborator to that process. Paste an error message and stack trace—the AI explains what's happening and suggests likely causes. Describe unexpected behaviour—it asks clarifying questions and walks through potential issues.

This is particularly powerful for those "impossible" bugs—race conditions, memory issues, edge cases in library interactions. Having an assistant that can reason about code at multiple levels of abstraction simultaneously often surfaces solutions faster than solo debugging.

Learning Accelerated

Every AI interaction is a learning opportunity. Working in an unfamiliar language? The AI explains idioms as it suggests them. Using a new framework? It generates examples tailored to your specific use case. Encountering a design pattern you don't recognise? Ask for an explanation with concrete examples.

This transforms the learning curve. Rather than stopping work to read documentation, learning happens in context, immediately applicable to the problem at hand.

The Workflow Shift

My development workflow has evolved significantly:

  1. Design first — Discuss architecture with AI before writing code
  2. Generate scaffolding — Let AI create boilerplate and structure
  3. Implement iteratively — Write logic with AI suggestions, refactoring as I go
  4. Test comprehensively — Generate tests, identify gaps, expand coverage
  5. Review and refine — Ask AI to critique code, suggest improvements
  6. Document automatically — Generate documentation from code and comments

Each step involves AI as a collaborator, not a replacement. The human still makes decisions, evaluates output, and takes responsibility for quality. But the throughput and quality ceiling both increase substantially.

Practical Considerations

AI-assisted development isn't magic. It works best when you:

  • Provide clear context about what you're building and why
  • Review all generated code before committing—AI can hallucinate or miss context
  • Use it for acceleration, not as a crutch for understanding
  • Treat suggestions as starting points, not final solutions
  • Maintain security awareness—don't paste sensitive credentials into prompts

The developers who benefit most are those who understand their domain deeply and use AI to work faster within that understanding. Those who blindly accept AI output without comprehension will produce fragile, unmaintainable code.

The Verdict

AI-assisted development in VS Code has made me measurably more productive. Projects that would have taken weeks now take days. Bugs that would have consumed hours are resolved in minutes. Code quality has improved because there's always a second perspective available.

This site, the projects documented here, and much of my recent work has been built with AI assistance. Not by AI—the decisions, architecture, and intent remain human—but with AI as a tireless, knowledgeable collaborator.

If you're not using AI-assisted development tools yet, the learning curve is worth it. The productivity gains are real, and they compound over time as you learn to collaborate more effectively with your AI assistant.

📚 More Topics

Additional articles coming on:

  • 🎓 Building Software in Education — The unique constraints, governance requirements, and ethical considerations of educational technology.
  • 🔐 Privacy and Data Sovereignty — Why privacy-first design matters, and how to build systems that respect user data.
  • ⚙️ Systems Over Features — The value of reliable, maintainable systems versus feature-driven development.
  • 🖥️ Infrastructure as Practice — Lessons from managing private infrastructure, handling incidents, and building resilience.

📝 Approach

Writing here is not performative or promotional. It documents actual experiences, design decisions, and outcomes—both successful and instructive failures.

If you're interested in specific topics or have questions about the systems documented in the projects section, feel free to reach out. 💬