Concepts / Customizable Features

Customizable Features

Generalizing a feature starts with a solution built for one customer and asks what shared version belongs in the platform.

  • Programming

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.

Field build for onecustomerLook for commonpatternthree or four othercustomersDesign generalizedfeaturecore plus customizablelayerBuild once in centralproductDeploy to eachcustomersame feature, configuredper customerasks what generalizesfinds the patternbecomes shared versiondeployed to customers
At which step does a customer-specific build become a shared platform feature? Each step depends on the one before it, so the order matters.
  1. 1
    Step one: a feature is built by an engineer working with a single customer, solving that customer's problem in the field.
  2. 2
    Step two: the product team asks what the generalized version of this feature is that belongs in the platform.
  3. 3
    Step three: the team looks for three or four other customers where the same pattern might apply.
  4. 4
    Step four: the generalized feature is designed, with a common core and a customizable layer.
  5. 5
    Step five: the central feature is built once, and each field engineer deploys that same feature for their own customer.
Key point

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.

Worked example

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?

  1. 1
    Describe 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.

  2. 2
    State 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.

  3. 3
    Look 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.

  4. 4
    Separate 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.

Result

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.

Shared corebuilt once in the centralproductCustomer A layercustomer-specific detailsCustomer B layercustomer-specific detailscustomer layer attachescustomer layer attaches
What sits in the shared core, what sits in the customizable layer, and how does each customer's layer attach to the same core?

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.

Engineer A buildseparate versionCentral featurebuilt onceCustomer 1configured deploymentEngineer B buildseparate versionCustomer 2configured deploymentEngineer C buildseparate versionCustomer 3configured deploymentEngineer D buildseparate versionCustomer 4configured deploymentdeployeddeployeddeployeddeployed
How does one generalized feature change from four bespoke builds into one shared implementation that each customer configures?

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 fails

    A pattern seen in one organization has not been tested across different settings, so it may not be a real common pattern.

    Do this instead

    Look 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 like

    A customer-specific detail is hard-coded into the central feature, so every other customer inherits it.

    Why it fails

    The core is supposed to stay the same for every customer. Customer-specific details belong in the customizable layer.

    Do this instead

    Move customer-specific details into the customizable layer and keep the core free of them.

  • Common mistake

    Surveying the whole customer base

    Why it fails

    The source keeps the search small on purpose. A broad survey turns the design effort into something much larger than needed.

    Do this instead

    Test 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

MEDIUM

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.
MEDIUM

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.