Image by Jason Leem

Our guiding principles

Jan 12, 2022

We believe that good software is built by companies and teams where incentives are aligned to produce value.

We strive for this at Corso with 3 guiding principles:

Real value must be delivered as early in the product development process as possible

The purpose of a product is to provide value to the people using it; products and features are worthless until they are put in the hands of actual users.

Teams must work together from the onset to understand and outline the anticipated value of products and features.  Prototypes, proofs-of-concept, and minimum viable products should be used to confirm the anticipated value as early as possible - with follow-on iteration until the optimal value is achieved.

An iterative approach avoids lengthy cycles and major time investments before value can be confirmed. We believe that building a final product solely from an initial pitch deck or photoshop mockup will rarely deliver value; instead, prototypes and proofs-of-concept placed in front of stakeholders can guide an understanding of where further investment is merited at each step along the way.

Ownership and authority must be shared between those closest to the problems, and those who deliver the solutions

The development of successful software is complex and depends on lots of variables, many of them unknown at the start of a project. To provide the best chance of success, those who expect to receive value from the development of software products and features must have shared ownership and responsibility for the final outcome, and be involved throughout the planning and development processes.

Product development teams must have a desire to understand real-world problems, work toward impactful solutions, and well-informed risks on innovation. Stakeholders and leaders must understand the development process well enough to collaborate in a way that is helpful, and then trust the teams to deliver value.

Failure will occasionally happen; leadership attitudes must acknowledge the possibility both before and after it happens. Each failure holds an opportunity for growth and improvement, but it can only be gained with the right balance between discovering root causes in blameless fashion, and accepting responsibility when needed.

Continuous collaboration is required to deliver quality and value in a timely fashion

Useful software products deliver quality and value in a timely manner. Various people across an organization can have a natural, vested interest in prioritizing one over the other, so meaningful collaboration is essential to achieve the best possible balance and outcome.

Value and quality mean different things to different people and under different circumstances, but end-user perception is often the best lens for identifying those standards. Teams should seek ongoing feedback from users to stay anchored to real world pains, problems, and value. Together, teams and stakeholders must continuously strive for excellence in the software being developed rather than settling for mediocrity.

Valuable software adapts to evolving needs, and is built with flexibility as a core principle of its design and architecture. Simple solutions are superior to complex ones, despite simplicity often being harder to achieve.