Podstawą każdego systemu oprogramowania jest jego architektura, czyli sposób, w jaki oprogramowanie jest tworzone z niezależnie rozwijanych komponentów oraz mechanizmy interakcji i wzajemne zależności pomiędzy nimi. Jeśli system ma być tworzony przez więcej niż jedną osobę, właśnie architektura pozwala im na wzajemną komunikację. Choć architektura jest postrzegana jako jeden z najważniejszych aspektów rozwoju współczesnych systemów, to jej ewaluacja niemal nigdy nie staje się standardową częścią procesu rozwojowego.