In modern software development, we've mastered building sleek UIs and robust backends. Yet, a critical component often remains a tangled mess: business logic. Complex operational workflows—like onboarding a new customer, processing a multi-step financial transaction, or generating a custom report—are frequently scattered across different systems, trapped in manual processes, or hardcoded into monolithic applications. This creates technical debt, slows down innovation, and makes scaling a nightmare.
What if you could treat your business operations with the same rigor and elegance as your core software?
That's the mission of service.do. We believe your business logic shouldn't be a liability; it should be your most powerful asset. With our Agentic Workflow Platform, you can define any business capability as a robust, versioned service and deploy it as a simple API. This is the future of operations: Services-as-Software.
At its core, service.do is built on a simple yet powerful idea: Business-as-Code. It’s the practice of encapsulating a specific business function into a self-contained, deployable software component.
Think about a common workflow: Customer Onboarding. This process might involve:
Traditionally, orchestrating this would involve a complex dance of API calls, message queues, and custom glue code. It's brittle and hard to change.
With service.do, you define this entire workflow in a single, clear file.
You don't need to learn a proprietary language or a complex visual builder. If you know TypeScript, you're ready to build on service.do. Our SDK provides a clean, declarative way to define your service's inputs, outputs, and logic.
Here’s what that customer onboarding service looks like in code:
import { Service, type Context } from '@do/sdk';
// Define the input and output schemas for your service
interface OnboardingInput {
name: string;
email: string;
plan: 'free' | 'pro' | 'enterprise';
}
interface OnboardingOutput {
customerId: string;
welcomeEmailSent: boolean;
status: 'complete' | 'failed';
}
// Create a new Service instance with your business logic
export default new Service<OnboardingInput, OnboardingOutput>({
name: 'customer-onboarding',
description: 'Onboards a new customer, creating an account and sending a welcome email.',
async run(input: OnboardingInput, context: Context): Promise<OnboardingOutput> {
console.log(`Starting onboarding for ${input.email} on plan ${input.plan}`);
// Business logic goes here.
// e.g., call user.create, email.send, billing.setup agents
const customerId = `cust_${context.invocationId}`;
return {
customerId,
welcomeEmailSent: true,
status: 'complete',
};
},
});
Let's break this down:
You might be thinking, "This sounds like a microservice." While there are similarities, a .do Service is purpose-built for a different, higher-level task: orchestration.
This is where the concept of an Agentic Workflow comes in. A .do Service acts as a master agent, delegating tasks to other specialized agents or services. In the code example, the comments // e.g., call user.create, email.send, billing.setup hint at this. Your onboarding service doesn't need to know how to create a user; it just needs to invoke the user.create agent and trust it to do its job.
This approach offers significant advantages over traditional microservice architectures:
The title calls service.do "Serverless-on-Steroids," and for good reason. We provide a fully serverless platform, meaning you never have to think about infrastructure.
You get to focus entirely on delivering business value, not on managing servers.
The possibilities are limited only by the processes you can imagine. Any workflow that you can describe as a series of steps is a perfect candidate for a .do service. We've seen our customers build:
If your business runs on processes, service.do can turn them into scalable, on-demand software.
Ready to stop wrestling with business logic and start treating your operations like the valuable software they are?
Explore service.do today and start defining, deploying, and delivering your business as code.