Cartman principles for software development
At Cartman we believe that:
Customers' needs and interests should guide the technical decisions, not the other way around.
Small team with sharp tools wins over a large team with average tools.
Software should be built to last time and evolve with changing business needs.
Simplicity is a virtue: simple systems are easier to change, debug and operate. Simple is not to be confused with easy though. It takes effort to design things simple.
Libraries over frameworks: composing systems from independent libraries often leads to better results than using a specific framework that forces specific style of implementing things and limits possibilities.
Code is a liability. More code and third party dependencies there is, more maintenance effort is required.
Data over code: a system that can be specified using declarative data models and rules is simpler than a system based on code only.
Interactions and collaboration over processes and tools. While specific tools or processes can be useful, more value is created from having interactions within the team and with clients and end users.
Full disclosure mentality: being open about hard issues and ready to tackle problems reduces time wasted
Consideration of operating costs, physical resources, impact on environment and energy consumption is important when selecting tools and technologies.
Functional programming paradigm is often superior to imperative or object oriented programming.
Immutable data structures and use of pure functions should be preferred over mutable data structures and impure functions whenever possible.
With long and mutual experience in the industry we know these principles lead to good outcomes. The principles aren't strict rules, but rather guidelines we apply on a given context.