← Back to Blog
Building in Public

The Third Pattern: When Investigation Rewrites Your Assumptions

christian crumlish•
A robot navigating time, discovering that past assumptions must be rewritten by present investigation.
“The rain tasted like yesterday’s regrets…”

October 1

We started the day with a clear mission: Calendar integration was the only service without spatial intelligence, sitting at 85% complete with a straightforward 15% remaining. Six hours later, we’d discovered a third architectural pattern, completely changed our priorities, and learned (again) why thorough investigation beats confident assumptions.

The setup

By Tuesday afternoon, we’d documented two distinct spatial patterns in our integration architecture. Slack used a “Granular Adapter Pattern” — eleven files spread across its integration directory, each component handling a specific aspect of spatial intelligence. Notion took the opposite approach with an “Embedded Intelligence Pattern” — everything consolidated into a single 632-line file.

Two patterns, both working beautifully. Both emerged organically from their domain needs rather than from architectural decree.

Calendar was the outlier. The GitHub issue (#195) described it as “the only service potentially without spatial intelligence.” The plan seemed clear: investigate, then build the missing spatial wrapper. Maybe two days of work, tops.

We should have been more suspicious of our own clarity.

Phase 0: The contradictions emerge

I deployed two agents for parallel investigation. Code Agent dove deep into the codebase structure, tracing imports and analyzing implementations. Cursor Agent focused on the Calendar router itself, analyzing complexity and dimensional requirements.

I sometimes wonder if it’s overkill (or too expensive?) to work with a pair of coding agents in parallel, but I must say this was not the only time the two found different but complementary truths.

Code Agent reported first: “Calendar integration found at services/integrations/calendar/calendar_integration_router.py - only 397 lines, surprisingly minimal. But wait..." The agent had found something in a completely different location: services/mcp/consumer/google_calendar_adapter.py - 499 lines of sophisticated implementation inheriting from BaseSpatialAdapter.

Calendar had spatial intelligence. It just wasn’t where we expected to find it.

Cursor Agent reported next with its own contradiction: “Router shows HIGH complexity (17 methods) with spatial indicators present. But dimensional analysis shows LOW complexity across all spatial dimensions (temporal, priority, collaborative, hierarchical, contextual).”

Both agents were right. And both were seeing something we hadn’t anticipated.

The discovery

What they’d found was a third spatial pattern, one we hadn’t documented because we hadn’t fully recognized it.

The Delegated MCP Pattern: A minimal router in the integration directory that delegates all spatial intelligence to an external MCP (Model Context Protocol) consumer adapter. The router provides the orchestration interface, while the MCP adapter handles the actual spatial intelligence.

This wasn’t sloppy architecture or incomplete implementation. This was elegant separation of concerns optimized for MCP-based integrations.

Slack’s granular pattern? Perfect for real-time event coordination requiring reactive response across multiple channels.

Notion’s embedded pattern? Ideal for analytical knowledge management with stable, self-contained intelligence.

Calendar’s delegated pattern? Exactly right for temporal awareness through protocol-based integration where the MCP consumer already provides sophisticated spatial context extraction.

Three patterns. Three domain-driven solutions. All working without issues.

The pivot

At 1:27 PM, I pulled in the Chief Architect (Claude Opus) for strategic consultation. The discoveries had implications beyond Calendar integration.

“Are three patterns acceptable complexity,” I asked, “or accidental proliferation we should prevent?”

The verdict: Acceptable IF documented properly. Each pattern emerged from genuine domain needs rather than arbitrary choices. The risk wasn’t having three patterns — it was pattern proliferation through lack of documentation and selection criteria.

But there was a bigger issue hiding in the investigation results.

Code Agent had uncovered something while analyzing Calendar’s configuration: “ALL 4 services lack proper startup validation. GitHub, Slack, Notion, Calendar — none validate their configuration before attempting to run.”

This was the real infrastructure gap. Calendar being 95% complete instead of 85% complete (with only tests and documentation missing) was interesting. But services that could fail at runtime due to misconfiguration? That was a production problem waiting to happen.

The Chief Architect made the call: “Priority 1: Configuration validation for all 4 services. Priority 2: Calendar completion (the quick win). Priority 3: Document the Delegated MCP Pattern in ADR-038.”

We’d started the day planning to build spatial intelligence for Calendar. We ended up building configuration validation infrastructure for the entire system instead.

The implementation sprint

Phase 1 took about an hour. Both agents coordinated beautifully — Code built the ConfigValidator service (404 lines validating all four services), Cursor integrated it into startup and CI. By 2:30 PM, we had:

  • Configuration validation running on startup with graceful degradation
  • A /health/config endpoint for monitoring
  • CI pipeline integration catching misconfigurations before deployment
  • All 21 Calendar integration tests passing in 2.74 seconds
  • ADR-038 updated with the Delegated MCP Pattern

The whole epic — CORE-GREAT-2D — closed at 3:12 PM. Duration: 4 hours 54 minutes. All six acceptance criteria met with evidence.

What investigation actually costs

Here’s the thing about thorough Phase 0 investigation: It feels expensive in the moment. We spent 90 minutes investigating before writing a single line of implementation code.

But consider the alternative timeline:

Without investigation, we’d have spent 1–2 days building a spatial wrapper for Calendar that wasn’t needed. We’d have missed the configuration validation gap that affects production stability. We’d have three undocumented spatial patterns instead of three well-understood architectural options. And we’d have 21 missing tests instead of 21 passing tests.

With investigation, we spent 90 minutes discovering what already existed, what was actually missing, and what the real priority should be. Then we spent an hour building the right thing.

The Time Lord principle (“thoroughness over speed”) isn’t about moving slowly. It’s about not having to rebuild what you rushed through the first time.

The evening coda

The afternoon brought GREAT-2E (documentation verification and link checking), which took 74 minutes to complete after investigation revealed it was already 95% done. The Chief Architect and I closed the entire GREAT-2 epic sequence at 4:59 PM.

Two issues closed, one epic completed, approximately eight hours of focused work. Not bad for a Wednesday.

But the real win wasn’t the velocity. It was discovering we’d accidentally developed three domain-optimized spatial patterns instead of one canonical approach. It was preventing days of unnecessary work through 90 minutes of investigation. It was finding the real infrastructure gap hiding behind our assumptions.

The calendar integration was never broken. Our assumptions were just incomplete.

What’s next

Tomorrow we’ll decompose GREAT-3 (Plugin Architecture), which will build on these three spatial patterns rather than fighting against them. The configuration validation system we built today will help us identify which gaps are real infrastructure issues versus refactoring artifacts.

And we’ll approach it the same way: Investigation first, assumptions second, implementation last.

← Back to BlogAlso available on Medium