Skip to main content
SwiftCase
PlatformSwitchboardFeaturesSolutionsCase StudiesFree ToolsPricingAbout
Book a Demo
SwiftCase

Workflow automation for UK service businesses. Created in the UK.

A Livepoint Solution

Platform

  • Platform Overview
  • Workflow Engine
  • Case Management
  • CRM
  • Document Generation
  • Data Model
  • Integrations
  • Analytics

Switchboard

  • Switchboard Overview
  • Voice AI
  • Chat
  • Email
  • SMS
  • WhatsApp

Features

  • All Features
  • High-Volume Operations
  • Multi-Party Collaboration
  • Contract Renewals
  • Compliance & Audit
  • Pricing
  • Case Studies
  • Customers
  • Why SwiftCase

Company

  • About
  • Our Team
  • Adam Sykes
  • Nik Ellis
  • Implementation
  • 30-Day Pilot
  • Operations Pressure Map
  • For Your Role
  • Peer Clusters
  • Engineering
  • Careers
  • Partners
  • Press
  • Research
  • Tech Radar
  • Blog
  • Contact

Resources

  • Use Cases
  • Software
  • ROI Calculator
  • Pressure Diagnostic
  • Pilot Scope Estimator
  • Board Case Builder
  • Free Tools
  • Guides & Templates
  • FAQ
  • Compare
  • Glossary
  • Best Practices
  • Changelog
  • Help Centre

Legal

  • Privacy
  • Terms
  • Cookies
  • Accessibility

Stay in the loop

Cyber Essentials CertifiedGDPR CompliantUK Data CentresISO 27001 Standards

© 2026 SwiftCase. All rights reserved.

Back to Blog
Engineering

What 15 Years of Building Software Taught Us

SwiftCase has been in production for 15 years. Here's what we learned about building software that lasts - from technology choices to team practices.

Dr. Adam Sykes

Dr. Adam Sykes

Founder & CEO

January 5, 2026
7 min read
What 15 Years of Building Software Taught Us
Contents
  • Boring Technology Wins
  • Why Boring Works
  • Refactor Continuously, Rewrite Never
  • Technical Debt Is Real (And That's OK)
  • Intentional vs. Accidental
  • Pay Interest, Not Principal
  • Debt Has a Location
  • Tests Are Documentation
  • Monitoring Is Not Optional
  • Simple Beats Clever
  • People Matter More Than Process
  • The System Includes Humans
  • What We'd Do Differently
  • Looking Forward
  • Want to help build the next 15 years?

SwiftCase has been running in production for 15 years. Not a rewrite of something older - the same codebase, evolved continuously, serving real businesses every day.

That's unusual in our industry. Most software either gets rewritten or abandoned within a decade. Here's what we learned about building systems that last.

Boring Technology Wins

In 2011, we chose PHP and MariaDB. Not exciting choices then, not exciting now. They've served us well.

We've processed 11.8 million cases on this foundation. No "we need to rewrite in [hot new language]" conversations. The technology is boring, and that's a feature.

Why Boring Works

  1. Stability: Boring technology has known failure modes. Exciting technology has unknown failure modes.
  2. Hiring: More developers know boring technology. Hiring for exotic stacks is hard and expensive.
  3. Documentation: Boring technology has years of Stack Overflow answers and blog posts.
  4. Ecosystem: Boring technology has mature libraries for everything you need.

We've added exciting technology where it matters - TypeScript for Switchboard, modern AI providers - but the core remains intentionally boring.

Refactor Continuously, Rewrite Never

Our codebase looks nothing like it did in 2011. Every part has been refactored, often multiple times. But we've never done a ground-up rewrite.

Rewrites are seductive. "If we just started fresh, we could do it right this time." In practice:

  • You lose years of bug fixes and edge case handling
  • The new system has its own bugs that take years to find
  • You're maintaining two systems during the transition
  • Rewrites almost always take longer and cost more than expected

Instead, we refactor continuously:

  • Replace components one at a time
  • Keep the system working throughout
  • Spread the risk across many small changes

It's less exciting but far more reliable.

Technical Debt Is Real (And That's OK)

Every codebase has technical debt. Pretending otherwise is delusional.

The question isn't whether to have debt - it's how to manage it:

Intentional vs. Accidental

Intentional debt: "We know this isn't ideal, but we're shipping it this way for good reasons. Here's the ticket to fix it later."

Accidental debt: "Wait, why does this work this way? Who wrote this?"

Intentional debt is fine. Accidental debt is dangerous.

Pay Interest, Not Principal

You don't have to pay off all debt immediately. Sometimes the right move is to pay interest - work around the debt - while focusing on more important things.

What matters is that you're aware of the debt and making conscious decisions about it.

Debt Has a Location

Not all debt is equal. Debt in a core system that's touched daily is expensive. Debt in a rarely-used feature might not matter.

We track where debt lives and prioritise accordingly.

Tests Are Documentation

We have tests. Not because someone mandated coverage metrics, but because tests serve a purpose: documenting behaviour.

When you come to code you haven't touched in two years, the tests tell you:

  • What the code is supposed to do
  • What edge cases matter
  • What will break if you change things

Tests as documentation is more valuable than tests as verification. If your tests just verify that code runs, they're not helping much. If they document behaviour, they're invaluable.

Monitoring Is Not Optional

In year one, monitoring felt like overhead. By year five, it was obvious: you cannot run production systems without observability.

We monitor:

  • Application metrics: Request rates, error rates, latency
  • Business metrics: Cases processed, workflows completed
  • Infrastructure metrics: CPU, memory, database performance
  • Synthetic checks: External probes of critical endpoints

When something goes wrong - and things always go wrong - monitoring tells us:

  • That something is wrong
  • What is wrong
  • When it started
  • Where in the system the problem is

Without monitoring, you're debugging blind.

Simple Beats Clever

Clever code is hard to understand. Hard-to-understand code is hard to maintain. Hard-to-maintain code becomes nobody's code.

We've learned to favour:

  • Explicit over implicit: Clear code over magical frameworks
  • Obvious over elegant: Readable over impressive
  • Standard over custom: Use existing solutions before building your own

The cleverness that felt satisfying to write becomes a burden six months later when someone else (or you, having forgotten) needs to modify it.

People Matter More Than Process

We've tried various processes over the years. Scrum, Kanban, various hybrids. What we've learned: the specific process matters less than:

  1. Clear ownership: Someone is responsible for each thing
  2. Fast feedback: Know quickly when something is wrong
  3. Psychological safety: People can admit mistakes and ask questions
  4. Sustainable pace: Sprints that don't burn people out

A mediocre process with good people works. A perfect process with burned-out people doesn't.

The System Includes Humans

Software doesn't exist in isolation. It's part of a system that includes:

  • Users who need to understand it
  • Support staff who need to troubleshoot it
  • Operators who need to deploy it
  • Developers who need to maintain it

Design for all of them, not just end users.

This means:

  • Good error messages: "Something went wrong" helps no one
  • Audit trails: What happened and why
  • Operational tools: Easy deployment, rollback, debugging
  • Documentation: Not just API docs, but operational runbooks

What We'd Do Differently

Fifteen years of hindsight reveals some things we'd change:

  1. Start with better data modelling: Early schema decisions haunt you forever
  2. Invest in CI/CD earlier: We automated deployment later than we should have
  3. Write more integration tests, fewer unit tests: Unit tests of implementation details broke constantly during refactoring
  4. Document architecture decisions: Tribal knowledge doesn't scale

But honestly? Most of our major decisions were right. Boring technology, continuous refactoring, sustainable pace, good people - these principles work.

Looking Forward

SwiftCase will keep evolving. We're adding AI capabilities, modernising the frontend, expanding integrations. The codebase in 2030 will look different from today.

But the principles that got us here - boring technology, continuous improvement, sustainable practices - will guide what comes next.


Want to help build the next 15 years?

We're looking for engineers who want to build software that lasts. Not throwaway prototypes - real systems that serve real businesses for years.

View engineering roles | How we build

Related Articles

Engineering

Detecting Humans vs Machines in Voice AI: AMD and VAD Explained

January 21, 20268 min read
Engineering

Text Normalisation for Natural AI Speech: Making TTS Sound Human

January 19, 20267 min read
Engineering

AI Navigating IVR Menus: How Voice Agents Automate Phone System Interactions

January 17, 20268 min read

Get automation insights delivered

Join operations leaders who get weekly insights on workflow automation and AI.

About the Author

Dr. Adam Sykes
Dr. Adam Sykes

Founder & CEO

Founder & CEO of SwiftCase. PhD in Computational Chemistry. 35+ years programming experience.

View all articles by Adam →

Related Free Tools

Workflow Mapper

Draw your business process visually and export a professional PDF.

Try free

SLA Template Builder

Build and download a professional Service Level Agreement.

Try free

Meeting Cost Calculator

See the true cost of your meetings based on attendees and salary.

Try free

11.8M+ cases processed

How we build SwiftCase

A look behind the curtain at the engineering decisions, tools, and culture that power our platform.

Meet the Engineering Team
View Careers