The past couple of years, I have been fortunate enough to have dug into many scaling tech organisations, across e-Commerce, enterprise and “prosumer” SaaS, marketplaces and even consumer products. I’ve seen many poor practices, I paid attention to the patterns, common issues and bottlenecks for scaling product engineering.
I’ve also seen some best practices and where they have had a measurable and distinct impact on the ability of a company to scale. I say company, because this isn’t just about the ability to ship new features. This is about unlocking new market opportunities, so critical when a tech company hits a certain scale.
One of the most critical aspects I have seen, one which intersects and overlaps multiple drivers for scale and growth, is Readiness for Extensibility.
In software engineering, extensibility is defined as “ the quality of being designed to allow the addition of new capabilities or functionality .” It is a measure of the ability to extend a system and the level of effort required to implement the extensions.
“No single platform can provide everything out-of-the-box to meet business needs. To drive product and quality excellence, the extensibility of the chosen software platform is critical.“
An extensible software platform should be:
What can be extensible?
Data model - The existing data model can be extended with new data types, including custom data types.
Processes - It is essential to automate the mundane, repetitive tasks to allow the end-user to focus on the high-value task and minimize room for errors. The processes should be highly adaptable and supported by tools that non-programmers can easily use.
User Interface - For an application to be successful within an enterprise, user interface (UI) is key. UI should be intuitive, highly configurable, performant, and mobile.
Integration - Business processes span multiple enterprise applications and external web services. Data moves in between several downstream and upstream systems. These processes should be well integrated to provide a cohesive and seamless experience for the end-users.
For many use-cases, there will be a need to combine multiple areas together to realise a fully-fledged feature through extensibility.
Setting the scene - Organisation Personas
Extensibility will mean different things to different people at different companies depending on many organisational dynamics. To help frame the problems and identify areas where extensibility can be. impactful, we can use some characterisations and particular attributes of the company through personas.
When a team is small, typically the dynamic of an earlier stage company or startup, devs are all chipping away at the same “monolithic” codebase, driven by the need to realise a founder’s vision and sell the idea to an early stage investor while all the time, getting feedback from the all important ‘potential’ customers.
This is generally the approach recommended for such as stage, as it is more efficient to develop and maintain in an environment of complete uncertainty.
The process is highly iterative, subject to frequent and often significant change (the Pivot) for the Exploration Startup. The team may just be 1 - 5 devs at this stage, perhaps resourced through contractors or freelancers.
A more mature startup, let’s say a few years old with solid traction, has developed an understanding of the core proposition and solution they are providing. While there will still be significant R&D work underway, this will likely be around the periphery of a stable domain model and core feature set.
The dev team has probably grown to 5 - 10 members at this stage, but the business is demanding greater velocity to realise the longer term product vision in its features. The company is running out of cash, and trying to build enough buzz and excitement around the vision with early stage customers and using this to simultaneously pitch VCs to raise their Seed or early Series A financing.
The challenge faced by the Traction Startup at this stage is that the need for a combination of a stable core service combined with rapid development of features, each which add significant technical debt due to the inevitable shortcuts taken to prioritise customer impact versus technical and architectural maturity, will seem appropriate now but very expensive to pay back later.
At this stage, the market has really validated that the company meets its core needs and the market is big enough (and perhaps growing in itself) - so much so that the company has raised anywhere between $20M and $150M in Series A / Series B funding. The company will have revenues that are growing at least at a steady rate with solid levels of customer retention.
The organisation may be growing significantly, both across Sales, Marketing and centralised operational functions - but also in Product, Design and Engineering - fuelled by a healthy round of injected capital. The engineering function may be growing from 10 - 30 people to 100, 150 or as much as 400 people covering software engineering, devOps, QA, secOps and more besides.
Yet, now there is competition - new startups ave recognised the opportunity in the market and are releasing new products with much fanfare. Large enterprises have pivoted a product area to address the same problem area and take advantage of the opportunity by filling gaps in their existing product offerings.
The pressure on the company is intense - while simultaneously adjusting practices and process to accommodate way more people, and facing the pressure of new competition and a race to dominate a category - the importance of shipping new features that keep them ahead has never been greater. It has also never been harder - teams feel like they are much more ineffective than when they were smaller, more nimble. New layers of management, new processes, politics and bureaucracy creep in. Just when you think everything should be going smoothly, you realise it has never been harder.
More than anything, it can start to feel like a different company and the culture may have changed - resulting in employee turnover and attrition while adding new bodies coming from other mature enterprises and successful startups. There maybe leadership changes, as founders now realise that they weren’t the right fit to take the company into the next stages.
How Does this relate to Extensibility?
I have been exploring how a readiness for extensibility can serve to address many of the challenges faced by companies at their relevant stages of growth and development.
I am excited to say, that what I have observed, tested and found has been enlightening.
An “Exploration Startup” can leverage extensibility to rapidly iterate prototypical ideas quickly, often crudely, in order to demonstrate a key hypothesis of their vision. This beats a powerpoint presentation hands down, every time.
A “Traction Startup” can defend the solid and stable core domain model, APIs and resources at a time when ordinarily, huge swathes of technical debt is absorbed by the systems. A small core team responsible for the core services can be augmented with community, contract, freelance or on-demand resources that are hired to consume extensibility interfaces and bring new experimental features to life quickly so that they can be tested with customers. If they don’t work or need significant change, they can be discarded without long term burden on the core systems. If they are validated, then they can continue to develop independently or by converted to native core features at any time.
A “Scaleup Startup” can unlock new Platform-enabled capabilities to support the immense organisational growth that has become stuck, creating faster and safer environments to develop independently with clear ownership and domain boundaries. Internal Platform capabilities can be externalised to unlock new go to market propositions - such as Developer-facing propositions through APIs, SDKs and marketplaces for extensions and addons built by the community. Strategic partnership programmes and integrations can be accelerated through self-serve and assisted models - key for distribution and growth.
In this thread, I will open up thoughts, explorations and examples of extensibility in practice. In particular, I will demonstrate how our very own Forge platform can hep you achieve an extensibility-first architecture at whatever scale or stage of development your company is at.