# Open software design
Open-source software has made it easier for software developers to study and learn programming by looking at real-world working software. But what about software design? Building architects (not software) study thousands of buildings in their training and career. Software developers, in contrast, only study a handful of other large software designs. This means we repeat mistakes that we would have been able to avoid, should we be able to learn from others.
Many architectural patterns are publicly available, but these are normally captured as finished products. Software design is a continuous process and we need to allow software developers to study how software evolves. When the public is the main audience of the materials, they risk not reflecting the real-world anymore too (Spotify doesn't use "the Spotify Model").
We do share technology stacks as an industry, but because technologies shifts all the time they will not capture the essence of software design. Sharing technology stacks also encourage Resume driven development.
Open software design is the idea that software design must be available for public use. It's the idea that we should Work with the garage door up. The main audience of the design is developers who built the software, and not external people. The contents are living artefacts, they naturally evolve as the software evolve. In the world where the majority of large real-world programs are closed-source, opening up our software design documentation is the least we can do to contribute back to the community.
While architects study thousands of buildings in their training and during their careers, most software developers only ever get to know a handful of large programs well. And more often than not, those are programs they wrote themselves. They never get to see the great programs of history, or read critiques of those programs' designs written by experienced practitioners. As a result, they repeat one another's mistakes rather than building on one another's successes.