Do this in the right order (almost nobody does)
I wrote this 10 years ago. It's only become more true, and getting this wrong is what Bluesky got wrong:
1. Design a data abstraction that solves a class of problems.
2. Design a good wire protocol for that abstraction.
3. Better yet, design 2 protocols: one server-to-server and one client-to-server. The server to server protocol must be based on immutable append.
4. Implement a simple as possible server. Do not try too hard to make it performant, just very easy to install and very easy to understand. This is the protocol reference implementation. Reading this should should be reading the spec, and vice versa.
5. Implement an open source client library, that completely covers the entire data model and the entire wire protocol.
6. Implement another open source client library, in a very different programming language. If this is difficult, you let your knowledge of your favorite language overconstrain the wire protocol. Go back to step 2 and fix it.
7. Implement a command line client on one of those libraries. Again, it must completely cover the entire data model.
8. Implement an ok GUI app. NOT HTML/JS based. NOT Electron.
9. Implement a very high performance highly scalable server. If you are tempted to change the wire protocol to do this, you have screwed up.
10. Now, and only now, you can implement some easy to use GUI apps. At this point, and at this point only, do you bring in any "designers", "UX" people, or anyone who uses Photoshop as working tool.
Of course, for the past 15 ^H^H 25 years, everyone has been doing this backwards, with disastrous results.
Absolute exclusions until step 9 (non-negotiable)
1. Venture capitalists and anyone representing VC incentives
Why excluded
Failure mode introduced
2. Trust & Safety, Policy, Integrity, or “Responsible X” teams
Why excluded
Failure mode introduced
Protocols must eliminate discretion, not depend on it.
3. Social theorists, ethicists, “what this should do for the world” thinkers
Why excluded
Failure mode introduced
A protocol answers “what can exist,” not “what should happen.”
4. UX designers, product designers, and user-journey specialists
Why excluded
Failure mode introduced
UX belongs after the substrate stops moving.
Recommended by LinkedIn
5. Brand, communications, PR, and “community narrative” staff
Why excluded
Failure mode introduced
Protocols must be allowed to be boring and blunt.
6. Legal teams (except for narrow threat modeling)
Why excluded
Failure mode introduced
Legal review comes after invariants exist.
Conditional exclusions (allowed only as silent reviewers)
7. Senior management / executives
Allowed only if they:
Failure mode if active
8. Growth, analytics, or monetization specialists
Why limited
Failure mode introduced
Who must be in the room before step 9
For contrast, the allowed set:
If someone cannot explain:
they should not be shaping the protocol.
The hard rule (the one orgs break)
Anyone whose job depends on ambiguity, discretion, narrative control, or moral authority must not shape the substrate.
Those functions sit above the protocol, not inside it.
Back in the DOS/SVGA VESA BIOS era, I had fun writing my own gui.
I am sorry Mark — I am LinkedIn challenged (apparently). Is this linkable on the web somewhere?
Wonderfully well put. Saving this! There is one gap I see. Excluding everyone with short-term objectives too often leads to never shipping. Case in point, OpenStack shipped every six months (technically), but did not meet basic “enterprise ready” criteria for 7 years, until Train shipped. In year 8, Kubernetes appeared on stage. By that point, HP had run away screaming (Helion shutdown, exit from all OSS foundations), Dell had “failed fast” (to their credit), and IBM was shutting down its product. OpenStack is pretty good, but was “ready” too late — Enterprise customers moved forward, while Telcos still love it. Perfection on an infinite schedule is no plan. Not unless you are painting the Sistine Chapel and your market size is 1 Pope. You need someone (customers, PM, SABDFL, Steve Jobs, a war, the Olympics, a funding deadline, an angry executive, what have you) to force a deadline to usefulness for your audience. Which may be long (“Apollo on the moon by 1969”), but cannot remain open-ended. Work expands to occupy all available time, so time has to be a bound quantity. This list suggests standards committee 10-year cycle to me — IETF at best, IEEE at worst. And we are not landing on the moon here, nez-pas?
This is certainly not a post about MCP.
Intuitively obvious to the casual observer.