You just spent a year or two leading this project. As a pure open source, project it is a success.
But now here are the investors.
And the halcyon days of leading a tightly knit C++ team of like minded, similar aged people are gone. You are responsible to “make a product” that will be used in many different , but very valid, situations by many different and very relevant teams. Also known as “paying customers”.
OK. Not to panic. Move backwards until you are able to see the full picture. Let’s call your product (to be):
XYZ is (very useful, fast and snazzy) C++ library. It is fast because it has also some very low level code using the underlying OS and CPU’s. It is a wonder how fast it is.
The full picture
- Any C++ code and thus XYZ too, primary value is on the cloud-side a.k.a. server side.
- Living inside apps/modules/services written not just in C/C++
- Across many application domains: NoQSL DB, Message brokering, trading, simulations, and such.
- 2020 Q1 and going forward, Server-Side Business Logic is not written in C++. It actually is not, for last 10 years or so.
- Server Side business logic components are written in: NODE.JS, .NET Core, Java, GO, SWIFT, and such
These are the facts. You are now responsible to produce the plan. How to make XYZ malleable and feasible for those projects, wishing to pay and use XYZ.
To visualize and make you understand better the typical role reserved for XYZ here is one typical Azure system that might be using it. Can you spot the XYZ?
That is what I am calling a “full picture”. Please note this is just the “cloud side”, of the system, where XYZ might be used. Reasons these projects might pay and use XYZ are only three:
- Comfortable API
In that order of relevance. Yes, cost is least relevant. And there is a competition too.
And the plan is
So you have these bellowed C++ baby of yours. And now, you have investors who are asking you to make it into a product that will be sold. In much more than few copies. And it will have to be installed and maintained on all the relevant cloud’s. On both relevant OS-es.
My proposal to you is to dramatically change/refactor XYZ to conform to the following architecture.
- First make core written in C11 — delivered as .h and .c file(s)
- The only feasible way to use your product , cloud side
- The only way around the ABI problem.
- Second is single header Standard C++ API (using that core) for people wishing to use it in their C++ code.
- Be sure to be firm about the C++11/14/17/20 issue. Standard C++ is C++17.
Why this dramatic advice?
My favorite use case is SQLITE. Read about it. And then try to achieve the same with standard C++ as your codebase language.