Devin ile Yazılım Geliştirme: Güvenlik, Dağıtım, Bakım (Bölüm 4)
Devin ile NextAuth kullanarak gerçek kullanıcı kimlik doğrulaması eklemeyi, Sentry ile hataları izlemeyi ve ön ucu önizleme URL’leriyle Vercel’e dağıtmayı öğrenin.
Tekrar hoş geldiniz! Neredeyse bitti: Slack ötüyor, Jira’da işler var, testler yeşil ve CI, özensiz her PR’ı engelliyor. Dördüncü bölüm, fp-ts oyun alanını teoride kamuya açabileceğimiz bir şeye dönüştüreceğimiz son itiş.
Devin serisindeki tüm eğitimlere buradan erişebilirsiniz:
Kimlik doğrulama: Artık anonim UUID yok; NextAuth kimlik bilgilerini, JWT çerezlerini ve GqlAuthGuard ekleyip ilerlemeyi gerçek kullanıcılara bağlayacağız.
Prod’u izleme: Web uygulamasına bir satır Sentry, Nest API’ye bir satır ve her istisna panele düşecek.
Tek tuşla dağıtım: Ön uç Vercel’de canlı olacak ve her PR’da önizleme URL’leri çıkacak. (API şimdilik yerelde kalacak, prod’u Docker ile taklit edeceğiz.)
Ayrıca Devin ile eşli programlamaya da dönüp bakacağız: nerede parlıyor, nerede ise depoyu dünyaya açmadan önce bir insanın uçları bağlaması gerekiyor, göreceğiz. Son düzlüğe hazır mısınız?
Anonim UUID’den Gerçek Kullanıcılara
Devin’den ne istedim
Kısacası, Devin’den anonim UUID akışını sökmesini ve bana gerçek bir kimlik doğrulama yığını vermesini istedim:
apps/web içinde NextAuth v6 kimlik bilgileri sağlayıcısı
Argon2 hashing ve JWT çerezleri ile NestJS AuthModule
Bir User tablosu ekleyen ve Progress.sessionId → userId (null olamaz) olarak değiştiren Prisma migrasyonu
Mevcut UUID ilerleme satırlarını bir yer tutucu kullanıcıya kopyalayın ki öğrenenler rozetlerini korusun
Postgres’i SQLite ile değiştirmeyin
Gelen yanıt (çoğunlukla iyi)
Sonuçların özeti şöyle:
Katman
Devin’in Çıktısı
Veritabanı
Session tablosu kaldırıldı; email, hash, seri alanları ve zaman damgaları olan bir User modeli eklendi. Migrasyon betiği, eski her sessionId satırını legacy-<uuid>@anon.local adlı sözde bir kullanıcıya geri doldurdu.
Arka uç
AuthModule, AuthService, GraphQL AuthResolver, JwtStrategy ve bir GqlAuthGuard. Tamamen Nest’e uygun, %100 tipli.
Ön uç
AuthProvider React context, LoginForm, RegisterForm, korumalı rotalarda açılan bir modal ve gösterge paneli başlığında bir çıkış düğmesi.
Güvenlik
Argon2 (12 tur), class-validator ile DTO doğrulaması, JWT’ler localStorage’da saklanıyor, her ilerleme çözücüsünde korumalar var.
Testler
AuthService.register/login için birim testi ve token eksikliğini reddettiğini doğrulayan bir e2e mutasyon testi. (Testleri eklemesi için ikinci kez yönlendirdim)
Bir başka SQLite migrasyonu
Tahmin edin Devin’in küçük düşünme kutusunda yine ne belirdi.
Yerel geliştirme için PostgreSQL’den SQLite’a başarıyla geçirildi 🥳
Kendisine yapmamasını söylediğim şeyin ta kendisi. Prisma şeması SQLite için yeniden yazılmış, bağlantı dizeleri ve tipler (TIMESTAMP’tan DATETIME’a) değiştirilmişti. Oturum ortasında yakaladım:
Oturumu durdurdum.
git checkout main apps/api/prisma/schema.prisma (Postgres şemasını geri yükleyin).
Yeni dev.db dosyasını sildim.
npm run prisma:migrate --workspace=apps/api ile Postgres migrasyonlarını yeniden uyguladım.
Devin’i sürdüm; geri almayı algıladı ve şikayet etmeden devam etti.
Zarar: 0,8 ACU ve yaklaşık on dakika.
Ekip arkadaşları için kırıcı değişiklik kontrol listesi
Devin’in PR’lara koyduğu talimatları gerçekten takdir ediyorum. Burada bize şunları söyledi:
# 1 Install new depsnpminstall--workspaces# 2 Run the Postgres migrationnpm run prisma:migrate --workspace=apps/api
# 3 Restart everythingnpm run dev:api &npm run dev:webAltyapı:
Mimari anlık görüntü
Wiki’de, yeni kimlik doğrulama sistemimizin bu faydalı diyagramını buldum:
Gerçek kullanıcılar devrede ve veritabanı kararlılıkla Postgres’teyken, nihayet gerçek öğrenen ilerlemesini izlemeye, Vercel’e önizleme derlemeleri göndermeye ve Sentry ile çalışma zamanı hatalarını yakalamaya hazırız.
Ön Uç Vercel’de, Her PR’da Önizleme Bağlantıları
Güvenli oturum açmalar hazırken, sıradaki bariz dönüm noktası dünyaya tıklanabilir bir şey göstermekti. Şimdilik yalnızca Next.js ön ucunu dağıtmaya karar verdik. API ve Postgres, bütçeye uygun bir barındırıcı seçene kadar benim yerel makinemde kalacak.
Manuel hesap bağlantısı (0 ACU)
Devin’i yerel entegrasyonlarla kişisel Vercel hesabıma bağlamak henüz mümkün değil. Bu yüzden Vercel paneli üzerinden manuel yaptım:
Vercel’e giriş yaptım ve “New Project → Import Git Repository”ye tıkladım.
fp-ts-exercises reposunu seçtim, derleme komutunu npm run build --workspace apps/web olarak bıraktım ve Deploy’a bastım.
Ortaya çıkan VERCEL_PROJECT_ID ve VERCEL_TOKEN değerlerini GitHub Secrets’a kopyaladım.
CI iş akışını Devin’e güncelletin (0,4 ACU)
Yönlendirmemi takip ederek, Devin mevcut iş akışının en altına tek bir iş ve oluşturulan URL’yi Slack’e curl’layan küçük bir kabuk adımı ekledi:
Bağlantıyı açmak bize oyun alanımızı, tam kimlik doğrulama akışını ve öğrenen panosunu gösterdi. Vercel tarafında henüz ortam yapılandırması gerekmedi; çünkü ön uç, yereldeki API ile http://localhost:4000 üzerinden konuşuyor.
Devin’in Gizli Anahtarlar Sistemine Yakından Bakış
Sentry entegrasyonundan önce, kullanmalı mıyım anlamak için Devin’in gizli anahtarlar sistemine baktım. Devin, ajanı API anahtarları, DB URL’leri veya OAuth token’larıyla besleyebilmeniz için yerleşik bir “Secrets” kasası sunuyor; böylece onları Git’e işlemeden ve sohbette ifşa etmeden kullanabiliyorsunuz. Bunu, GitHub Actions secrets veya Vercel Environment Variables’ın hafif bir karşılığı gibi düşünün; ancak Devin’in kendi bulut çalışma alanlarına kapsamlı.
Özellik
Nasıl çalışır
Notlar
Kapsam
Gizli anahtarlar üç kapsamda bulunur: organizasyon, repo ve oturum.
Gizli anahtarları organizasyon düzeyinde, tüm oturumlarınızda kullanılabilir kılabilirsiniz.
Yalnızca tek bir repo için eklemek isterseniz, repoyu kurarken belirtebilirsiniz.Gizli anahtarların oturuma özel olmasını isterseniz, oturum ayarlarında sağlayabilirsiniz.
Şifreleme
Sunucu tarafında AES-256 ile saklanır ve aktarım sırasında TLS 1.3+ kullanılır
Tüm müşteri verileri, AWS tarafından yönetilen özel bir KMS anahtarı (Key Management Service) ile şifrelenir.
ACU maliyeti yok
Bir gizli anahtar eklemek, düzenlemek veya silmek kontrol düzlemi eylemidir: 0 ACU. Yalnızca gizli anahtarı kullanan görevler hesaplama kredisi tüketir.
Uzun ömürlü token’ları saklamak için iyi bir yer.
Yönlendirmelerde erişim
$.<NAME> ifadesini yönlendirmede veya bir komutta kullanın. Devin, kabuğu çalıştırmadan önce bunu çözümler.
Örnek: DATABASE_URL=$.POSTGRES_URL
Boyut sınırları
Anahtar başına 4 KB, Core katmanında takım başına 100 anahtar.
PEM sertifikaları veya özel anahtarlar için yeterli.
Bir gizli anahtar ekleme
Bir gizli anahtar eklemek için izlemeniz gereken adımlar:
Team → Secrets bölümünü Devin panelinde açın.
“Add Secret”’a tıklayın ve bir ad (SENTRY_DSN_WEB) ve değerini girin.
Devin saklamayı onaylar; anahtar artık $.SENTRY_DSN_WEB olarak kullanılabilir.
Bir görevde gizli anahtar kullanma
Görev: API Sentry başlatımını güncelle; DSN’i $SECRET.SENTRY_DSN_API olarak ayarla
Devin, main.ts’i yazarken değeri ikame eder. Kabuk sekmesinde gerçek DSN’i görürsünüz, ancak sohbet günlüğü bunu maskeler.
Artılar ve eksiler
Artılar:
Anahtarların PR’lara veya Timelapse günlüklerine sızma riski yok.
Organizasyon kapsamlı gizli anahtarlar oturumlar arasında çalışır: bir yükleme, çoklu kullanım.
Saklama veya getirmede sıfır kredi maliyeti.
Eksiler:
Anahtarlar yerelde .env’e kopyalamadıkça mevcut değil. Devin dışında yapılan test çalıştırmaları manuel kurulum gerektirir.
Ortam başına kapsam yok (ör. “yalnızca prod’da”). Tüm oturumlar tüm gizli anahtarlara erişir.
Ne zaman kullanılmalı
Anahtara bizzat Devin’in ihtiyaç duyduğu durumlarda (ör. Vercel’e itme, özel bir kayıt defterine erişme veya derleme sırasında Sentry’yi bağlama) Devin’in kasasını kullanmayı daha kolay buluyorum. Yerel geliştirme kabuğunuzda veya CI koşucularında da çalışan her şey için .env / GitHub Actions gizlilerini kullanmaya devam ederdim.
Devin’in Sentry ile Entegrasyonu
Kullandığım yönlendirme şöyleydi: Her iki uygulamaya da Sentry ekleyin ki her istisna panomda görünsün. .env içindeki ortam değişkenlerini kullanın. Başka davranış değişikliği yok.
Devin’in çalışması (0,6 ACU, tek oturum)
Sonucun özeti şöyle:
Yığın
Dokunulan Dosyalar
Önemli Kod
Next.js (web)
apps/web/sentry.client.config.tsxapps/web/sentry.server.config.ts ve app/layout.tsx içine bir import
ts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });
NestJS (API)
apps/api/src/sentry.ts ve main.ts içinde iki satır
ts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());
Env iskeleti
.env.example’a yer tutucular eklendi
SENTRY_DSN_WEB= SENTRY_DSN_API=
Testler
Sentry.captureException’ın zorlanmış bir hata üzerinde çağrıldığını doğrulamak için bir Jest spy eklendi.
Gösterge paneli idare eder görünüyordu, ama boşluklar, metin ve renkler hâlâ el ayarı istedi.
Görüşüm
Devin’in kendi dokümanları hiçbir zaman bir ürün oluşturucusu vaat etmedi. Çok daha dar bir tatlı noktayı tarif ediyorlar ve geriye dönüp bakınca, o sınır içinde kalmalıymışım. Resmî “Devin’in güçlü yanları nelerdir?” sayfası dört başlık kullanım listeliyor:
Dokümanlar, UI, API ve veri akışlarını kapsayan özellik geliştirmelerini “deneysel” olarak nitelendiriyor. Bunlar, ajanın “önemli ölçüde insan incelemesi ve yineleme” gerektirebileceği, büyük ve ucu açık görevler olarak tanımlanıyor. Sandpack’in testleri sabit kodladığında veya gösterge paneli iyi görünse de verileri gerçekten hesaplamadığında gördüğümüz tam olarak buydu.
Dolayısıyla, bir kural olarak:
Kıdemli bir geliştiricinin bir betikle otomatikleştirebileceği her şey için Devin’i kullanın; ürün sezgisi gerektiren görevlerde direksiyonu sizde tutun.
API’yi barındırın ki önizleme derlemeleri (ve gelecekteki kullanıcılar) gerçek bir arka uca vursun.
Çekirdek işlevselliğin çalıştığından emin olun ve içinde olduğunu bildiğim 30 hatayı düzeltin
UI’ı cilalayın
Daha fazla içerik ve egzersiz ekleyin
Kullanıma açın!
Aynı yolu izlerseniz, unutmayın: ajan betonu dökebilir, ama evi tasarlamak hâlâ size kalmış. İyi kodlamalar!
Yazar
Marie Fayard
İlk prototipten ürün-pazar uyumuna ve ötesine kadar erken aşama girişimleri büyütme konusunda uzmanlaşmış, ürün odaklı bir teknik liderim. İnsanların teknolojiyi nasıl kullandığına dair bitmeyen bir merakım var ve kurucularla ile disiplinler arası ekiplerle yakın çalışarak cesur fikirleri hayata geçirmeyi seviyorum. Ürün inşa etmediğim zamanlarda ya dünyanın yeni köşelerinde ilham peşinde koşuyor ya da yoga stüdyosunda stres atıyorum.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Tekrar hoş geldiniz! Neredeyse bitti: Slack ötüyor, Jira’da işler var, testler yeşil ve CI, özensiz her PR’ı engelliyor. Dördüncü bölüm, fp-ts oyun alanını teoride kamuya açabileceğimiz bir şeye dönüştüreceğimiz son itiş.
Devin serisindeki tüm eğitimlere buradan erişebilirsiniz:
Dördüncü eğitim için planımız şöyle:
Ayrıca Devin ile eşli programlamaya da dönüp bakacağız: nerede parlıyor, nerede ise depoyu dünyaya açmadan önce bir insanın uçları bağlaması gerekiyor, göreceğiz. Son düzlüğe hazır mısınız?
Anonim UUID’den Gerçek Kullanıcılara
Devin’den ne istedim
Kısacası, Devin’den anonim UUID akışını sökmesini ve bana gerçek bir kimlik doğrulama yığını vermesini istedim:
apps/webiçinde NextAuth v6 kimlik bilgileri sağlayıcısıUsertablosu ekleyen veProgress.sessionId→userId(null olamaz) olarak değiştiren Prisma migrasyonuGelen yanıt (çoğunlukla iyi)
Sonuçların özeti şöyle:
Katman
Devin’in Çıktısı
Veritabanı
Sessiontablosu kaldırıldı;email,hash, seri alanları ve zaman damgaları olan birUsermodeli eklendi. Migrasyon betiği, eski hersessionIdsatırınılegacy-<uuid>@anon.localadlı sözde bir kullanıcıya geri doldurdu.Arka uç
AuthModule,AuthService, GraphQLAuthResolver,JwtStrategyve birGqlAuthGuard. Tamamen Nest’e uygun, %100 tipli.Ön uç
AuthProviderReact context,LoginForm,RegisterForm, korumalı rotalarda açılan bir modal ve gösterge paneli başlığında bir çıkış düğmesi.Güvenlik
Argon2 (12 tur),
class-validatorile DTO doğrulaması, JWT’lerlocalStorage’da saklanıyor, her ilerleme çözücüsünde korumalar var.Testler
AuthService.register/loginiçin birim testi ve token eksikliğini reddettiğini doğrulayan bir e2e mutasyon testi. (Testleri eklemesi için ikinci kez yönlendirdim)Bir başka SQLite migrasyonu
Tahmin edin Devin’in küçük düşünme kutusunda yine ne belirdi.
Yerel geliştirme için PostgreSQL’den SQLite’a başarıyla geçirildi 🥳
Kendisine yapmamasını söylediğim şeyin ta kendisi. Prisma şeması SQLite için yeniden yazılmış, bağlantı dizeleri ve tipler (TIMESTAMP’tan DATETIME’a) değiştirilmişti. Oturum ortasında yakaladım:
git checkout main apps/api/prisma/schema.prisma(Postgres şemasını geri yükleyin).dev.dbdosyasını sildim.npm run prisma:migrate --workspace=apps/apiile Postgres migrasyonlarını yeniden uyguladım.Zarar: 0,8 ACU ve yaklaşık on dakika.
Ekip arkadaşları için kırıcı değişiklik kontrol listesi
Devin’in PR’lara koyduğu talimatları gerçekten takdir ediyorum. Burada bize şunları söyledi:
Mimari anlık görüntü
Wiki’de, yeni kimlik doğrulama sistemimizin bu faydalı diyagramını buldum:
Gerçek kullanıcılar devrede ve veritabanı kararlılıkla Postgres’teyken, nihayet gerçek öğrenen ilerlemesini izlemeye, Vercel’e önizleme derlemeleri göndermeye ve Sentry ile çalışma zamanı hatalarını yakalamaya hazırız.
Ön Uç Vercel’de, Her PR’da Önizleme Bağlantıları
Güvenli oturum açmalar hazırken, sıradaki bariz dönüm noktası dünyaya tıklanabilir bir şey göstermekti. Şimdilik yalnızca Next.js ön ucunu dağıtmaya karar verdik. API ve Postgres, bütçeye uygun bir barındırıcı seçene kadar benim yerel makinemde kalacak.
Manuel hesap bağlantısı (0 ACU)
Devin’i yerel entegrasyonlarla kişisel Vercel hesabıma bağlamak henüz mümkün değil. Bu yüzden Vercel paneli üzerinden manuel yaptım:
fp-ts-exercisesreposunu seçtim, derleme komutununpm run build --workspace apps/webolarak bıraktım ve Deploy’a bastım.VERCEL_PROJECT_IDveVERCEL_TOKENdeğerlerini GitHub Secrets’a kopyaladım.CI iş akışını Devin’e güncelletin (0,4 ACU)
Yönlendirmemi takip ederek, Devin mevcut iş akışının en altına tek bir iş ve oluşturulan URL’yi Slack’e curl’layan küçük bir kabuk adımı ekledi:
Sonuç
Bir dalı it → CI yeşil → Slack uyarısı:
Bağlantıyı açmak bize oyun alanımızı, tam kimlik doğrulama akışını ve öğrenen panosunu gösterdi. Vercel tarafında henüz ortam yapılandırması gerekmedi; çünkü ön uç, yereldeki API ile
http://localhost:4000üzerinden konuşuyor.Devin’in Gizli Anahtarlar Sistemine Yakından Bakış
Sentry entegrasyonundan önce, kullanmalı mıyım anlamak için Devin’in gizli anahtarlar sistemine baktım. Devin, ajanı API anahtarları, DB URL’leri veya OAuth token’larıyla besleyebilmeniz için yerleşik bir “Secrets” kasası sunuyor; böylece onları Git’e işlemeden ve sohbette ifşa etmeden kullanabiliyorsunuz. Bunu, GitHub Actions secrets veya Vercel Environment Variables’ın hafif bir karşılığı gibi düşünün; ancak Devin’in kendi bulut çalışma alanlarına kapsamlı.
Özellik
Nasıl çalışır
Notlar
Kapsam
Gizli anahtarlar üç kapsamda bulunur: organizasyon, repo ve oturum.
Gizli anahtarları organizasyon düzeyinde, tüm oturumlarınızda kullanılabilir kılabilirsiniz.
Yalnızca tek bir repo için eklemek isterseniz, repoyu kurarken belirtebilirsiniz.Gizli anahtarların oturuma özel olmasını isterseniz, oturum ayarlarında sağlayabilirsiniz.
Şifreleme
Sunucu tarafında AES-256 ile saklanır ve aktarım sırasında TLS 1.3+ kullanılır
Tüm müşteri verileri, AWS tarafından yönetilen özel bir KMS anahtarı (Key Management Service) ile şifrelenir.
ACU maliyeti yok
Bir gizli anahtar eklemek, düzenlemek veya silmek kontrol düzlemi eylemidir: 0 ACU. Yalnızca gizli anahtarı kullanan görevler hesaplama kredisi tüketir.
Uzun ömürlü token’ları saklamak için iyi bir yer.
Yönlendirmelerde erişim
$.<NAME>ifadesini yönlendirmede veya bir komutta kullanın. Devin, kabuğu çalıştırmadan önce bunu çözümler.Örnek:
DATABASE_URL=$.POSTGRES_URLBoyut sınırları
Anahtar başına 4 KB, Core katmanında takım başına 100 anahtar.
PEM sertifikaları veya özel anahtarlar için yeterli.
Bir gizli anahtar ekleme
Bir gizli anahtar eklemek için izlemeniz gereken adımlar:
SENTRY_DSN_WEB) ve değerini girin.$.SENTRY_DSN_WEBolarak kullanılabilir.Bir görevde gizli anahtar kullanma
Görev: API Sentry başlatımını güncelle; DSN’i
$SECRET.SENTRY_DSN_APIolarak ayarlaDevin,
main.ts’i yazarken değeri ikame eder. Kabuk sekmesinde gerçek DSN’i görürsünüz, ancak sohbet günlüğü bunu maskeler.Artılar ve eksiler
Artılar:
Eksiler:
.env’e kopyalamadıkça mevcut değil. Devin dışında yapılan test çalıştırmaları manuel kurulum gerektirir.Ne zaman kullanılmalı
Anahtara bizzat Devin’in ihtiyaç duyduğu durumlarda (ör. Vercel’e itme, özel bir kayıt defterine erişme veya derleme sırasında Sentry’yi bağlama) Devin’in kasasını kullanmayı daha kolay buluyorum. Yerel geliştirme kabuğunuzda veya CI koşucularında da çalışan her şey için
.env/ GitHub Actions gizlilerini kullanmaya devam ederdim.Devin’in Sentry ile Entegrasyonu
Kullandığım yönlendirme şöyleydi: Her iki uygulamaya da Sentry ekleyin ki her istisna panomda görünsün.
.enviçindeki ortam değişkenlerini kullanın. Başka davranış değişikliği yok.Devin’in çalışması (0,6 ACU, tek oturum)
Sonucun özeti şöyle:
Yığın
Dokunulan Dosyalar
Önemli Kod
Next.js (web)
apps/web/sentry.client.config.tsxapps/web/sentry.server.config.tsveapp/layout.tsxiçine bir importts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });NestJS (API)
apps/api/src/sentry.tsvemain.tsiçinde iki satırts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());Env iskeleti
.env.example’a yer tutucular eklendiSENTRY_DSN_WEB= SENTRY_DSN_API=Testler
Sentry.captureException’ın zorlanmış bir hata üzerinde çağrıldığını doğrulamak için bir Jest spy eklendi.Manuel adımlarım
Şu adımları izledim:
.envdosyasına kopyaladım.http://localhost:4000/graphqladresine bilerek hatalı bir sorgu attım ve çalıştığını kontrol ettim. Saniyeler içinde Sentry’de bir sorun belirdi.Devin’in gizli anahtarlar özelliğini neden atladım
Devin’in gizli anahtarlar özelliğini atlamamın nedenleri:
.envdosyası.Değerlendirme: Devin Nerede Parlıyor, Nerede Tökezliyor
Dört bölüm önce bu repo, tozlu bir fp-ts egzersiz yığınıydı—şimdi ise şunlara sahip:
≈ 70 ACU harcadık (Core planında yaklaşık $157) ve yaklaşık iki iş günü kadar birebir inceleme yaptık.
Devin’in şaşırtıcı derecede iyi yaptığı şeyler
Devin’in çok iyi olduğunu düşündüğüm alanlar:
Alan
Neden etkilendim
Şablon altyapı
AuthModule iskeletleri, Dockerfile’lar, YAML iş akışları: dakikalar içinde, hatasız üretildi.
Çerçeveye uygun kod
NestJS dekoratörleri, NextAuth yapılandırması, Prisma migrasyonları resmi dokümanlarla uyumluydu.
Test iskeletleri
Birim ve Playwright paketleri baştan derlenip çalıştı—uç durum iskeletleri eksik değildi.
Ajanı hâlâ insanın geçtiği yerler
Devin’in hâlâ geliştirilmesi gerektiğini düşündüğüm noktalar:
Ağrı noktası
Örnek
Katmanlar arası özellik cilası
Sandpack editörü, sahte testlere sabit kodlanmıştı; SandpackTests bileşen adını kavrayamadı.
Yapılandırma kalıcılığı
Açıkça “Postgres’te kalmalı” dememe rağmen 5 kez tekrar SQLite’a döndü.
Adlandırma / temizlik
PR başlıkları sapabiliyor, Devin’e silmesini söylemezseniz bayat dosyalar kalabiliyor.
Zevk & UX
Gösterge paneli idare eder görünüyordu, ama boşluklar, metin ve renkler hâlâ el ayarı istedi.
Görüşüm
Devin’in kendi dokümanları hiçbir zaman bir ürün oluşturucusu vaat etmedi. Çok daha dar bir tatlı noktayı tarif ediyorlar ve geriye dönüp bakınca, o sınır içinde kalmalıymışım. Resmî “Devin’in güçlü yanları nelerdir?” sayfası dört başlık kullanım listeliyor:
Dokümanlar, UI, API ve veri akışlarını kapsayan özellik geliştirmelerini “deneysel” olarak nitelendiriyor. Bunlar, ajanın “önemli ölçüde insan incelemesi ve yineleme” gerektirebileceği, büyük ve ucu açık görevler olarak tanımlanıyor. Sandpack’in testleri sabit kodladığında veya gösterge paneli iyi görünse de verileri gerçekten hesaplamadığında gördüğümüz tam olarak buydu.
Dolayısıyla, bir kural olarak:
Kıdemli bir geliştiricinin bir betikle otomatikleştirebileceği her şey için Devin’i kullanın; ürün sezgisi gerektiren görevlerde direksiyonu sizde tutun.
Sonuç
Dört bölümlük eğitimimizin sonuna geldik:
Buradan atabileceğimiz birkaç sonraki adım:
Aynı yolu izlerseniz, unutmayın: ajan betonu dökebilir, ama evi tasarlamak hâlâ size kalmış. İyi kodlamalar!