Hamsayeh Notları 1: Bir readme'den çalışan bir stack'e

Hamsayeh Notları 1: Bir readme'den çalışan bir stack'e

Hamsayeh'in ilk commit'i, 7 Şubat 2026'da Tahran saatiyle 15:20'de atılan bir readme. O öğleden sonra dokuz belge commit'i daha geldi. İlk kod 19:10'da, readme'den üç saat elli dakika sonra girdi.

Hamsayeh («همسایه», Farsçada "komşu"), İran'daki konut binaları için bir bina yönetimi ürünü: aidatlar, ödemeler, ticket'lar, yönetişim ve bunların arkasındaki muhasebe. Hâlâ geliştirme aşamasında. Docker Compose ve demo verisiyle çalışıyor, çevrimiçi ödemeler de sandbox akışı kullanıyor. Commit'lerin çoğu benim, birkaç başka katkıda bulunan kişi de daha küçük parçalar ekledi.

Vaka çalışması sayfası stack'i anlatıyor. Bu notlar işin nasıl şekillendiğini ele alıyor ve üstüne anı eklemeden, reponun kaydına dayanarak yazıldı. Bir commit ya da belge gerekçe belirtiyorsa onu veriyorum. Kayıtlı gerekçe yoksa değişikliği anlatıyor ve bunu da söylüyorum.

Belgelerden oluşan on commit

15:20 ile 18:39 arasında repoya fazlara bölünmüş bir yol haritası, ürün stratejisi, personalar, epic'ler, yürütme sınırları, aşama kapıları, her faz için backend ve frontend planları ve birleşik bir yol haritası eklendi. Yani belgeler gerçekten koddan önce geldi, dört saatten kısa bir farkla.

Strateji belgeleri rakip olarak bir binanın zaten kullandığı karışımı gösteriyor: tablo dosyası, Telegram grubu ve kâğıt defter. İlkelerden biri şöyle: "her riyalin izi sürülebilmeli". Hedef dışı maddeler gayrimenkul alım satımını kapsam dışı bırakıyor. En yüksek önceliği iki persona alıyor: üç ila beş siteyi yöneten profesyonel bir yönetici ve suçlamalara karşı kanıt, bir sonraki yöneticiye de kolay devir isteyen gönüllü bir yönetici. O devri desteklemesi gereken erişim modelini 2. bölüm ele alıyor.

Yol haritası Faz 0 ile açılıyor: en az 20 yönetici görüşmesi ve en az 100 sakin anket yanıtı içeren, dört ila altı haftalık bir araştırma fazı. Dört ila altı hafta, aynı gün içinde bir readme ile ilk kod commit'i arasına sığmaz ve repoda o fazdan hiçbir çıktı yok. Repo var olmadan önce olan her şey onun gösterebileceklerinin dışında kalıyor, bu yüzden bu notlar o ilk commit'ten başlıyor.

7 Şubat akşamı

İlk kod commit'i, onion mimarisinde .NET 10 üzerinde bir Faz 1 API'si kurdu. Görünen boyutu yanıltıcı: 856 dosya ve 35.525 satır, ama bu dosyaların 797'si bin ve obj derleme çıktısıydı. O commit'teki kaynak kod 59 dosya ve 2.073 satırdı. On üç dakika sonra gelen commit, 797 derleme dosyasının hepsini sildi ve RTL admin ve bina portallarını ekledi.

Bir API konteyneri ve bir web konteyneri içeren Docker Compose dosyası 19:51'de girdi. PostgreSQL ve Redis desteği 22:10'da geldi, SQLite seçenek olarak kaldı. 22:22'de paneller ilk yeniden tasarımını aldı. 22:36'da bir commit, dashboard panellerindeki Farsça etiketleri ve mesajları geri getirdi; bu, 5. bölümün ele aldığı metin onarımlarının ilkiydi. Gün 21 commit'le bitti.

Geçmişin biçimi

Ana dalda 7 Şubat ile 11 Ekim 2026 arasında 1.132 commit var.

Ay (2026)Commit
Şubat84
Mart1
Nisan311
Mayıs470
Haziran235
Temmuz0
Ağustos30
Eylül0
Ekim1

En yoğun gün 61 commit'le 4 Haziran'dı, çoğunda commit başına bir senaryo testi vardı; onu 50 commit'le 19 Nisan izledi. Commit sayısı işin zayıf bir ölçüsü. Üstelik bu mesajlar mayıs sonundan sonra kısalıyor ve daha az bilgi veriyor, dolayısıyla kanıt hazirandan itibaren seyreliyor. Kayıtta hiç git revert commit'i yok, yine de pek çok şey geri alındı; her seferinde bir şeyi kaldıran ya da yeniden yazan ileriye dönük bir commit'le.

Birkaç commit'te dosya saymak ikinci bir görünüm veriyor:

TarihxUnit öznitelikleriVitest dosyalarıBackend .cs dosyalarıFrontend kaynak dosyalarıMigration dosyaları
12 Şubat30188260
10 Nisan1180636863
3 Mayıs125536747676
16 Mayıs3077275189216
4 Haziran3638578591938
24 Haziran3928686096352
11 Ekim392978601.02953

xUnit sütunu [Fact] ve [Theory] öznitelik satırlarını sayıyor, bu da çalışan test durumu sayısının altında kalıyor. Backend dosyalarına migration'lar, migration dosyalarına da designer ve snapshot dosyaları dahil değil. Frontend kaynak dosyaları front-end/src altındaki tüm script dosyaları. Front end, 6. bölümün ele aldığı yeniden mimarilendirme sırasında yaklaşık üç haftada 86 dosyadan 767'ye sıçradı. xUnit sayısı, muhasebe testlerinin girdiği 16 Mayıs'ta bir günde 180 arttı. Bu sütunlar boyutu gösteriyor, kalite hakkında hiçbir şey söylemiyor.

Aylar nereye gitti

Şubatın geri kalanı mimari çalkantı ve ilk geçiş özellikleriyle geçti: aralarında bir denetim veritabanı, admin CRUD ve finans epic'leri olan 63 commit. Nisan dokuz günde 120 commit'le açıldı; yönetişim, rezervasyon, belge, ticket ve kimlik tarafındaki boşlukları kapattı. Bu dönem PostgreSQL şemaları ve iki API host'una bölünmeyle bitti.

15 Nisan'dan 8 Mayıs'a kadar iş front end etrafında yoğunlaştı: bir React Query geçişini, 360 dosya boyunca katman sınırlarını ve tek commit'te 693 dosyanın adını değiştiren TypeScript'e geçişi kapsayan 323 commit. Backend'in sırası 9 ile 16 Mayıs arasında geldi: kalıcılık katmanını şemaya göre gruplayan ve muhasebe projelerini oluşturan 81 commit. Mayısın ikinci yarısındaki 257 commit onboarding'e, portal yeniden tasarımlarına ve ilk Android projesine gitti. Haziranın 235 commit'i küçük bina işine daraldı; aralarında bir günde 48 senaryo spec'i ve gider kontrolü, açılış bakiyeleri, vade tarihleri gibi daha derin finans işleri vardı.

Ağustos, merge dışı 27 commit'lik iki günlük bir tasarım sistemi geçişi getirdi; ekimdeki tek commit ise açılış sayfası, kimlik doğrulama ve dashboard ekranlarında 44 dosyayı kapsayan görsel bir geçiş. Mesajın ilk kelimesine göre sıralandığında kayıtta feat ile başlayan 245, refactor ile başlayan 187, add ile başlayan 151 ve fix ile başlayan 83 commit var.

Yol haritasına ne oldu

Yol haritası Faz 1 ile 4 arasındaki her faz için 6 ila 12 hafta öngörüyordu. Bu etiketleri taşıyan commit'ler birkaç gün arayla girdi: finans epic'lerinin hepsi 23 Şubat'ta, Faz 3 hizmet modülleri 26 Şubat'ta, Faz 4 yönetişim ve varlıklar 27 Şubat'ta. Etiketler kodun önünden gitti. 5 Nisan'da eklenen bir eksik listesinde gecikme cezası uygulaması, ticket yorum dizileri ve SLA iş akışı eylemleri hâlâ açıktı; o gün başka bir commit de varlık ve belge mock'larını gerçek API akışlarıyla değiştirdi.

FazBaşlıkRepodaki durum
0KeşifRepoda çıktı yok
1Temel MVPUygulandı
2Finans ve kontrolUygulandı
3Hizmet ve etkileşimUygulandı
4Yönetişim ve varlıklarUygulandı
5BüyümeKısmen; abonelikler 25 Mayıs'ta kaldırıldı
5 ekOnboarding ve büyümeye hazırlıkMayısta eklendi; sihirbaz ve Excel içe aktarma sonradan tamamlandı, diğer maddeler o sırada eksik olarak listelendi
6Akıllı binaYalnızca plan
7Profesyonel yönetici ağıYalnızca plan

Uygulandı demek, kodun hâlâ geliştirme aşamasındaki bir üründe var olması demek. Belgeler ayrıca fazlar arasında aşama kapıları, her sürüm adayından önce kapsam dondurma ve faz başına KPI'lar tanımlıyor; bunların hepsi bir şirket için yazılmış gibi. Repoda KPI verisi yok ve geçmişin gösterdiği kadarıyla iş o kapıları beklemedi.

Faz 5 belgesi iki ilgili maddeyi kapsam dışı olarak listeliyordu: tam çok dilli destek ve büyüme sırasında temelden bir mimari yeniden tasarım. İkisi de yine de mayısta oldu. Başka bir katkıda bulunan kişi İngilizce ve LTR desteği ekledi, backend de modüllere ayrıldı; bunu 4. bölüm ele alıyor.

Birkaç büyük değişikliğin kayıtlı gerekçesi yok. Abonelik yönetimi 25 Mayıs'ta kaldırıldı: 74 dosya silindi, 4.195 satır çıkarıldı, tablolar düşürüldü, readme ise hâlâ ondan söz ediyor. 3 Haziran'da yeni bir backlog ve bir senaryo belgesi, tek yöneticili 8 daireli bir binaya yöneldi; oysa strateji önce daha büyük binaları hedeflemişti. Belgeler küçük binayı anlatıyor ama bu yönelimi açıklamıyor.

Mimari stil de 16 günde üç kez değişti: 8 Şubat'ta repository'li onion, 12 Şubat'ta MediatR'lı Clean Architecture ve 23 Şubat'ta bir DDD yeniden yapılandırması. Yalnızca ortadaki değişiklik mesajında bir gerekçe kaydediyor: "Split monolithic services (~2400 lines) into 50+ focused MediatR handlers".

Daha küçük geri dönüşler de aynı aylara yayılıyor. 9 Nisan'da 19 migration dosyası, yaklaşık 30.000 satır kaldıran bir commit'te tek dosyayla değiştirildi; bunu 4. bölüm ele alıyor. Tarayıcı deposunda yaşayan bir onboarding taslağı 20 Mayıs'ta sunucuya taşındı; bunu da 3. bölüm ele alıyor. 16 Haziran'da bir commit taksit planı CRUD'unu ekledi ve aynı gün "remove installment plan" başlıklı başka bir commit geldi, ama özellik klasörü hâlâ orada. Bu son değişikliğin de kayıtlı gerekçesi yok.

Çözümün bugünkü hali

Backend'de 11 proje var:

back-end/src
  Hamsayeh.Api.Admin
  Hamsayeh.Api.User
  Hamsayeh.Api.Shared
  Hamsayeh.Domain
  Hamsayeh.Application
  Hamsayeh.Infrastructure
  Hamsayeh.Accounting.Domain
  Hamsayeh.Accounting.Application
  Hamsayeh.Accounting.Infrastructure
back-end/tests
  Hamsayeh.Application.Tests
  Hamsayeh.Api.Tests

10 Nisan'a kadar tek bir API projesi vardı, sonra paylaşılan altyapıya sahip iki host oldu. On ikinci proje Hamsayeh.Accounting.Contracts 16 Mayıs'ta oluşturuldu ve kullanılmadığı için 21 Mayıs'ta silindi. Migration'lar dışındaki 860 .cs dosyasının 494'ü Hamsayeh.Application içinde. Infrastructure'da 111, Domain'de 92, iki API host'unda toplam 46, üç muhasebe projesinde 105 dosya var.

Bu yerleşim, muhasebeyi olduğundan daha ayrı gösteriyor. Domain ve kalıcılık katmanlarının kendi projeleri var, ama muhasebe komut ve handler'larının çoğu hâlâ Hamsayeh.Application/Features altında: Charges 28, PenaltyRules 18, Funds 15, InstallmentPlans 14, Payments 13 dosya içeriyor. Hamsayeh.Accounting.Application soyutlamaları ve defter kayıtlarını tutuyor. Kodun gösterdiği kadarıyla sınır domain ve kalıcılık için sağlam, kullanım senaryoları için daha gevşek.

2. bölüm bu geçmişten erken bir varsayımı, bir kişinin tek bir rolü olduğu varsayımını alıyor ve onu değiştirmenin neye mal olduğunu izliyor.

Bu not İngilizce ve Farsça olarak da yayımlandı: İngilizce · Farsça.

Tüm notlara dön