In today’s distributed systems, the challenge isn't technology - it's actually maintaining clear boundaries and enabling rapid innovation. Ondemandenv the platform that revolutionizes service-oriented architecture by starting with contracts first, creating focused spaces for both engineers and AI agents to work effectively.
Ondemandenv is a powerful platform that transforms how teams build and manage distributed systems. The platform enables developers to instantly create isolated environments with all infrastructure and dependencies.
What sets this apart is my contract-first approach: services define clear boundaries and interfaces upfront, which the platform uses to manage environments and dependencies automatically.
This Github Organization with multiple repos is a working example with the key capabilities like: Instant environment provisioning based on service contracts Automated dependency and configuration management Full isolation between environments for safe experimentation and testing Because each service's context and boundaries are clearly defined, both engineers and AI agents can work more effectively within the bounded contexts. I’m working on context-aware AI agents that understand service boundaries and contracts. I need partners to take over non tech parts of the business and more engineers to perfect the platform.
Ondemandenv focuses on
- minimize the unnecessary complexity by providing observability of the architecture, boundary and contracts among apps/services
- ultimate flexibility by describing boundary and contracts with strong typed code.
Distributed systems like SOA/microservice are very difficult to develop, each service can take many parts to work, services can depend on each other for various reasons, this brings up the problems:
- Maintain the consistency/certainty inbetween parts of each service is difficult.
- Missing assets/image/config
- Using wrong configuration version from
- code repo
- secret store
- configuration store
- Auth and least privilige V.S. convenience.
- Maintain the consistency/certainty inbetween services is even more difficult.
- beside configuration, service API changing
- messaging schema changing
- versioning of each service
- monitoring and alarming
- Manual configuration already reached to limit
- Can't remember what/how/why/where/when, can easily be hijacked
- who/how/why created that repo?
- what/how/where/when is the repo deployed last time?
- how other services are using/depending on the repo?
- Human mistake is inevitable and taking significant effort
- one typo can easily take hours for a complex system
- too difficult to track every change.
- Can't remember what/how/why/where/when, can easily be hijacked
- Local optimization vs big picture
- Short term gaining vs long term stratigey
- GitOps can't handle the complexity, templating yamls are the new binary in cloud era.
- Too shallow and rigid to adapt change, simple change can require huge unpractical amount of change of yamls.
- Can require multiple commits and multiple deployments across multiple repos for a single change.
- Too many repeats in yamls across many files and repos, complexity grows exponentially.
- Certain files can easily reach thousands of lines, making it not scalable/sustainable
- Authentication & Authorization for each service making things difficult.
- When using AWS CDK code as shell scripts without proper architecting & framework, it stuck ...
- Domain Driven Design to abstract/model the truth from SDLC operational tasks into a platform which:
- Managing dependencies among multiple versioned app/services and the platform, also all app/services' SDLC lifecycle.
- Code generated repeatable & REPLACEABLE & interchangeable environments.
- IMMUTABLE for tagging
- Incremental for branching
- Application architecture as actual code to describe services' relationship.
- Abstract contracting/interface/boundary of each service, define relationship among in code.
- Each service implements its contracting/interface/boundary, generate its deployment manifests/plans.
- Monitoring deployments of each environment/version of each service
- For a distributed systems like SOA/microservice, each service deploys to multiple environment/versions, so that
- developers can compare different versions of code/config by comparing different deployed actual running environments.
- developers can experiment discover and learn.
- multiple environments to run more tests in different scenarios in parallel.
- On demand environment, ultimate flexibility for developers.
- By git branching/tagging which event driving automation to create/destroy new version of code/environment.
- Monitor/alarm environments' dependency versioning
- Environment lifecycle/status sync with github workflow statuses.
- Monitoring and simulation:
- Dynamically generating DAG of dependency
- Dynamically generating deployment plans(phase/stages) based on DAG of dependency
- Configurable manual verification/approval based on IAM
- Contracts Lib where define the contracts among services and odmd central
- Odmd central is the platform creating interpreting contracts and create all contexts for app/services
- odmd-ctl resources as context for each app service
- app/services are deployed from source repo into multiple environments.
The following is a symbolic diagram to show how an app/service consuming endpoints from others, also provides endpoints for others to consume
This is a web console to visualize how each environment are created and how they contract each other by producing/consuming each other Odmd Vis GUI of contracts
When selecting node, we can see the stack id and the stack parameter and outputs, the setup are described below:
- Contracts Lib: https://github.com/ondemandenv/odmd-contracts-sandbox
- app/services repos: https://github.com/ondemandenv/
- Above basic set up is good enough to test serverless applications and it is nearly free, less than 2 US dollars a day for my debugging. 2) github app is free for 2000 mins, 3) AWS is serverless cost is by usage.
- when setting up Network for VPC across Accounts:
- Ipam will cost one US dollar plus traffic.
- NAT will cost one US dollar plus traffic.
- Transit Gateway will cost one US dollar plus traffic.
- when setting up eks cluster
- eks will have a cost as service
- eks instance will cost
- Related KMS will cost by usage
After setup of above, we define
- Define your SOA as code in Contracts Lib:
- Created Aws Accounts and Github repos
- Github App create-install-github-app.md applicationID and installation ID
- Define contracts by extending class
filling in AWS accounts, repo org/name, and Github App, example installationID: create-contracts-lib.md and builds/environments 4) Publish Contracts Lib to org's package, manually for now, and a token for reading this packageexport declare abstract class OndemandContracts<A extends AccountsCentralView, G extends GithubReposCentralView, C extends OdmdBuildOdmdContracts<A, G>> extends Construct implements OdmdContractsCentralView<A, G, C> {`
- Deploy the seeding stack into your central auto account
- ask odmd admin to create SQS( odmd-root-branch-per-central) for central-artifact stack
- create secret with name: ghAppPrivateKeySecretName, paste Github App's private key in
public static readonly ghAppPrivateKeySecretName = 'ghAppPrivateKeySecretName'
- deploy central-artifact stack provided by odmd admin
- pass to odmd admin
- s3 bucket name
- contracts lib pkg read only token
- Wait central auto initialize and deploy all app/services with email notification
https://github.com/ondemandenv as Github organization has Contracts Lib containing 3 domains of app/services:
working on SAAS for multiple domains: