
Reuse Over Custom Code: Why Solution Architects Must Break the Developer Mindset
Discover why reusing existing solutions before buying commercial tools and building custom ones can save your team time, money, and resources.
Mastering software architecture, technology leadership, and engineering excellence. The Architect View Master approach helps you understand systems from every viewpoint: business, technical, operational, and strategic.
Insights and perspectives on solution and software architecture

Discover why reusing existing solutions before buying commercial tools and building custom ones can save your team time, money, and resources.

A senior architect at a healthcare tech company was presenting their new microservices platform to the executive team. Fifteen minutes in, the CTO interrupted: "Wait, so where does this actually run? Are we talking containers? VMs? Which cloud regions?" The architect pulled up what they thought was their deployment diagram: A tangled mess of boxes, lines, and AWS icons that looked like it had been designed by a caffeinated spider. The CTO squinted at the screen, then at the architect, then back at the screen. "I’ll just... ask the DevOps team later."

The solution architect leaned back in her chair, coffee in hand, reviewing the morning’s pull requests when Slack exploded. The security team had detected AWS credentials in the company’s public GitHub repository: credentials with full admin access to production. The commit had been live for exactly 47 minutes, just long enough for automated scanners to find them and spin up $12,000 worth of cryptocurrency mining instances. The developer who committed them? A senior engineer with eight years of experience, who’d been pair programming with an AI assistant and simply didn’t notice when it helpfully included the credentials from a local config file.

It was 2:47 AM when Sarah, a principal architect at a rapidly scaling SaaS company, finally admitted defeat. She’d been debugging for six hours, trying to untangle a "quick refactoring" that had somehow metastasized into 847 lines of changed code across 23 files. The tests were failing in mysterious ways, her Git diff looked like a Jackson Pollock painting, and she couldn’t remember which of her "improvements" had actually broken things. Sound familiar?

It started with one of the tasks on our project kanban board: "Data migration". We were building a new application for a telecom provider. The goal was to unify two old systems into a single custom-built platform. Development was already in motion. Sprints were delivering new features. But no one had touched the data. The legacy systems had mismatched schemas, overlapping records, and different definitions for the same business terms. Some orders were in one system, but not the other. Customer records had conflicting states. Worse, every new feature we built had to be fed by clean, compatible data. Any mismatch would break logic or trigger errors in production.

In earlier blog posts, I shared a few C4 diagrams to explain architecture choices. They helped give structure to the messiness of modern systems. But I never really explained the model behind them. So that’s what this post is for. Software architects still struggle with good architecture diagrams. Some draw class diagrams for systems they haven’t even coded. Others scribble some boxes and arrows in Miro and call it a day. And none of it helps new devs understand what they’re joining. That’s why the C4 model exists. It gives us a clear way to show software architecture, using four levels of abstraction. It’s a thinking tool. Think of C4 like maps for your code. In the same way, you would use something like Google Maps to zoom in and out of an area you are interested in.

A few years ago, I worked on a customer loyalty platform for a large retailer. Every time a customer made a purchase, multiple systems needed to react. The billing system had to record the transaction. The loyalty engine had to calculate points. The marketing platform needed purchase data to trigger campaigns. At first, the team considered wiring these systems directly together. The billing service would call the loyalty service. The loyalty service would notify marketing. And so on. But within a few weeks, the design looked like spaghetti. Every new requirement added another direct dependency. One change in one system caused a ripple effect across the others. We needed a way for systems to talk without being tightly tied together. That’s when the Publisher-Subscriber pattern became the answer.
Join me at these events and workshops

A 12-hour hackathon with exclusive access to Ajax player tracking data from Eredivisie matches, building innovative solutions at the Glasgow '72 Lounge overlooking the pitch.

A cybersecurity evening featuring sessions on modern cryptography and post-quantum readiness by Coen Rundberg, and lessons from 2025 on Identity & Access Management by Helmer Berkhoff.
Get exclusive insights, articles, and updates delivered directly to your inbox. Join the community of architects and engineers.
No spam, unsubscribe anytime.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.