Someone suggests open sourcing the SDK. The reasoning is familiar: developers will adopt it, contributors will improve it, and it costs nothing because that code was never the product.
Two of those three are forecasts. The third is wrong, because the cost is not the code, it is the obligation you acquire the day you publish it.
Why these three models
The decision is whether to publish part of your product under an open licence, and what to expect if you do. The features that fire are a shared resource that will need governing, an outcome whose frequency is knowable and never checked, and a commitment that cannot be reversed on any terms.
Three lenses. The commons produces a complex answer about what you are creating and who will maintain it. Base rates produce a cycle answer about how often this achieves the specific thing you want. Options produce a random answer about the irreversibility, which is the part discussed least and matters most. The order is deliberate: the third should be settled before the first two are interesting.
1. Publishing is permanent in a way almost nothing else is
Start with the property that separates this from other product decisions. Code released under an open licence cannot be recalled. Anyone who has a copy keeps their rights to that version under that licence, and a fork can continue without you indefinitely.
You can change the licence on future versions, and companies do. What you cannot do is undo the release, and the attempt is itself costly: a licence change is read as a betrayal by exactly the developers the release was meant to attract, and the fork that follows competes with you using code you wrote.
Where a commitment is expensive to reverse and the uncertainty about its value is high, the flexibility you give up is the main cost of acting now, and both conditions hold here at their maximum.1 That does not argue against publishing. It argues for deciding at a moment when you understand what you are giving away, rather than in the quarter when adoption is flat and this feels like a lever.
Every other growth experiment can be stopped. This one only continues.
Because the cost of acting now is the flexibility you give up, the question that resolves it is what you will know in six months that you do not know today. If the answer is nothing, waiting buys nothing and you should publish. If the answer is which goal actually matters, or whether the interface has stopped changing, then waiting is worth something specific and you can name the date it resolves. An irreversible decision deserves a stated resolution date rather than a quarter of drift.
There is a cheaper version that keeps the option open. Publish the documentation, the interface specification and a stable public API, and do not publish the implementation. Most of what a developer needs in order to build against you is there, adoption can begin, and you have granted nothing you cannot withdraw. If demand appears and the interface holds still for two quarters, publish the code then, knowing what you are buying. If demand does not appear, you have learned the same thing at no permanent cost.
The practical consequence is a scoping instruction. Publish the narrowest component that achieves the stated goal, not the most impressive one. An SDK and a client library are almost always sufficient for adoption arguments. The engine is what people reach for when the goal has quietly become attention rather than distribution, and it is the part you cannot take back.
2. What you are creating needs governing
The second lens is about what happens after the announcement, which is the part the proposal usually treats as automatic.
A published repository is a shared resource. People draw on it, and their drawing is not free to you: issues, questions, security reports, pull requests that need review, and expectations about response times that nobody agreed to. Shared resources do not maintain themselves through goodwill; the ones that persist have boundaries, rules matched to their situation, monitoring by the users themselves, and cheap ways to resolve disputes.2
Which means the real question is not whether to publish but who owns the queue. If the answer is whoever has time, the answer is nobody, and the repository will be visibly stale within two quarters. A stale public repository is worse than no repository, because it is a checkable claim about how you maintain things, and prospects do check.
The governance decisions are small and should be made before the release rather than discovered. Who triages issues and on what day. What your stated response time is, published, so that expectations are set rather than inferred. Whether you accept pull requests at all, which is a legitimate no and much better said than implied. What is explicitly out of scope.
One class of issue arrives on a clock you do not control, and small teams rarely plan for it. A public repository attracts security researchers, and a researcher who finds a vulnerability normally works to a disclosure deadline: they report it, then publish on a fixed date whether or not you replied. Your silence does not pause the clock. So the release needs a published security contact, an inbox somebody actually reads, and a named person who can ship a patch outside the normal cycle. All three cost nothing to set up in advance and cannot be assembled in the week you need them.
Be careful with the published response time, because it is a promise and breaking it is worse than never making it. A stated two-day triage that runs to three weeks is a visible broken commitment, sitting in an issue tracker where a prospect’s engineer can read it before a procurement call. Publish the number you can meet in your worst month rather than the one you would like to meet. A long honest number costs you nothing and a short aspirational one is a liability that accrues in public.
And the expectation to correct in advance: contribution is heavily concentrated. In most open projects a very small number of people produce the overwhelming majority of the work, and the maintainer is usually the largest of them.3 The community that shows up will be smaller and less self-sustaining than the proposal assumes, and planning for three occasional contributors rather than a movement is not pessimism, it is the ordinary case.
3. How often does this produce your actual goal
The third lens is the one that decides it, and it requires you to name the goal first, which is where most of these discussions fail.
Open sourcing is proposed for several different goals that get blurred together: developer adoption leading to paid conversion, hiring signal, trust in a security-sensitive component, standardising an interface across a market, or reducing your own maintenance burden through contributions. Those have very different frequencies of success and the last one is close to a myth at small scale.
So write the single goal, then look up how often it happened.4 Not whether it can happen, which is a statement about possibility and carries no information, but how often. The evidence is available and specific: find five companies of roughly your size that open sourced a comparable component two or more years ago, and check what happened. Did paid revenue follow. Is the repository maintained. Did the contributor count exceed three.
Record the same four things for each company, because a consistent table answers questions an impression cannot. The date of the first public commit. The date of the most recent one. The number of people with more than five commits. And whether the company still sells the product that component belonged to. The last column is the one people leave out and it changes every reading, because a repository kept tidy by one maintainer looks alive and tells you nothing about whether publishing sold anything.
When you cannot find five comparable companies, that is the finding rather than an obstacle. It usually means the pattern is rare at your size, and rarity is the base rate you were looking for. Widen the sample by component type rather than by industry, since an SDK behaves like other SDKs whether the company sells logistics or payroll. If it is still empty after that, you are proposing something novel, and novel plus irreversible is the combination that earns the longest wait.
That exercise takes an afternoon and it usually reframes the decision, because the honest base rate for the trust and hiring goals is much better than the base rate for the maintenance and community goals, and companies routinely publish for the second pair while telling themselves a story about the first.
The reframing that does the most work is to stop asking whether open source is good and start asking which of the five goals you are buying, because they are not bought with the same act. Adoption wants a client library that is easy to start with. Trust wants the security-critical path visible. Hiring wants activity, which is the one that decays fastest and needs the most upkeep. Publishing for all five at once buys none of them and staffs a queue for all of them.
Where the goal is trust in a security-sensitive component, publishing is often clearly correct: the code becomes a checkable claim, and a checkable claim about security is worth more than any assertion you could make instead.
What the three say together
- Name the single goal before anything else. Adoption, trust, hiring, standardisation, or maintenance help. They are not the same decision.
- Check the frequency: five comparable companies, two years on, against that specific goal.
- Decide who owns the issue queue and what your published response time is, before the release.
- Publish the narrowest component that achieves the goal. It cannot be taken back.
Where they disagree
The commons argument and the option argument disagree about scope.
Governance says publish something small, because a narrow component generates a manageable queue and a wide one generates an obligation you cannot staff. The option argument says the value of the release rises with how useful the published part is, that a component nobody needs generates no adoption and therefore no return, and that a cautious release is the worst combination: irreversible, and too small to achieve anything.
The reconciliation is to scope by usefulness rather than by size, and they turn out to agree once you do. Publish the part that a developer needs in order to build something, which is usually an interface layer rather than an implementation, and keep the part that would be expensive to maintain in public. That is both narrow and useful, and the reason it is not the default is that it is less impressive to announce than the engine.
What none of them contain
None of the three prices what publishing does to your own team’s behaviour. Code written in public is written differently: more carefully, more slowly, with more attention to interfaces. That is usually an improvement and it is always a cost, and neither half appears in the proposal.
None of them handles the competitor who uses it. All three treat the published component as something you give to users. A competitor can adopt it, build on it, and in a market where you compete on integration breadth rather than on that component, they may benefit more than you do.
None of them handles the component that becomes a dependency for your own customers. Once a buyer builds against the published version, your ability to change it is constrained by their upgrade schedule rather than by your roadmap, which is a governance obligation acquired without a contract.
And one property the ensemble will not produce: a licence is a legal instrument with consequences that vary by jurisdiction and by how your customers’ own compliance teams read it. A permissive licence and a copyleft one produce entirely different commercial situations, and no amount of strategic reasoning substitutes for someone reading the actual terms against your actual contracts before the repository goes public.
The one action that survives the ignorance: write the single goal in one sentence, then find five comparable companies who published two years ago and check whether that goal was met. If you cannot state one goal, the proposal is about attention, and attention is the one motivation that does not justify an irreversible act.
Who has to move
The founder, because engineering will argue for it on craft grounds and marketing on attention grounds, and neither owns the maintenance queue that results. The instinct is to treat the release as the decision and the upkeep as an operational detail, which inverts their durability: the release takes a day and the obligation lasts as long as the repository is public. The cheapest first test is the five-company check, which uses only public repositories and produces a base rate specific to your size rather than the anecdotes everyone already has.
Sources and notes
- Sanjit S. Dhami, The Foundations of Behavioral Economic Analysis, Oxford University Press, and the real-options literature it references. The value of preserving flexibility rises with the irreversibility of a commitment and with the uncertainty to be resolved. Used in section 1. Open source is an unusually pure case: the commitment is close to perfectly irreversible, because the licence granted on a released version cannot be withdrawn from anyone who already holds a copy.
- Elinor Ostrom, Governing the Commons: The Evolution of Institutions for Collective Action, Cambridge University Press, 1990, with the empirical review in Michael Cox, Gwen Arnold and Sergio Villamayor Tomás, A Review of Design Principles for Community-based Natural Resource Management, Ecology and Society 15(4), 2010, article 38, open access at https://ecologyandsociety.org/vol15/iss4/art38/main.html. The review covers 91 studies and reports the design principles as well supported while recommending several be reformulated. Used in section 2 for the structural features a shared resource needs in order to persist: boundaries, locally matched rules, monitoring by users, graduated sanctions and cheap conflict resolution.
- Albert-László Barabási, Network Science, Cambridge University Press, on heavy-tailed distributions and the divergence between mean and median where a small number of cases account for a large share of a total. Used in section 2 for the concentration of contribution. The general property is what the argument needs; the stronger scale-free label is avoided, following Anna D. Broido and Aaron Clauset, Scale-free networks are rare, Nature Communications 10, 2019, article 1017.
- Sanjit S. Dhami, The Foundations of Behavioral Economic Analysis, Oxford University Press. Base rate neglect and the substitution of a vivid specific case for the underlying frequency sit in the part on bounded rationality. Used in section 3 for the direction of the error. No success rate is quoted for any open-source goal, because none is reliably published at this company size, which is why the article sends you to build a five-company sample rather than citing one.
A note on a number this article does not give. There is no conversion rate from open-source adoption to paid revenue. The figures that circulate come from a handful of exceptional companies and are quoted as though they were typical, which is precisely the substitution section 3 warns about. Build the five-company sample instead.
Joshua Agonya Pi’Rwot, Founder.