Customizable Features
Generalizing a feature starts with a solution built for one customer and asks what shared version belongs in the platform.
Where a Feature Starts
Imagine a product that serves many organizations, each with its own needs. Often the first working version of a capability does not start in a central product team. It starts with an engineer working directly with one customer, solving that customer's problem in the field. The solution may work very well, but it lives in that one customer's context.
This article follows what happens next. The question is how a solution built for one customer becomes something the whole platform can offer, so that later customers do not have to start from scratch.
Tracing the Path From Field Build to Platform
The source describes a sequence that moves a feature from a single customer's engagement into the central product. The easiest way to follow it is as a trace of who does what and in what order. The field build is the starting observation. The generalized feature is the product of a design conversation. The deployment to other customers is what finally pays off the effort.
- 1Step one: a feature is built by an engineer working with a single customer, solving that customer's problem in the field.
- 2Step two: the product team asks what the generalized version of this feature is that belongs in the platform.
- 3Step three: the team looks for three or four other customers where the same pattern might apply.
- 4Step four: the generalized feature is designed, with a common core and a customizable layer.
- 5Step five: the central feature is built once, and each field engineer deploys that same feature for their own customer.
The turning point is the design step. Before it, the work belongs to one customer. After it, the work is a shared feature with a common core that the platform owns.
Finding the Common Pattern
The starting point for generalization is recognizing that a feature built for one customer resembles a need elsewhere. Answering the product question requires looking past the specifics of the first customer and finding the underlying pattern. A feature is worth generalizing when that pattern is real and not just a quirk of one organization.
The search is deliberately small. The team looks at three or four other customers where the same pattern might apply. That number is enough to test whether the pattern holds across different settings, without turning the design effort into a survey of the whole customer base.
Testing a pattern across customers
A field engineer has built a reporting capability for one customer. Should the team generalize it, and how would they check?
- 1Describe the first build
The engineer's solution produces a report from the customer's data and the customer's own layout. It works, but it was built in that customer's context.
- 2State the underlying need
Strip away the first customer's specifics and ask what need the feature meets in general. Here the need is a report that other organizations could also use.
- 3Look at three or four other customers
Check whether the same need appears in three or four other customers. If it does, the pattern is worth designing for. If it appears only in the first customer, the feature may stay local.
- 4Separate what is shared from what differs
Identical parts, such as the core logic, belong in the shared core. Parts that differ from customer to customer, such as their own details, belong in the customizable layer.
The team generalizes the feature only when the pattern appears across several customers, and it places the differing details in the customizable layer.
Splitting the Core From the Customizable Layer
The idea of two layers is what makes the approach workable. The core is the part that gets built once, in the central product. The customizable layer is where customer-specific details live. Because those details are kept out of the core, the core stays the same for every customer while still fitting each one's situation.
The diagram shows one core with a separate layer for each customer. Every customer's layer attaches to the same core. The core does not change to suit one customer, because the things that differ live in the layers.
One Build, Many Deployments
Once the central feature exists, it reaches customers through deployment. The feature is built once, and then each field engineer deploys that same feature for their own customer. The state of the work changes from several parallel builds to one implementation that many customers configure and use.
The source's example describes four engineers deploying one feature across four customers, instead of each engineer building a separate version. The effort of designing the feature is paid once, and the payoff comes from each later deployment. Avoiding duplicate builds is the reason the mechanism exists.
Mistakes When Generalizing a Feature
Common mistake Generalizing from a single customer
Why it failsA pattern seen in one organization has not been tested across different settings, so it may not be a real common pattern.
Do this insteadLook for the same pattern across three or four other customers before designing the shared feature.
Common mistake Writing one customer's details into the shared core
What it looks likeA customer-specific detail is hard-coded into the central feature, so every other customer inherits it.
Why it failsThe core is supposed to stay the same for every customer. Customer-specific details belong in the customizable layer.
Do this insteadMove customer-specific details into the customizable layer and keep the core free of them.
Common mistake Surveying the whole customer base
Why it failsThe source keeps the search small on purpose. A broad survey turns the design effort into something much larger than needed.
Do this insteadTest the pattern against a small number of other customers, such as three or four.
Common mistake Building a separate version for each customer instead of deploying one central build
Checking Your Understanding
A field engineer built a scheduling feature for one customer. Describe, in order, the steps that would move it toward a central, reusable platform feature, and name the step where it stops being one customer's build.
Hints
- Start with the field build and the question the product team asks next.
- Look for the step where the team designs the shared version and separates the core from the customer-specific details.
- The turning point is the design step, not the deployment.
Two customers both need a feature that sends a summary. One customer wants its own name in the summary header and the other wants a different name. Explain which part belongs in the shared core and which part belongs in the customizable layer, and justify your answer using the two-layer idea.
Hints
- Ask which parts are identical across both customers.
- Ask which parts differ, and where the source says those details belong.
Key Takeaways
- A solution built for one customer is the starting observation, and the platform question is what shared version belongs in the central product.
- A feature is worth generalizing when a common pattern appears across a small number of other customers, typically three or four.
- The shared core is built once in the central product, while customer-specific details live in a separate customizable layer that attaches to that core.
- The central feature is deployed by each field engineer for their own customer, so one build replaces several duplicate builds.