Tarkvaraprojekti esijalgne kavandamine
keerukas. Eraldi peaks olema kirjeldatud iga alamsüsteemi funktsioonid ja esialgne
mooduliteks jaotus ja milline infovahetus on erinevate alamsüsteemide vahel lubatud (hea
arhitektuuri korral toimub kommunikatsioon võimalikult väikese arvu alamsüsteemide vahel,
isegi kui selleks on vaja mõnes alamsüsteemis lisakoodi luua). Suuremamahuliste projektide
kirjeldamiseks peaks kasutama UML-i (Unified Modeling Language). Juba arhitektuuri etapil
peaks püüdma määratleda need tarkvaraosad, kus kõige tõenäolisemalt võib edaspidi osutuda
vajalikuks muudatuste sisseviimine (põhjustatuna näiteks muudatustest arendatava tarkvaraga
seotud tarkvaras), aga samuti tarkvarakomponendid, mis ostetakse/tellitakse väljastpoolt, mis
võetakse kasutusele varemarendatud tarkvarast ja mis arendatakse uuena. Viimati nimetatud
komponentide oskusliku kombineerimise tulemusena võib tarkvara arendamise aega ja selleks
kuluvaid ressursse oluliselt vähendada.