ilk basta mimari önemli. gelistirirken "object oriented programming" zorunluluklarina göre programlaman gerekli. "Inheritance" ve "abstraction" cok onemli. her yazdigin kod ayni hiyerarside olursa icinden cikilmaz olur. mesela arabaCalistir() fonksiyonu yazarken depodanBenzinAl() , benziniEnjeksiyonaGötür() gibi detayli fonksiyonlari gizlemelisin. senin yapman gereken sadece kontagiCevir() fonksiyonu olmali, gerisini yakitIslemleri() fonksiyonu yapmali. Yani mümkün oldugu kadar dikey bir yapi kurmalisin mimari olarak. Bol bol class kullan, methodlarin minumum parametre alsin, her method sadece bir is yapsin, bol bol method ve class kullan. eger bir method icinde bircok "if/else" var ise cok iyi yolda degilsin demektir. her "if/else" methoda ekstra bir sorumluluk yükler, ideal olani her methodun sadece 1 isten sorumlu olmasidir. mümkün oldugunca bunu saglamaya calis.
Ikincisi ise "Test driven development", gelistirme sirasinda hem testlerini yazmis olursun, hem de kodun daha kaliteli olur. Bunu özellike tavsiye ediyorum.
Ücüncüsü ise bol bol "comment" eklemek olsun koduna. Ayrica bu kommentleri otomatik dökümantasyona ceviren araclar kullanabilirsin (java icin javadoc gibi)
git, svn gibi versiyonlama sistemi kullaniyorsundur eminim.
"Naming convention" lara uy mutlaka
en.wikipedia.org(programming)
Elinin altinda UML diagramlarin olsun, özellikle "Class Diagram"