“If you embrace special orders, you’re doing something difficult, scarce and worth seeking out.”
Seth Godin here.
Recent post, “Long Tail Dynamics in OSS,” highlighted the different bands of customers that a CSP services and the different OSS that they use to service each band. The head (the top-X customers by revenue) tends to get customised OSS solutions, whilst the long tail (the other customers, many of who generate very little individual revenue or profitability for the CSP) tends to get a one-size-fits-all multi-tenant OSS.
OSS developers, like any software developers, are often faced with the dilemma of which type of code tree strategy to follow. Do you follow the “Main Line” approach or the “Special Orders” approach as highlighted in the diagram below?
The main line approach sees all code developed towards a common objective, with no custom branches for any customers. Every customer gets the same functionality and there is only ever one current version of code being used by every customer. This approach is attractive because there is only one version of code to enhance and maintain, which allows all coder hours to focus on roadmap functionality (represented by increasing the height of the tree as fast as possible).
The special orders approach sees every different customer wanting specific modifications to suit their needs. If the developer wants to add new functionality, significant effort must go into evaluating which customers want it, whether it can be easily added to each customer branch, whether changes to any of the branches cause problems to third-party applications / processes / data / integrations and corresponding release management and supportability challenges.
In my experience, every developer wants to stay on the main line with no branching, but at some point becomes swayed by the special order requested by key customers.
In my opinion, there are three strategies that should be held onto steadfastly and you have to know whether your target customer base fits into the head or long-tail band:
- STRATEGY 1 – If your customer base consists of tier-1 CSPs / utilities, with an appetite and budget for specifically customised solutions, choose the “special orders” approach, knowing what the ongoing ramifications will be. You will need to embrace the variations
- STRATEGY 2 – If your customer base consists of customers that have smaller budgets and are willing to put up with flexibility through configuration rather than code change, then choose the “main line” approach and build delivery models
- STRATEGY 3 – If you service customers that want some variation but you don’t have the resources to support the ramifications, then consider a hybrid approach. This approach sees the developer producing a product along the main-line approach, but with a strategy to provide impeccable frameworks to support third-party developers to fill the custom-requirements gaps. By “impeccable frameworks” I mean highly open interfaces / APIs, 24×7 developer support mechanisms, high-quality documentation, developer forums, etc. The developer will rely on the third-parties to contribute towards the success of their brand, so they have to ensure the success of the third-parties in turn