Architectural decision frameworks and system review patterns. When to choose monolith vs services, SQL vs NoSQL, sync vs async. Structured approach to evaluating tradeoffs and spotting architectural mistakes before they ship.
Architecture is decisions. Good architects make them explicitly.
Start monolith. Split only when you have evidence for ALL three:
If you can't name the specific component for all three, stay monolith. "Microservices for flexibility" is a premature abstraction.
| Signal | Choose SQL | Choose NoSQL | |--------|-----------|-------------| | Data has relationships | Yes — joins are free | No — you'll denormalize anyway | | Schema is evolving rapidly | Migrations are friction | Schema-less helps | | Need transactions across entities | ACID is a feature | Distributed transactions are pain | | Read pattern is "get by key" | Overkill | Document/KV stores excel | | Write volume is extreme | Sharding SQL is hard | Built for horizontal scale | | Need full-text search | Bolted on (fine for most) | Elasticsearch/dedicated |
Default: Postgres. It handles 90% of workloads. Add specialized stores when Postgres can't.
Rule: if the user is waiting, be sync. If the user doesn't care when it happens, be async.
Cache when ALL of these are true:
No invalidation strategy = no cache. Stale data bugs are worse than slow responses.
When reviewing a system design or plan:
Services that must be deployed together, share a database, or fail together. You got the complexity of microservices with none of the benefits. Fix: merge them back or establish real boundaries.
Building a "plugin system" for one plugin. Creating an "event bus" for two events. Writing a "generic data layer" before you have two data sources. Fix: inline it. Abstract when you have three concrete examples.
Two services reading/writing the same tables. Any schema change requires coordinating both teams. Fix: each service owns its data. Expose via API, not shared tables.
A -> B -> C -> D, all synchronous. Latency is the sum. Failure in D fails A. Fix: go async where the user doesn't need an immediate result. Add timeouts and fallbacks.
One service that "orchestrates everything." It knows about every other service. It's the bottleneck for every change. Fix: distribute decision-making. Each service handles its own domain logic.
When asked "will this scale?", work through:
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer