← All writing

From Product Goal to a Self-Service API

Lessons from taking VTEX Rise account provisioning from technical discovery and API contracts through rollout and production validation.

  • API Design
  • Backend Engineering
  • Product Delivery

“Let customers sign up on their own” sounds like one feature. In practice, a self-service flow depends on several parts of a product working together: the registration experience, the API contract, and the process that creates an account. An endpoint can be correct in isolation and still leave the customer unable to finish the journey.

I saw this while owning the design and delivery of the VTEX Rise self-service account provisioning API. My work spanned technical discovery, an RFC, API contracts, validation rules, rate limiting, rollout, and production validation. I also coordinated engineering teams integrating registration with account creation.

Start by making the outcome concrete

Product goals often leave implementation questions open. What information does the caller need to provide? Which conditions make a request valid? What should happen when an input is incomplete or an account cannot be created? Which other systems need to participate?

Technical discovery helps surface those questions before they turn into mismatched assumptions between teams. The goal is not to document every hypothetical. It is to agree on the decisions that affect the API boundary and the customer journey.

For VTEX Rise, I translated the high-level requirement into an RFC and API contracts. Writing those decisions down gave the teams a shared reference for what the API accepted and how the registration and account-creation pieces fit together.

Make validation and limits part of the contract

Validation rules define which requests the system can act on. They should be clear to the caller and consistent with the rules of the underlying workflow. When validation is left vague, clients guess, and the service ends up handling avoidable failures.

Rate limiting belongs in the design conversation too. It sets an explicit boundary on request volume and helps protect a service as more clients depend on it. The specific limit should come from the system’s capacity and product needs; the important part is deciding how the API communicates that boundary and what clients should do when they reach it.

In this project, defining validation and rate limiting was part of the API design, alongside the contracts themselves. That kept operational concerns connected to the user-facing capability instead of leaving them until after integration.

Coordinate the whole journey

Self-service onboarding crosses team boundaries. Registration and account creation have to connect in the right order, and the resulting flow has to make sense to a customer who has no support agent guiding them through it.

I coordinated the engineering teams responsible for those integrations, then supported rollout and production validation. Checking the system in production matters because a successful implementation and a working customer journey are related, but not identical, outcomes.

The result was a fully digital self-service flow for creating VTEX accounts. I do not have a public metric for conversion or completion rates, so I describe the result in terms the work established: the integrated onboarding capability was delivered and validated in production.

What I carry into the next API project

An API is both a technical interface and a promise to its callers. Make the contract explicit, put validation and rate limits in the design, and involve the teams that own every part of the flow. Then validate the complete journey after rollout.

That approach helped me take VTEX Rise from a broad product goal to a production onboarding flow. It also reflects a wider lesson from backend work: the most important boundary is often the one between teams, not just the one between services.