Files
plba/requirements/vision.md

3.5 KiB

Vision

Purpose

This project provides a reusable runtime platform for business applications.

The runtime exists to solve service and infrastructure concerns that are needed by many applications but do not belong to business logic:

  • start and stop
  • status and lifecycle
  • configuration
  • worker execution
  • trace propagation
  • health checks
  • control and administration
  • later authentication and user management

The runtime should allow a business application to focus only on domain behavior.

Vision statement

We build a platform where business applications are assembled from small domain modules, while the runtime consistently provides lifecycle, workers, tracing, configuration, and control-plane capabilities.

Problem

In the previous generation, the execution model was centered around a single execute() entry point called by a timer loop.

That model works for simple periodic jobs, but it becomes too narrow when we need:

  • queue-driven processing
  • multiple concurrent workers
  • independent task sources
  • richer health semantics
  • trace propagation across producer and consumer boundaries
  • reusable runtime patterns across different applications
  • future admin and authentication capabilities

The old model couples orchestration and execution too tightly.

Desired future state

The new runtime should provide:

  • a reusable lifecycle and orchestration core
  • a clean contract for business applications
  • support for sources, queues, workers, and handlers
  • explicit separation between platform and domain
  • trace and health as first-class platform services
  • the ability to evolve into an admin platform

Design principles

1. Platform vs domain separation

The runtime owns platform concerns. Applications own domain concerns.

The runtime must not contain business rules such as:

  • email parsing policies
  • order creation logic
  • invoice decisions
  • client-specific rules

2. Composition over inheritance

Applications should be composed by registering modules and services in the runtime, not by inheriting a timer-driven class and overriding one method.

3. Explicit task model

Applications should model processing as:

  • task source
  • task queue
  • worker
  • handler

This is more scalable than one monolithic execute loop.

4. Parallelism as a first-class concern

The runtime should supervise worker pools and concurrency safely instead of leaving this to ad hoc application code.

5. Observability by default

Trace, logs, metrics, and health should be available as platform services from the start.

6. Evolvability

The runtime should be able to support:

  • different queue backends
  • different task sources
  • different control planes
  • different admin capabilities without forcing business applications to change their domain code.

First target use case

The first business application is mail_order_bot.

Its business domain is:

  • fetching incoming mail
  • processing attachments
  • executing order-related pipelines

Its platform/runtime needs are:

  • lifecycle management
  • polling or IMAP IDLE source
  • queueing
  • worker pools
  • tracing
  • health checks
  • future admin API

This makes it a good pilot for the new runtime.

Success criteria

We consider the runtime direction successful if:

  • mail_order_bot business logic can run on top of it without leaking infrastructure details into domain code
  • the runtime can manage concurrent workers
  • the runtime can support a queue-based flow
  • the runtime can expose status and health
  • the runtime can later host admin/auth features without redesigning the core