Welcome
The Nonzero Sum Stack is a set of recommended technologies and engineering processes for sustainable software development. The goal of this project is to provide technologists with a menu of choices from which they can quickly and confidently select sustainable solutions for their engineering challenges.
Evaluating or endorsing every technology framework isn't practical, and neither is it possible to find solutions that work universally across all application domains. Rather, this stack is intended to inspire and enable sustainable software development in a wide variety of application domains, as this discipline continues to evolve.
Design Language
The Stack Design Language is a way for engineers to design software with a high degree of resilience and reusability. Inspired by UML, OpenAPI, and other declarative language-agnostic systems for describing software systems, Design Language is intended to be a simple and intuitive way to document software.
The real power of Design Language comes when it is paired with tools for code generation. When thoughtfully and pragmatically applied, code generation is very useful, and its power can be seen in action with communication frameworks like gRPC or Open API. Design Language opens up the entire software stack to this level of generality and reuse.
Core language elements
- Component: A computational object, which may be composed of other components.
- Interface: The "surface" of a component, by which it interacts with other components.
- Attribute: The named part of an interface designating a sub-component of the component.
- Method: A means by which a component computes. A function from some entity to some entity.
- Entity: A component with no methods, and whose attributes are all entities.
- Representation: An encoding of an entity.
Example
For example here's a partial design for the Nonzero Sum console application. With suitable code generation, this design could be rendered into an application skeleton in a number of programming languages, as well as aspects like network distribution of components and authentication.
User Console * Version String * CommandHandlers []CommandHandler CommandHandler * Description String * Interpet: Command String -> Response String Browser * GetElement: ID String -> Element
Web development recommendations
These technologies are probably a good starting point for most sustainable software development projects.
-
Programming language
- Go
- JavaScript
- HTML
- CSS
-
Runtimes/targets
- WASM
-
Security
- OAuth
- Authenticate all transactions
-
Storage
- Knowledgebase/Graph models
- No-SQL data stores (key/value, document)
-
Design patterns
- Type-safety
- Prefer immutable data (e.g. CQRS / Event sourcing)
-
Architecture patterns
- Prioritize/integrate data/analytics
- Prefer offline/asynchronous computation
- Use cloud functions responsibly
-
Services
- Google Cloud
- Firebase
Console
This experimental terminal demonstrates the use of Go compiled to WASM as a compliment to traditional client-side JavaScript. It is still under development. Over time it may be extended to provide programmatic access to the data that drives this site.