- Bir ajanın yazdığı 17.155 satırlık Rust veri erişim katmanını aşamalı olarak refactor edince, aynı özellik değişikliği için gereken giriş token’ları 159.564’ten 27.360’a düşerek %83 azaldı
- Toplam kod miktarı neredeyse aynı kalsa da ilgili kod yüksek uyumluluğa sahip dosyalara ayrılınca, ajan değişiklik için gereken minimum dosya kümesini okuyabilir hâle geldi
- Giriş token’ları, en büyük dosya yeterince küçülene kadar belirgin biçimde azalmadı; sonunda veri katmanı 19 Rust dosyasına bölündü ve en büyük dosya boyutu 17.155 satırdan 3.695 satıra indirildi
- Çıkış token’ları ve özellik uygulama miktarı neredeyse değişmedi; Claude da uygun refactoring’i kendi başına seçemedi veya güvenilir şekilde uygulayamadı, bu yüzden planlama ve yürütmede insanın aktif yönlendirmesi gerekti
- Sonnet 5’in $3/MTok giriş fiyatına göre değişiklik başına tasarruf yalnızca yaklaşık $0,397 olsa da, bundan sonra veri erişim katmanı her değiştirildiğinde maliyetin tekrar tekrar düşme olasılığı görüldü
Ajanın oluşturduğu 17.155 satırlık dosya
- İş destek uygulaması; dinamik güncellenip sorgulanabilen bir web arayüzüne, modal pencerelere ve otomatik kayda, harici sistem entegrasyonlarına, makine öğrenimi ve metin analizine, arka plan işlerine ve otomatik dağıtım ortamına sahipti
- Toplam yaklaşık 150 bin satırın yaklaşık 120 bin satırı Rust, kalanı TypeScript ve Terraform’du; çoğu Claude Code ve kısmen Cursor kullanılarak ajan tarafından yazıldı
- Geliştirici, ara sıra meraktan bakması dışında kodu okumadı veya incelemedi
- Veri erişim katmanı, tüm okuma-yazma sorgularında aynı HTTP istek ayarlarını ve JSON kodlama-kod çözmeyi tekrarlayarak 6.000 satırın üzerine çıktı ve sonunda tek bir Rust dosyası 17.155 satıra ulaştı
- Bu modülde tekrarların giderilmesi ve iç dil yoktu; fonksiyon çıkarma sınırlıydı, sınıf çıkarma da neredeyse hiç yoktu. Ancak korunacak arayüzler ve net sınırlar bulunduğu için refactoring deneyi için uygundu
Aynı değişikliği tekrarlayan ölçüm yöntemi
- Amaç, mevcut refactoring’e token yatırımı yaparak gelecekteki özellik değişikliklerinin token tüketimini azaltmanın mümkün olup olmadığını görmekti
- Ajan önceki işlerden öğrenmediği için, her aşamada yeni bir alt ajandan tam olarak aynı değişiklik istendi; böylece öğrenme etkisinin karışması önlendi
- Deney şu sırayla yürütüldü
- Katı refactoring ilkelerine göre genel plan yazıldı
- Tek bir prompt ile temsili değişiklik tanımlandı
- Alt ajanın değişikliği yapıp token tüketimini raporlaması sağlanarak başlangıç değeri ölçüldü
- Değişiklik sonucu atıldıktan sonra bir refactoring adımı uygulandı
- Aynı değişikliği yeniden yaptırıp sonucu atma süreci tekrarlandı
- Aşama bazında token maliyeti, çalışma süresi ve kod satır sayısı kaydedildi
- Claude gerçek zamanlı token sayısını güvenilir biçimde veremediği için gönderilen-alınan karakter sayısını raporlaması istendi; tiktoken ile karakter sayısı 4’e bölünerek token yaklaşıklandı
Aşamalara göre ölçüm sonuçları
- Başlangıç durumunda veri erişim katmanı ve en büyük dosya ikisi de 17.155 satırdı; toplam Rust kodu 50.359 satırdı ve temsili değişiklik için 159.564 giriş token’ı, 1.705 çıkış token’ı ve 342 saniye gerekiyordu
-
- aşama sonrasında veri erişim katmanı 16.608 satır, en büyük dosya 3.695 satır, toplam Rust kodu 49.812 satırdı; giriş 27.360 token, çıkış 2.113 token, çalışma süresi 454 saniyeydi
- Ara aşamalarda en büyük dosya küçüldükçe giriş token’ları da birlikte azaldı
-
- aşamada
queries.rsçıkarıldıktan sonra en büyük dosya 15.670 satıra, giriş 151.850 token’a düştü
- aşamada
-
- aşamada
traits.rsçıkarıldıktan sonra en büyük dosya 13.845 satır, giriş 132.558 token oldu
- aşamada
-
- aşamada
store/ayrıldıktan sonra en büyük dosya 9.269 satıra, giriş 104.080 token’a kadar indi
- aşamada
- Son
store/ayrımından sonra en büyük dosya 3.695 satıra, giriş 27.360 token’a sert biçimde düştü
-
- Nihai veri erişim katmanı 19 Rust dosyasından oluştu ve en büyük dosya test kütüphanesi oldu
- Ek refactoring’lerde aynı yöntem ilgili test dosyasına da uygulanabilir
Giriş token’larının %83 azalmasının nedeni
- Aynı işin giriş token’ları 159.564’ten 27.360’a düştü ve 132.204 token tasarrufu sağlandı
- Veri erişim katmanının toplam kod miktarı neredeyse değişmediği için sonuç, okunacak kodun azalmasından kaynaklanmıyordu
- Ajan, iş için gereken minimum dosya kümesini belirleyerek giderek daha küçük kod alanlarını okudu; bu durum Claude Code’un düşünme çıktısında ve dosya okuma özetlerinde de görülebiliyordu
- Dosyaları rastgele küçültmek, ilgili kodu bulmak için birden çok dosya okumayı gerektireceğinden aynı etkiyi elde etmek zor olur
- En büyük azalma son ayrımda gerçekleşti; ancak önceki aşamalarda tekrarların çıkarılması ve yinelenen çekirdek yapının oluşturulması, dosya ayrımını mümkün kıldı
- Bu sıra, maliyet düşürmeyi hedefleyerek önceden tasarlanmış değildi; önce yerel tekrarları ortadan kaldırıp ortak çekirdek ortaya çıktıktan sonra daha küçük dosyalara ayıran tipik bir refactoring sürecinden doğdu
Çıkış token’ları ve parasal etki
- Temsili değişiklik yazılırken üretilen çıkış token’ları neredeyse değişmedi, dolayısıyla refactoring gerçek değişiklik boyutunu azaltmadı
- Çıkış token fiyatı giriş token’larının 5 katıydı, ancak mutlak miktarı çok daha düşüktü
- Sonnet 5 giriş fiyatı $3/MTok olarak hesaplandığında, değişiklik başına tasarruf yaklaşık 39,7 sentti
- Hata ayıklama veya daha karmaşık özelliklerde, ya da kod tabanının tamamının refactor edilmesinde tasarrufun birikip birikmeyeceği ve refactoring’in kendi maliyetinin ne olduğu doğrulanmadı
- Çıkış token’larını da azaltan refactoring’in mümkün olup olmadığı belirsiz; basit temsili değişiklikte deterministik olmayan kod üretiminin gürültüsü, yapı değişikliğinden kaynaklanan farkları maskeledi
Claude ile yürütülen refactoring
- Claude koda bakıp uygulanacak refactoring’i kendi başına seçemedi; gerçek sonuçlar, prompt’un doğrudan talimat verdiği işlere karşılık geldi
- Geliştirme harness’inde açık bir refactoring aşaması bulunmasına rağmen Claude bunu kullanarak 17.155 satırlık dosyayı iyileştirmedi
- Planlama sürecinde Claude Code ilk adım olarak fonksiyon çıkarmayı bulurken, Claude.ai tüm istemci sınıfının çıkarılmasını da belirledi
- Mekanik değişikliklerde
grepvesedkullanan Python betikleri kullanıldı; ancak betikler girintileme yüzünden sık sık karışıklık yaşadı - En değerli mağaza dosyası ayrımı ilk denemede atlandı ve sonraki aşamada yeniden uygulandı; bu nedenle ölçüm sonuçlarındaki aşama sayısı ile ekteki plan adımları uyuşmuyor
- Tüm deney yaklaşık 8 saat sürdü ve çoğunlukla gözetimsiz ilerledi
- 6 saat 40 dakika sonra eksik aşama fark edilerek bir kez müdahale edildi
- Test çalıştırmalarını ciddi biçimde yavaşlatan nedenin yavaş otel Wi‑Fi’ından çok, aşırı büyümüş Cargo geçici derleme önbelleği olduğu ortaya çıktı
Temsili değişiklik prompt’u
- Her alt ajana yalnızca kod tabanı ve mimari belgeler verildi ve aynı
ItemWatchStoreasenkron public trait’ini uygulaması istendi - Trait şu üç metodu içeriyordu
watch_item(&self, item_id: &str, user_id: &str) -> Result<()>unwatch_item(&self, item_id: &str, user_id: &str) -> Result<()>watched_items_for_user(&self, user_id: &str) -> Result<Vec<String>>
- Watch bilgisi Firestore’daki
item_watcheskoleksiyonundaitemId,userId,createdAtalanlarıyla saklandı - Ayrı bir Rust kayıt struct’ı olmadan item ID’lerinin
Vec<String>’i döndürüldü FakeStore’a bellek içiVec<(String, String)>alanı eklendi;FirestoreStoreise mevcut HTTP desenini aynen kullanarak uygulandı- Yanıtın sonunda okunan dosyaları ve karakter sayılarını, ayrıca yanıt karakter sayısını JSON olarak çıktılaması istendi; kodu commit etmemesi söylendi
Uygulanan refactoring planı
-
1. aşama —
FirestoreClientsınıfını çıkarma- Alan sorgusu koordinasyonu ile Firestore HTTP aktarımı sorumlulukları ayrıldı
reqwest::Client,project_id,MetadataAuth, URL ve kimlik doğrulama header işleme yeni struct’a taşındı- Plana göre
FirestoreStoreuygulamasından yaklaşık 1.200 satır azaltılıp istemciye yaklaşık 120 satır ekleniyordu
-
2. aşama —
extract_doc_id,new_linkfonksiyonlarını çıkarma- 20 belge parser’ında ID çıkarma ve 62 kez tekrarlanan
Linkoluşturma ortaklaştırıldı - Yaklaşık 500 satır tasarruf bekleniyordu
- 20 belge parser’ında ID çıkarma ve 62 kez tekrarlanan
-
3. aşama — link sorgu pipeline fonksiyonlarını çıkarma
- Yaklaşık 15 yerdeki sorgu sonucu toplama ve yaklaşık 8 yerdeki tek hedef ID sorgulama deseni ortaklaştırıldı
- Yaklaşık 200 satır tasarruf bekleniyordu
-
4. aşama —
FakeStoreInnerlink koşul fonksiyonlarını çıkarma- Yaklaşık 15 metotta tekrarlanan
inner.links.iter()varyasyonları iki metoda ayrıldı - Yaklaşık 120 satır tasarruf bekleniyordu
- Yaklaşık 15 metotta tekrarlanan
-
5. aşama — Firestore değer oluşturma fonksiyonlarını ekleme
- 128’den fazla kez tekrarlanan string, timestamp vb.
json!ifadeleri dört fonksiyon çağrısıyla değiştirildi - Çok satırlı makroları tek satırlık çağrılara dönüştürerek yaklaşık 80 satır tasarruf bekleniyordu
- 128’den fazla kez tekrarlanan string, timestamp vb.
-
6. aşama —
FieldsBuilderçıkarma- Yaklaşık 20 encoder’daki field map oluşturma deseni builder ile birleştirildi
- Yaklaşık 40 satırlık encoder’ları yaklaşık 12 satıra indirerek toplam 500-600 satır tasarruf bekleniyordu
-
7. aşama —
queries.rsayırma- 32
LinkQuerysabiti ve ilgili tipler ayrı modüle taşındı - Mevcut çağrı yerleri değiştirilmeden
mod.rsiçinde yaklaşık 800 satır azaltıldı
- 32
-
8. aşama —
traits.rsayırma- 17 public trait ve ilgili hata tipleri taşınıp yeniden export edildi
mod.rsiçinde yaklaşık 1.900 satır azaltılsa da yeni dosya da yaklaşık 1.900 satır oldu
-
9. aşama —
traits/dizinini alanlara göre bölme- Trait’ler
planning.rs,content.rs,people.rs,system.rsolarak ayrıldı - Tanımlar ve çağrı yerleri değiştirilmeden dosya başına boyut yaklaşık 300-650 satırla sınırlandı
- Trait’ler
-
10. aşama —
codec.rsayırma- Belge encoder-decoder’ları, parser’lar,
FieldsBuilderve değer oluşturma fonksiyonları taşındı -
- aşamadan sonra yaklaşık 400-500 satırlık bir modül oldu ve
mod.rsiçinde yaklaşık 500 satır azaltıldı
- aşamadan sonra yaklaşık 400-500 satırlık bir modül oldu ve
- Belge encoder-decoder’ları, parser’lar,
-
11. aşama —
fake_store.rsayırmaFakeStore,FakeStoreInnerve 18 trait uygulaması taşındımod.rsiçinde yaklaşık 4.700 satır azaltıldı
-
12. aşama —
FirestoreStoreuygulamasını ayırmastore/mod.rsiçinde struct, constructor,FirestoreClient,MetadataAuthbırakıldı; trait uygulamaları alan bazlı dosyalara ayrıldı- Yaklaşık 10.000 satırlık dosya, her biri 120-650 satırlık 10 dosyaya dönüştürüldü ve
mod.rsyaklaşık 100 satırlık yeniden export dosyası hâline getirildi
-
13. aşama — testleri hedef modülle birlikte konumlandırma
- Test kodu değiştirilmeden her uygulama dosyasının altına taşındı
mod.rsiçinde yaklaşık 2.000 satır azaltıldı ve her dosyaya ilgili testlerden 200-700 satır eklendi
Sınırlar ve sonraki deneyler
- Refactoring planı yazma ve yürütmede harcanan token’lar ayrıca sayılmadığı için refactoring yatırım maliyeti doğru hesaplanamıyor
- O zaman dilimindeki toplam kullanıma göre üst sınır 5 milyon token, ancak buna planın iki kez yazılması, deney ve temsili değişiklik tasarımı ile diğer işler de dahil
- Deney konusu hâlâ greenfield aşamasında ve tek bir geliştiricinin kurup yönettiği büyük ölçekli tek bir uygulama olduğu için sonuçlar genellenemez
- Sonraki işler için doğru refactoring token ölçümü, daha karmaşık değişiklikler, daha geniş kapsamlı refactoring, sürekli refactoring ve yaklaşımların göreli değerlerinin karşılaştırılması gerekiyor
- Bu deney, refactoring ile elde edilen zaman ve parasal değeri refactoring’in kendi maliyetiyle birlikte ölçebilmek için bir başlangıç noktası oldu
1 yorum
Hacker News görüşleri
Çoğu BT şirketinin görmezden geldiği geliştirici en iyi uygulamalarının yapay zeka en iyi uygulamaları olarak yeniden keşfedilmesi eğlenceli
Eskiden belgeleri kodun içinde tutmak, sadece Jira işi atmak yerine projenin tüm bağlamını aktarmak ve uzun vadeli üretkenlik için refactoring yapmak sıkıcı bulunurdu
Şimdi aynı şeyler, yapay zeka dokümantasyonunu kod ve
CLAUDE.mdiçinde tutmak, prompt'larla aşırı ayrıntılı kontrol etmemek ve yapay zeka verimliliği için refactoring yapmak denince ilgi çekici karşılanıyorİnsanlar doğru yöntemi bilse bile meşgul olabilir ya da dikkatleri dağılabilir; ajanlar ise sıkıcı işlerden usanmadığı için, insanlarda etkisi kanıtlanmış ama düzenli uygulaması zor olan süreçler pratikte mümkün hale geliyor
Ortak bir spesifikasyona dayanarak uygulama ve testlerin ayrı ajanlar tarafından yazılması ve bir denetim ajanının bunları doğrulaması sağlanmış; böylece sonuçlar birbirini kirletmiyor. Bu, IBM'in 1980'lerde insanlar için geliştirdiği cleanroom engineering yaklaşımının yapay zekayla geniş ve tutarlı biçimde uygulanması demek
Yani eski bir pratiği yapay zeka modasına uyacak şekilde yeniymiş gibi paketlemek değil; 20 yılı aşkın en iyi uygulamaların hâlâ geçerli olduğunu kanıtlarıyla göstermek
Ajanların ise her oturumda bağlamı yeniden edinmesi gerektiğinden, en iyi uygulamaların değeri çok daha büyüyor ve etkisi de hemen görülüyor
Yine de bir saat boyunca CLI'ı 100 kez çalıştırıp yeni bir flag'in kullanılabilirliğini test edebilmek iyi
Buna karşılık yapay zeka, böyle bir temel olmadığında çok kötü performans gösteriyor ya da hiç çalışmıyor; bu yüzden sağlıklı mühendislik pratikleri uzun vadeli bir iyileştirme değil, zorunlu bir önkoşul haline geliyor
Gerçekte net etki sıfır olsa bile, yapay zekayı iş akışına sokmak düzgün geliştirme pratiklerini yerleştirmek için bir gerekçe sağladığı ölçüde faydalı
Bu yazının, yapay zeka araçlarının gerçekte nasıl kullanıldığına dayanarak somut ve nicel bir eleştiri getirmesi hoş
Gerçek kullanım örnekleri olmadan toplumsal riskleri muğlak biçimde tartışan yazılardan çok, yapay zekanın neyi yapamadığını ölçümlerle gösteren yazılar daha faydalı
Aynı nedenle Boko Haram üyeleriyle görüşerek yapay zekanın terörde nasıl kullanıldığını inceleyen rapor da etkileyiciydi
Yapay zeka olmadan doğrudan yapılan refactoring'i gerçekten seviyorum
Görünür hiçbir değişiklik olmasa da, şu an hemen sonuç üretmeyen bir web sitesini gelecekte çok daha kolay yönetilebilir hale getirmesi tatmin veriyor
Yerleşik kalıplarla çoktan çözülmüş sorunları geçmişte yazılmış tuhaf dolambaçlı kodların yeniden çözmeye çalıştığını bulup bunları en iyi uygulamalara taşırken yeni teknik borç oluşturmamak, bulmaca çözer gibi keyif veriyor
Kimlik doğrulama dahil her şeyi özensizce kendim uygulayarak iç işleyişi zor yoldan öğrendim; bunun sonucunda da önümüzdeki 10 yıl boyunca keyifle uğraşacağım refactoring işleri çıktı
Kod tabanı bir sistemdir sözünü somut olarak anlamaya başladım ve kodu çekip itebileceğiniz sürekli bir organizasyon ya da ağ gibi daha yüksek bir seviyeden görür oldum
Yapay zekanın bu öğrenme sürecini ortadan kaldırabilmesi, junior geliştirici sorununu daha görünür kılıyor. Sezgi kazanmak için bizzat derine inmekten başka yol yok; Naur 40 yıl önce uyarmış olsa da bu ders sürekli unutuluyor
Ajanın refactoring yaparken insan katılımının gerekli olduğunu düşünüyorum
Üretici modelin ilk işe odaklanırken kaçırdığı noktaları bir inceleme modeli bulabilir, ancak projenin genel amacını ve kodun nasıl birleştiğini gerçekten anlayıp tekrarları ya da daha zarif yapıları ayırt edebileceği şüpheli
Refactoring işini bir kodlama ajanına bırakmak, bir travma cerrahından atletik performansı artırmasını istemeye benzer; düzgün yapılması için bütüncül bir bakış gerekir
Büyük dosyaları birkaç dosyaya bölmek tek başına yüzeysel bir refactoring olarak kalır. Hangi kodun birlikte durması gerektiğine ve nelerin yardımcı fonksiyonlara çıkarılacağına dair bir teori yoksa, bu çarpanlara ayırmaktan çok büyük bir sayıyı küçük sayılara bölüp sonra yeniden toplamaya benzer
Ajan bazen API'den zaten alınan değerleri yeniden saklayıp hesaplayan sistemler kuruyor, ama insan proje bütününe bakıp JSON içindeki belirli bir anahtarda gereken verinin zaten bulunduğunu daha isabetli biçimde tespit edebiliyor
functools.partialile Command deseni uygulanması gibi karmaşık bir isteği de karşılayabiliyorDosya sınırlarının mantıksal alt sistem sınırlarını temsil ederek akıl yürütmeyi kolaylaştırdığı ve diğer dosyaların içeriğinin varsayılan olarak opak kabul edildiği fikri de eğitim verilerinde bolca yer alıyor
Bu yapının avantajının sadece insan bilişinin tesadüfi bir özelliği değil, nesnel yönleri de olduğunu düşünüyorum
Refactoring deneyimim, başkalarının kod tabanlarıyla çalışma biçimim ve özgün tasarımcı olarak geçmişteki ve bugünkü niyetleri açıklayabilmem yardımcı oldu
Bağımlılık kırılganlığı az olan ve LLM'lerin daha kolay ele aldığı niş bir dildi; JavaScript ve Python tarafındaki önyargı kaldırılınca iş hızı ciddi biçimde arttı
Bu, birkaç popüler dilde script yazılan ama ortam gereksinimleri nedeniyle hepsinin JVM üzerinde çalıştırıldığı bir JSR-223 projesiydi: https://en.wikipedia.org/wiki/Scripting_for_the_Java_Platform
Bu işe alım piyasasında en güncel öncü model tabanlı kodlama ajanlarını kullanmak ve bunların yetenekleriyle sınırlarını doğru bilmek gerekiyor; mülakatta tersini savunmak elenme nedeni olabilir
Özlü bağlam, yalnızca token tüketimini azaltmakla kalmaz; akıl yürütmeyi de iyileştirir ve tek bir bağlama daha fazla katman sığdırıp bunları daha akıllıca işlemeyi mümkün kılar
İyi soyutlamaya yönelik refactoring, yalnızca test edilen örneklerde değil, içe ve dışa doğru genellenen örneklerde de doğru olma ihtimali daha yüksek, daha iyi genelleşen yazılımlar üretir
Bunu destekleyen bilgi kuramı ve Bayes matematiği vardır; ekonomik ve enerji açısından verimli yazılımın daha doğru hale gelmesi zarif bir rastlantı gibi görünüyor
Esas nokta kodun entropisini azaltmak
LLM'ler zaten az bağlamla bile anlamı oldukça iyi çıkarıyor
Veri sunulmuş olması ilginç; iyi ayrılmış kodda LLM'lerin büyük fayda sağladığı ama böyle kodu kendi başlarına üretme konusunda çok da güçlü olmadıkları yönündeki kişisel gözlemimle örtüşüyor
Muhtemelen çoğu insan geliştirici için de durum benzer
Genel olarak AI'dan kazanım büyük, ama toparlama zamanı da gerekiyor ve hâlâ her satırı okumak gerektiğini düşünüyorum
Başka ekiplerin ilerlemesini engellememek için bazı incelemeleri erteledim; şimdi sonradan normalden daha büyük bir teknik borcu ödüyorum, ama önce darboğazı açmak daha değerliydi
AI her anlamda teknik borcu daha kolay çekilebilir hale getirdi ve iyi yönlendirilirse bu borcu kapatmada da epey iyi. Yine de sonuç kişiden kişiye değişiyor: https://news.ycombinator.com/item?id=49035455
İyi düzenlenmiş kod örnekleri veya açık kaynak depoları üzerinden ne yapılması ve ne yapılmaması gerektiğini göstermek çok yardımcı oluyor
Refactoring'in ekonomik faydasının çoğu, token tasarrufundan çok insanların anlama düzeyinin artmasından geliyor
Gece 3'te gelen arıza çağrılarını daha hızlı çözmeyi, üretim ortamına çıkan hataları azaltmayı ve rakiplerden daha hızlı teslim etmeyi sağlıyor
Hepsinden önemlisi, sistemi anlayınca insanlar sorumluluk ve sahiplenmeyi daha istekli üstleniyor; bu da sorun çıktığında daha hızlı düzeltmelerini ve iyileştirme alanlarına daha hevesle atılmalarını sağlıyor
Asıl nokta refactoring'in token tüketimini azaltması; bunu soyut konuşmak yerine nicel olarak göstermeleri güzel
Ancak Fowler, 《Refactoring》 kitabında refactoring'in vazgeçilmez önkoşulunun sağlam testler olduğunu söylemişti ve AI'dan bağımsız olarak gerçek faydanın burada olduğunu düşünüyorum
İyi testler, ister insan ister robot kaynaklı olsun regresyonları engeller ve her iki tarafın da okuyabileceği bir spesifikasyonu kod olarak bırakır: https://www.oreilly.com/library/view/refactoring-improving-the/9780134757681/
Sonnet 5 fiyatını MTok başına 3 dolar sayarsanız, veri erişim katmanına dokunan gelecekteki değişikliklerde sağlanan tasarruf 39,7 sent ediyor
OpenAI'ın fiyat indirimleri, açık modeller ve uzun vadede token fiyatlarının düşmesi düşünüldüğünde, saati yaklaşık 100 dolar olan kıdemli bir geliştiricinin refactoring'i yönlendirme maliyetiyle örtüşmeyebilir
Ajanın ürettiği kod, neredeyse yalnızca ajanın okuyup anlayabileceği kadar devasa bir yığına dönüştü; burada bunun özellik mi, bug mı, yoksa ortaya çıkan bir özellik mi olduğundan çok gerçekliğin kendisi önemli.
AI araçlarıyla üretilen kodu yönetebilmek için yeniden AI araçlarına bağımlı hale geliyoruz.
Ancak insanlar da zaten korkunç derecede büyük dosyalar ve monorepo'lar üretti; LLM sayesinde bunları düzenlemek ve refactor etmek nihayet katlanılabilir hale geldi.
Kod tabanı insanların anlayamayacağı kadar büyük ve dağınık hale gelmişken LLM bizi kurtarabilir; kişisel olarak dev dosyalardan nefret etsem de Fowler tarzı düzenleme ilkeleri artık o kadar önemli olmayabilir, bu da acı bir durum.
Ortalama ya da bazen iyi iş çıkaran çalışanlar bile, eskiden şirket süreçleri yüzünden yapamadıkları şeyleri yıldırım hızıyla uygulayabilir hale gelerek tersine kötü çalışana dönüşebilir.
Ajan devasa dosyalar ya da fonksiyonlar üretirse, bunu yapmamasını söylemek yeterli oluyor ve buna uyuyor.
Refactoring, sağlıklı bir geliştirme ekibinin en iyi göstergelerinden biri bence.
Refactoring'in kendi başına faydaları var ama bu değer ürün sorumlularına ya da özellik iş listelerinde pek görünmez.
Ekip, yazılımın genel sağlığı için refactoring yapıyorsa bu; geliştiricilerin iyi yazılım için önerileri rahatça dile getirebildiği ve bu önerilerin ciddiyetle ele alındığı anlamına gelir.
Yazılım çürümesi, ekipte yüksek kaliteli yazılım vizyonunu hayata geçirecek motivasyon ya da yetki olmadığında en ağır hale gelir; ekip mükemmellik konusundaki yargısını uygulayabiliyorsa bu genelde iyi bir işarettir.
Elbette Ruby, Node ve Rust'tan geçip yeniden ajan dostu teknolojiye baştan yazmak gibi aşırılıklar da var, ama kurumsal ortamlarda iyileştirme için izinleri olmadığını hisseden ekipler çok daha yaygındır.