Zero2Value

Have you ever noticed that software tools and applications seem to be always getting worse? Where even basic stuff that was easy and straightforward in the past is now difficult and complicated, requiring multiple steps and additional tooling just to get to “Hello World”? Have you ever stopped and wondered why can't things just work?

We've come to the conclusion that time-to-value[1] is the parameter that has become commonly overlooked in modern software. Zero2Value was created as a platform to share a set of design principles to help developers build software that delivers value quickly. We'd like to invite you to rethink software design by sharing our design principles, contributing your ideas and making “Hello World” simple again.

Core Principles

To deliver software that minimizes time-to-value, we propose four principles to guide their design and development.

1. Avoid Forcing Complexity Onto Users

The most fundamental principle for reducing time-to-value is to minimize how much complexity is perceived by the user. Too often, developers force complexity downstream onto users by prioritizing “generic” functionality or avoiding the effort of building fully complete solutions. A good exercise here is to approach application design from the perspective of end users, thinking about what's the ideal way in which they would like to use the software, regardless of the internal implementation.

Antipattern: Layered Tool Dependencies

Kubernetes is supposed to simplify container orchestration through declarative YAML configurations, but these files often become complex and cumbersome for users managing intricate applications. To address this, Helm was introduced as a package manager to bundle configurations into reusable charts. While Helm generates Kubernetes-compatible manifests, it requires users to run separate commands which operate outside Kubernetes' native kubectl workflow. This reliance on an external tool forces users to learn and manage additional processes, fragmenting the promised unified experience and increasing setup complexity.

2. Simplify Bootstrapping for Common Use Cases

Another key point is to design applications so that common use cases are bootstrapped quickly. It applies not only to toy examples, but also to implementations that deliver tangible value to end users. This requires the developer to deeply understand how their users derive value from the software, which might not always be as originally intended.

Antipattern: Overly Granular Setup for Basics

Common use cases for Kubernetes, such as deploying a simple web application, require users to manually define pods, services, and ingress resources at a minimum, as well as configuring nodes and a control plane that is tightly coupled to OS internals, which is prone to errors and repeatability issues.

3. Choose Sensible Defaults

Building on top of the previous principles is the practice of choosing sensible defaults to reduce the amount of configuration necessary for users to get their applications into a functional state. This also helps lower the learning curve, as users are required to reason about fewer options while they are operating the software for the first time.

4. Maintain Stable APIs

Finally, maintaining stable and simple APIs ensures that users can rely on consistent interfaces over time, preventing additional overhead whenever dependencies need to be updated. Changes to APIs should be thoroughly reasoned about and purposefully designed to avoid breaking existing applications. Well-designed APIs that don't push complexity to end users will also tend to be a lot more stable, for this same reason.

Antipattern: Frequent Breaking Changes

In the JS world, letting dependencies lapse will often lead to incompatibilities requiring code rewrites whenever a project is updated due to API shifts like method renames or removed features. This instability means maintenance eats into development time, as users can't reliably update without regressions.

Get Involved

If you're interested in getting involved, join us in making 'Hello World' simple again! Here's how you can get started:

Pledge Your Support

Commit to applying Zero2Value principles in your projects by displaying the Zero2Value badge on your project's website or repository.

How to Add the Badge

1. Generate Your Badge

Use our API to generate a custom badge for your project:

GET
/api/badge?project=YourProject&theme=light

2. Available Parameters

project
Your project name (required)
theme
“light” or “dark” (optional)

3. Embed in Your Project

Add this HTML to your README.md or website:

# Markdown
![Zero2Value](https://zero2value.org/api/badge?project=YourProject)
<!-- HTML -->
<img src="https://zero2value.org/api/badge?project=YourProject" alt="Zero2Value pledged"/>

Spread the Word

Share your commitment to Zero2Value on social media. Encourage others to join and contribute to creating software that prioritizes user value and simplicity.

Share Now

Get In Touch