Üzgünüz, bu uzun sürecek, ancak çoklu yeniden yazma projelerinde hem mimar hem de geliştirici olarak kişisel deneyime dayanıyor.
Aşağıdaki koşullar bir tür yeniden yazma düşünmenize neden olacaktır. Bundan sonra hangisinin yapılacağına nasıl karar verileceği hakkında konuşacağım.
- Geliştirici rampa süresi çok yüksektir. Yeni bir geliştiriciyi hızlandırmak (deneyim seviyesine göre) aşağıdan daha uzun sürerse, sistemin yeniden tasarlanması gerekir. Hızlanma süresine gelince, yeni geliştiricinin ilk taahhüdünü yapmaya hazır hale gelmesi için geçen süreyi kastediyorum (küçük bir özellikte)
- Üniversiteden yeni çıkmış - 1.5 ay
- Hala yeşil, ancak daha önce diğer projeler üzerinde çalıştım - 1 ay
- Orta seviye - 2 hafta
- Deneyimli - 1 hafta
- Kıdemli seviye - 1 gün
- Var olan mimarinin karmaşıklığı nedeniyle dağıtım otomatikleştirilemez
- Var olan kodun karmaşıklığı nedeniyle basit hata düzeltmeleri bile çok uzun sürüyor
- Yeni özellikler çok uzun sürüyor ve kod tabanının birbirine bağımlılığı nedeniyle çok pahalı (yeni özellikler izole edilemiyor ve bu nedenle mevcut özellikleri etkiliyor)
- Resmi test döngüsü, mevcut kod tabanının birbirine bağımlılığı nedeniyle çok uzun sürüyor.
- Çok az ekran üzerinde çok fazla kullanım durumu yürütüldü. Bu, kullanıcılar ve geliştiriciler için eğitim sorunlarına neden olur.
- Mevcut sistemin talep ettiği teknoloji
- Teknolojide tecrübesi olan kaliteli geliştiricileri bulmak çok zor
- Kullanımdan kaldırıldı (Daha yeni platformları / özellikleri desteklemek için yükseltilemez)
- Çok daha etkileyici bir üst düzey teknoloji mevcut.
- Eski teknolojinin altyapısını koruma maliyeti çok yüksek
Bu şeyler oldukça açıktır. Tam bir yeniden yazmaya karşı ne zaman karar verileceğine karar verilirken, artan bir yeniden oluşturma işlemi daha özneldir ve bu nedenle politik olarak daha fazla ücret uygulanır. İnanç ile söyleyebileceğim şey, kategorik olarak asla iyi bir fikrin olmadığını söylemektir.
Eğer bir sistem kademeli olarak yeniden tasarlanabilirse ve böyle bir şey için proje sponsorluğunun desteğini alıyorsanız, bunu yapmalısınız. İşte sorun, yine de. Birçok sistem artan şekilde yeniden tasarlanamaz. İşte bunu engelleyen nedenlerden bazıları (hem teknik hem de politik).
- Teknik
- Bileşenlerin bağlanması o kadar yüksektir ki, tek bir bileşene yapılan değişiklikler diğer bileşenlerden izole edilemez. Tek bir bileşenin yeniden tasarlanması, yalnızca bitişik bileşenlerde değil, tüm bileşenlerde dolaylı olarak bir değişiklik dizisine neden olur.
- Teknoloji yığını o kadar karmaşık ki, gelecekteki devlet tasarımı birden fazla altyapı değişikliği gerektiriyor. Bu, tam bir yeniden yazmada da gerekli olacaktır, ancak artan bir yeniden tasarımda gerekliyse, bu avantajı kaybedersiniz.
- Bir bileşeni yeniden tasarlamak, yine de o bileşenin yeniden yazılmasına neden olur, çünkü mevcut tasarım o kadar basittir ki, kurtarılmaya değer bir şey yoktur. Yine, bu durumda avantajı kaybedersiniz.
- siyasi
- Sponsorlar, artımlı bir yeniden tasarımın projeye uzun vadeli bir taahhüt vermesi gerektiğini anlamak için yapılamaz. Kaçınılmaz olarak, çoğu kuruluş, artımlı bir yeniden tasarımın yarattığı süregelen bütçe tahliyesi için iştahını kaybetti. Bu iştah kaybı, yeniden yazma için de kaçınılmazdır, ancak sponsorlar, kısmen yeni bir sistem ve kısmen eski bir eski sistem arasında bölünmek istemedikleri için, devam etmeye daha yatkın olacaktır.
- Sistemin kullanıcıları da “mevcut ekranlara” eklenmişlerdir. Bu durumda, sistemin hayati bir kısmını (ön uç) geliştirme lisansına sahip olmayacaksınız. Yeniden tasarım, bu sorunu aşmanıza olanak tanır, çünkü yeni bir şeyle başlıyorlar. Yine de "aynı ekranları" almakta ısrar edecekler, ancak geri itmek için biraz daha cephaneniz var.
Artımlı olarak yeniden toplam maliyetinin her zaman tam bir yeniden yazma yapmaktan her zaman daha yüksek olduğunu, ancak kuruluş üzerindeki etkisinin genellikle daha küçük olduğunu unutmayın. Bence, bir yeniden yazımı haklı çıkarabilirseniz ve süperstar geliştiricilere sahipseniz, o zaman yapın.
Ancak bunu, tamamlanıncaya kadar görecek siyasi irade olduğundan emin olabilirseniz yapın. Bu hem yönetici hem de son kullanıcı katılımcısı anlamına gelir. O olmadan başarısız olursun. Sanırım bu yüzden Joel bunun kötü bir fikir olduğunu söylüyor. Yönetici ve son kullanıcı katılımları, birçok mimarın iki kafalı tek boynuzlu atlarına benziyor. Agresif bir şekilde satmanız ve tamamlanana kadar devamlılığı için kampanya yapmanız gerekiyor. Bu zor ve bazılarının başarılı görmek istemeyeceği bir şeyle ilgili itibarınızı vurgulamaktan bahsediyorsunuz.
Başarı için bazı stratejiler:
- Ancak, mevcut kodu dönüştürmeyi denemeyin. Sistemi sıfırdan tasarlayın. Aksi halde zamanını boşa harcıyorsun. Sefil bir şekilde bitmeyen bir "dönüşüm" projesini hiç görmedim veya duymadım.
- Kullanıcıları her seferinde bir takıma yeni sisteme taşıyın. EN ÇOK acı çeken ekipleri mevcut sistemle tanımlayın ve önce onları geçirin. İyi haberi ağzından söyleyerek yaymalarına izin verin. Bu şekilde yeni sisteminiz içerden satılacak.
- Çerçevenizi istediğiniz gibi tasarlayın. Asla gerçek kod görmemiş olan bu çerçeveyi, harcadığım 6 ay boyunca inşa etmeye başlamayın.
- Teknoloji yığınınızı olabildiğince küçük tutun. Fazla tasarım yapma. Gerektiği gibi teknolojileri ekleyebilirsiniz, ancak bunları çıkarmak zordur. Ek olarak, ne kadar çok katmana sahipseniz, geliştiricilerin bir şeyler yapması o kadar fazla iş yapar. Baştan itibaren zorlaştırmayın.
- Kullanıcıları doğrudan tasarım sürecine dahil edin, ancak nasıl yapacaklarını dikte etmelerine izin vermeyin . İyi tasarım ilkelerini izlerseniz onlara daha iyi ne istediklerini verebileceğinizi göstererek güvenlerini kazanın.