Simple solutions and declarative programming
Simplicity matters. When designing systems, complexity should be reduced to the absolute minimum. There are essentially no tools to manage growing complexity, software systems tend to grow orders of magnitude more complex than a single human can understand, and simplifying an existing complex system takes huge amounts of focused effort.
The best way to reduce complexity is to start small and iterate quickly, composing systems from small building blocks that do one thing and do it well. This involves making intentions as explicit as possible at every stage. The approach we favour is declarative programming, focused on outcomes. We describe the goal state and let our tools work out the way to achieve it. When evaluating tools, the ability to declare intent simply and explicitly is the main design feature we look for.