Software: How to build it
A high level software design manifesto on how to effectively build production software, deploy it, and maintain it.
Introduction#
This document is a high level software design manifesto on how to effectively build production software, deploy it, and maintain it. It is a living document, and an opinionated one. It is strongly inspired by the core engineering principles of GitHub.
There are four key principles that this document will discuss:
Communication#
Effective communication is the foundation for all other pillars of software engineering. This section will go over the key principles of communication in the context of software engineering. They are adapted from How GitHub Engineering communicates.
1. Be Asynchronous First#
2. Everything should have a URL#
3. Work in the Open#
4. Write it Down#
5. Collaborate#
6. Communicate Openly, Honestly, and Authentically#
Project Architecture#
1. Scripts to Rule Them All#
Projects should follow the scripts to rule them all pattern. This ensures a consistent set of scripts for tasks like testing, building, and deploying any project1. Developers don’t need to remember the specific commands for each project as the scripts are consistent across all projects.
2. Vendor Dependencies#
Deployment#
Maintenance#
A software project that could be a library, service, or application. This term will be interchanged with “repository” often in this document. ↩︎