# Technical Design Introduction

Despite being an early-stage startup, we consider technical design to be an important activity to be done in Upmo. This may sound counterintuitive, as some folks would believe that no-design is the fastest way to build software in the startup world. In the context of what we're building, however, we believe that technical design would make us move at a faster rate of change. This is the main reason why we do technical design.

We should not take this as a means to spend all of our energy in big design upfront. Our primary measure of progress is working software, therefore we should design what's needed to be designed only when it's needed. What's needed to be designed would typically translate to something hard to change. This site at the moment should show you the pattern of what we have defined as hard to change, and we will continue talking about what that means on a day to day basis.

The purpose of this technical design section is here to help us think and understand our architecture and more. As a small team, sometimes we have to work on various parts of the product despite our best effort to split them well. It is very hard to keep all of this knowledge in our head. Most of the artefacts that you'll find here are the result of thinking. When you're trying to make a high-level change to the architecture, for example, you can think about it by moving the shapes around. When you're making a change to our codebase, you will need to understand how the small change you make is related to the whole system.