-- Yazılım

Yazılım Geliştirme Manifestosu

Her yazılım ekibinin dikkate alması gerektiği örnek bir manifesto. 
Takımlar için Örnek Yazılım Geliştirme Manifestosu

Yetenekli, motive ve yenilikçi yazılım geliştirme profesyonelleri olarak bizler, sorunsuz çalışan, iyi tasarlanmış, yüksek kaliteli yazılımlar geliştirmeyi amaçladık. Bu amaca ulaşmak için en iyi teknik ve teknolojileri kullanırız ve aşağıdaki değerlere odaklanırız. Bizler…

İyi tasarlanmış, okunaklı, anlaşılabilir, temiz, iyi test edilmiş ve daima değişikliklere ayak uydurabilecek yazılımlar geliştiren…
Anlaşılır, kapsamlı ve detaylı ama yeterli analiz ve belgeleme yapan…
Sürekli öğrenen, yeteneklerini geliştiren, en iyi pratikleri uygulayan, bilgisini başkaları ile paylaşmaktan zevk alan ve proaktif olarak gözlemleyen ve sorunları çözen çalışanlarız.
Biliyoruz, bu değerlere sahip olmak hiç de kolay değil. Ama aşağıda belirtilen prensipleri takip ederek bunu başabileceğimize inanıyoruz.

  • Kodun sahibi bireyler değil, takımlardır. [Collective Ownership]
  • Kodlama ve analiz için takım standartlarını kullanırız. [Team Stardards]
  • İşler, hikayeler, iterasyonlar ve sürümler için “Bittinin Tanımı”nı belirleriz ve süreçlerimizde buna uyarız. [Definition of Done]
  • Başkası tarafından incelenmemiş (code review) ya da eşli programlama (pair programming) ile geliştirilmemiş kodu canlıya çıkmayız. [Release Procedure]
  • Takıma yeni katılan her yazılımcı, daha hızlı adapte olabilmek için ilk işlerini eşli olarak programlar. [Pair Programming]
  • Sadece olası hataları bulmak için değil, yazılım ve geliştirme hakkında bilgi sahibi olmak için de kodları inceleriz. [Code Review]
  • Hataları çözmeden önce mutlaka otomatik testlerle yeniden yaratırız. Testler ile yeniden yaratmadan hatayı çözmeyiz. [Bug Fix Procedure]
  • Test/kod kapsamını daima gözlem altında tutarız ve düzenli olarak artmasını amaçlarız. [Test Coverage]
  • Yazılım geliştirme, kullandığımız işletim sistemi, IDE ve araçtan bağımsızdır. Bir yazılım geliştirici istediği araçlarla geliştirme yapabilir. [Tool-Free Development]
  • Programlarken tavsiye edilen pratikleri uygularız. [Programming Best Practices]
  • Yazılımları unit, integration, functional, performance, regression, acceptance gibi birçok açıdan test ederiz. [Multi Dimension Testing]
  • Testleriniz kodunuzdur. Unit testleriniz bitmeden kodunuz tamamlanmış sayılmaz. [Unit Testing]
  • Kodu ve geliştirdiğimiz özellikleri TDD ve BDD ile tasarlar, geliştirir ve doğrularız. Testlerin ancak test edilebilir kod için yazılabildiğini biliriz. [TDD / BDD]
  • Temiz kod prensiplerini takip ederiz. Okunaklı test kodu ve kaynak kodu geliştirmeye odaklanırız. [Clean Code Principles]
  • Kullandığımız editör/IDE’yi, komut satırını, build araçlarını, kod analiz araçlarını, Git ve Vagrant’ı ileri düzeyde bilir ve kullanırız. [Tools in Craftsmanship]
  • Sürüm çıkmak ve geliştirmek konularında önerilen standartlara uyarız. [Release & Version Management]
  • Kod analiz araçları ile kodumuzu izler ve kalite metriklerini takip ederiz. [Code Analysis]
  • Düzenli olarak teknoloji havuzumuzda olmayan teknolojilerde de geliştirme yaparak vizyonumuzu genişletiriz. [Technological Agnosticism]
  • Sistemlerimizi tasarlarken tek-hata-noktası durumu yaratmaktan kaçınırız. [Avoid Single Point of Failures]
  • Testleri olabildiğince otomatikleştiririz (ve daha çok otomatikleştirmek için yollar ararız). [Automatization]
  • “Sürekli entegrasyon” ile yazılım kalitesini sürekli takip ederiz. Build’leri yeşil tutarız. Bir build başarısız olursa işimizi bırakır build’i fix ederiz. [Evergreen Builds]
  • Geliştirme, açılma (boot-up), paketleme, test etme ve hata düzeltme sürelerini kısaltırız. [Being Fast]
  • Coderetreat’ler ve kod kataları ile kodlama yeteneklerimizi geliştirmek için egzersiz yaparız. [Practice to Improve]
  • Herhangi bir teknoloji konusunda saplantılı olmayız. İhtiyaçlarımıza uyan teknolojiyi kullanırız. [Openmindness]
  • Teknik borcu olabildiği kadar erken öderiz. Varolan teknik borçları gelecekte ödemek üzere ayrı bir backlog üzerinde kaydederiz. [Technical Debt]
  • Yeniden kullanılabilir komponentler yazar, uygulamanın özelliklerini mümkün olduğunca as-a-servis olarak açarız. [Reusability & Extensibility]
  • Müşteriye daha hızlı cevap verebilmek ve riski asgaride tutabilmek için kısa ve sık sürüm çıkarız. [Short Releases]
  • Aynı anda üzerinde çalışılan iş sayısını sınırlarız. İşleri bireysel değil takımca ve önem sırasına göre bitiririz. [Limit Work-in-Progress]
  • Uygulamamızın mimarisini bulut uyumlu olacak şekilde tasarlarız. [Cloud Compatibility]
  • Yeni özellikler geliştirmek, sorunları çözmek ve kodda denemeler yapabilmek için versiyon kontrol sisteminde yeni dallar yaratır ve kullanırız. Takımca belirlenen akış modellerine uygun kod geliştiririz. [Flow Models]
  • Müşteriye sık sık demo yapar, geliştirme sırasında kendisinden geribildirim alırız. [Customer Involvement]
  • Yeteri kadar ve iyi hazırlanmış belgeler yaratırız. Diyagramları ve tabloları paragraflarca yazıya tercih ederiz. [Agile Documentation]
  • Yarattığımız belgeleri güncel tutarız. Güncellenemeyecek kadar eski belgeleri siler ya da arşivleriz. [Efficient Documentation]
  • Yaratılan belgeleri inceler ve daha iyi olabilmesi için yazarına geribildirim veririz. [Document Review]
  • Eski kod ve tasarımları sürekli yenileriz. Takım olarak sürekli teknik iyileştirme önerileri sunarız. [Refactoring]
  • Takım olarak her sabah toplanır, günü planlarız. [Daily Standup Meetings]
  • Düzenli olarak toplanır geçmişi değerlendiririz. Geçmişte yapılan hataları tekrarlamamak için aksiyon alırız. [Retrospective]
  • Düzenli olarak toplanır teknik sorunları tartışırız. Farklı sistemlerin ortak sorunlarına kalıcı ortak çözümler araştırırız. [Common Solutions]
  • Hergün kalan işleri belirler ve durum kötü olsa bile bunu herkesin görebileceği bir yerde gösteririz. [Transparency]
  • Bilgimizi eğitimlerle, bizzat çalışarak ve başkaları ile paylaşarak arttırırız. [Knowledge Sharing]
  • Eğer sizi yavaşlatan bir sorun varsa, 1 günden fazla beklemeyiz. Mutlaka yardım talep ederiz. [Collaboration]
  • Hatalar ve olası sorunlar nedeniyle kimseyi suçlamayız. [No Blame Rule]
  • Geliştirme sırasında iş akışını beyaz tahta üzerinde görselleştiririz. [Visualization on Whiteboard]
  • Bireysel performanstan ziyade takım performansına önem veririz. Daima yardımlaşır ve bilgi paylaşırız. [Performance Appraisals]
  • Takımca tasarlar, takımca geliştirir ve aldığımız kararların sorumluluğunu takımca alırız. [Shared Responsibility]

Lemi Orhan Ergin
Agile Software Craftsman

Yorumla

Yorum

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.