Aynı yazılım projesine çıkan farklı fiyatlar, aynı adı taşıyan iki ayrı iş tanımının fiyatıdır. Tarif bir kararı yazmadığında o kararı tedarikçi kendi okumasıyla kapatır; okuma hiçbir sayfada görünmez, teklifte yalnız onun bedeli durur. Hangi okumanın fiyatlandığını kalem adları söylemez; eski koda ne olacağı teklifte hiç geçmiyorsa o teklifte okuma satırı da yoktur.
Üç teklif aynı belgeyi okudu, üç ayrı işi fiyatladı
Aynı iş tarifine gelen teklifler arasındaki fark, tarifin yazmadığı ve her tedarikçinin kendi varsayımıyla kapattığı satırlarda doğar. Bir iş tarifi, teklifin fiyatlayacağı kararların hepsini yazmaz. Yazılmayan her karar tedarikçi tarafında bir varsayımla kapanır, çünkü teklif bir tahmindir ve tahmin boşluk kaldırmaz.
Tarifte olmayan bilgiyi kapatmanın iki yolu var: sormak ve varsaymak. Sormak süre ister; cevabı beklerken teklif geç kalır ve rekabetli bir süreçte geç teklif okunmaz bile. Varsaymak süre istemez. Bu yüzden varsayım istisna değil öntanımlı davranıştır; tarif ne kadar sessizse varsayım o kadar geniş oluyor.
Varsayımın kendisi teklife satır olarak yazılmaz. Teklif bir fiyat belgesidir: içinde kalemler, süreler ve toplam vardır, o kalemleri üreten okuma yoktur. Elinizde farkı gösteren belge var, farkı açıklayan belge yok. İki rakamı yan yana koyduğunuzda karşılaştırdığınız şey iki fiyat değil, hiçbir yerde yazılı olmayan iki iş tanımı.
Alıcı tarafında bu görünmezliğin pratik sonucu şu: iki teklifi karşılaştırmak için elinizde ortak bir birim yok. Kalem adları benzer, başlıklar benzer, hatta toplamların yapısı benzer. Benzemeyen tek şey o kalemlerin arkasındaki iş tanımı ve o tanım hiçbir sayfada yazmıyor.
Bunun somut bir yüzü kurumsal site tarafında görünüyor. KGM SsangYong’a gelen iş yeni bir site yapmak değil, ayakta duran siteyi hafifletmekti. Bu cümlenin iki meşru okuması var. Siteyi baştan yazıp yerine hafif bir sürüm koymak da cümleyi karşılar, mevcut kodu yerinde bırakıp yalnız yükü taşıyan yerlere dokunmak da. İkisi aynı işi tarif etmiyor ve ikisi aynı rakama çıkmıyor.
Kendi teklif formumuzda bu boşluk rakamdan önce kapatılıyor. Projenizi anlattığınız adımın alt metni şunu söylüyor: “Verdiğiniz bilgi kararı belirliyor: devralınacak bir sistem kapsamı, bağlantı yokken alınacak saha kaydı mimariyi, ayrı taşınacak talep tipleri veri modelini değiştirir.” Aynı adımdaki açıklama kutusu da kapsam istiyor: “Problemi, hedefleri ve kapsamı anlamamıza yardımcı olacak her şeyi anlatın.” Bütçe aralığı alanı bu kutudan sonra geliyor.
Karşı durumu baştan söylemek gerekiyor. Tarif gerçekten her kararı yazmışsa ve teklifler yine ayrışıyorsa fark tedarikçinin maliyet yapısından geliyordur. Aşağıdaki bölümler tarifin sustuğu yerde ne olduğunu anlatıyor.
Firma büyüklüğü ve sektör fiyatı neden hareket ettirmez
Fiyat farkını açıklamak için ilk bakılan yer çoğu zaman tedarikçi olmuyor, alıcının kendisi oluyor. Firma büyük olduğu için mi pahalı, sektör özel olduğu için mi pahalı? Kendi formumuzda bu iki bilgi opsiyonel bir adımda duruyor.
Firma bilgilerini soran adımın başlığı yanında opsiyonel etiketi taşıyor ve alt metni şunu söylüyor: “Firma bilgisi mimari kararı değiştirmiyor; kararı sonraki adımın yanıtları veriyor.” Sektör ve firma büyüklüğü alanları tam bu adımda duruyor. Adım atlanabiliyor, atlandığında inceleme ekranında “Firma bilgisi girilmedi.” yazıyor ve talep eksik sayılmıyor.
Aynı sektörden gelen iki iş bambaşka kapsam çıkarabilir: Diotek’in sitesi keşif randevusu ile servis talebini ayrı akışlarda taşır, AlgoKlima’nın saha uygulaması kapsama alanı bittiğinde de kayıt açar. İkisi de iklimlendirme tarafında duruyor. Biri bir web sitesinin veri modeliyle ilgili bir karar, öteki telefonun bağlantısı yokken ne yapacağıyla ilgili bir karar. Sektör adı bu kararların hiçbirini belirlemiyor; belirleseydi iki iş birbirine benzerdi.
Teknoloji adı da benzer bir yanılgı üretiyor. Yığın adı fiyatı değil, yayına çıktıktan sonra bakımı kimin sürdürebileceğini belirliyor; bakımın kimde kaldığı sorusu ayrı bir yazının konusu.
Firma büyüklüğünün fiyata dokunduğu tek bir yer var: büyüklük yüzey sayısını değiştirdiğinde. Aynı çekirdeğe kaç arayüzün asılacağı gerçekten bir mimari karardır. Ama bunun cevabı firma büyüklüğü alanında değil, kapsam satırında duruyor.
Bakılacak yer bu yüzden tarifin kapsam satırları. Sonraki üç bölüm o satırları tek tek açıyor. Üçü de kendi teklif formumuzun projeyi anlatan adımında adlandırılan koşullar; üçü de tarifte sessiz kaldığında iki ayrı iş doğuruyor.
”Mevcut sistemimiz var” satırı ne kadarını devralmayı anlatıyor
Devralınacak sistemin kapsamı iş tarifinde yazılmadığında bir teklif sıfırdan yazmayı, öteki kodu önce okuyup yalnız yükü taşıyan yerlere dokunmayı fiyatlar ve ikisi de tarifteki satırı karşılar. Elinde çalışan bir sistem olan alıcı bu satırı çoğu zaman tek cümleyle yazıyor: mevcut sistemimiz var. Cümle sistemin ne kadarının devralınacağını söylemiyor.
İlk okuma sistemi bütünüyle yeniden yazmayı seçiyor. Bu okumayı tarif yasaklamıyor; mevcut sistem var demek, mevcut sistem kalacak demek değil. İkinci okuma önce kodu okumayı, çalışan bölümleri yerinde bırakmayı ve müdahaleyi yükü taşıyan yerlerle sınırlamayı seçiyor. İki teklifte satırın adı aynı, içeriği farklı.
Farkın teklife yansıyan yüzü şu: birinde okuma ayrı bir satır olarak var, ötekinde hiç yok. Sıfırdan yazan teklif okumaya yer ayırmaz, çünkü onun kurgusunda okunacak bir şey yoktur; mevcut kod fiyatlamanın dışında kalır. Devralan teklif ise okumayı işin başına koyar. İki toplam bu yüzden aynı ölçeği anlatmaz.
Teklife bakarak hangi okumanın fiyatlandığını anlamanın tek yolu var: kalem adlarına değil, eski koda ne olacağına bakmak. Eski kodun akıbeti teklifte hiç geçmiyorsa okuma da yoktur; geçiyorsa hangi bölümlerin yerinde kalacağı yazılıdır. Bu tek satır iki teklifi ilk kez aynı ölçekte gösteriyor.
Kodun önce okunduğu, çalışan bölümlerin yerinde bırakıldığı KGM SsangYong kurumsal sitesinde iş ikinci okumayla yürüdü: yalnız sayfaların yavaşladığı noktalara dokunuldu ve site bu hâliyle yayında. Bu yazının o işten aldığı tek yüz bu. Okumanın nasıl yürüdüğü ve devralınan bir sistemin hangi kısıtları getirdiği kendi başına bir konu.
Ayakta duran bir sistemi devralıp iyileştirme işinde ilk sorduğumuz şey de bu satırın hangi okumasının istendiği oluyor. Alıcı çalışan bölümlerin yerinde kalmasını istiyorsa teklif tek bir işi fiyatlar. İstediğini yazmadığında iki ayrı iş fiyatlanabilir ve ikisi de tarife uygundur; ortaya çıkan rakam aralığı da tedarikçilerin tutumundan değil bu sessizlikten gelir.
Sınırı da yazalım. Kaynak kod elinizde değilse ikinci okuma masada yoktur; okunacak bir şey olmadan okuma satırı da oluşmaz. Kodun kimde durduğu ayrı bir sorunun konusu, ama cevabının tarif yazılırken biliniyor olması gerekiyor.
”Bağlantı yokken de kayıt alınsın” cümlesi tarifte yoksa
Saha ekibi olan bir işletmenin tarifi genellikle şunu yazıyor: teknisyen işi bitirince kaydı telefondan girsin. Cümle bağlantı koşulundan hiç söz etmiyor. Bu sessizlikte bir teklif bağlantı bekleyen kayıt formunu, öteki kapsama alanı bittiğinde de kayıt açan uygulamayı fiyatlar.
Bağlantı bekleyen bir kayıt formu verisini doğrudan sunucuya yazar. Ekranda form vardır, arkasında kalıcı bir yerel saklama yoktur; bağlantı yoksa gönderme adımı da yoktur. Kapsama alanı bittiğinde de kayıt açan uygulama ise kaydı önce cihaza yazar ve bağlantı döndüğünde ofise ulaştırır. İkisi ekranda benzer görünür, veri yolu bakımından iki ayrı uygulamadır.
Farkın nerede göründüğü de belli. Teklifte görünmez, sahada görünür. Kazan dairesi kapsama alanının dışındadır, asansör boşluğu kapsama alanının dışındadır. Bağlantı bekleyen formda teknisyen kaydı orada açamaz; dışarı çıkana kadar bekletir ya da akşam ofiste hatırladığı kadarını girer. Ucuz teklifi üreten varsayım kullanımda ortaya çıkıyor.
Kapsama alanının bittiği yerde de kayıt açan saha uygulamasını AlgoKlima’da biz geliştiriyoruz. Teknisyen kaydı bulunduğu yerde açıyor, kayıt bağlantı dönünce ofise ulaşıyor. Kaydın cihazda nasıl beklediği ve bağlantı dönünce hangi sırayla ilerlediği başlı başına bir tasarım konusu. Buradaki mesele o davranışın tarife yazılmadığında hiç fiyatlanmıyor olması.
Bu satırın ikinci yüzü ofis tarafında duruyor. Bağlantı bekleyen kurguda kaydın ne zaman oluştuğu belirsizdir; teknisyenin akşam girdiği kayıt işin yapıldığı saati değil, hatırladığı saati taşır. Kapsama alanı bittiğinde de kayıt açan kurguda kayıt işin yapıldığı yerde oluşur, ofise ulaşması gecikir. İkisi arasındaki fark tarifte tek cümle, kullanımda her gün.
Karşı durum da gerçek. Saha ekibiniz her gün kapsama alanının içinde çalışıyorsa bu satır fark üretmez ve tarife “bağlantı yokken de” yazmak bedeli olan bir istek eklemek olur. Satır bir özellik dayatmıyor; yalnız koşulu adlandırıyor.
”Siteden talep alalım” satırı tek form mu, iki akış mı
Bu satır tarifin en zararsız görünen satırıdır: site zaten yapılacak, forma bir alan eklemek büyük iş değil. Talep tipleri adlandırılmadığında ise bir teklif tek iletişim formunu, öteki keşif randevusu ile servis talebini baştan ayrı taşıyan iki akışı fiyatlar.
Tek form tek kayıt tipi demek. Gelen her talep aynı listeye düşer, aynı alanları taşır, aynı sırada bekler. İki akış ise veri modelinde bir ayrım demek: talep daha oluşurken hangi tip olduğunu üzerinde taşır ve operasyona ayrışmış hâlde ulaşır. Fark formun görünen yüzünde değil, kaydın nereye yazıldığında duruyor.
Bedelin ne zaman ödendiği de belli. Sakin bir haftada tek form yeter; talep seyrek gelir, ofis bakar ve ayırır. Sezon başında iki talep üst üste bindiğinde ayrım elle yapılır ve gelen kaydın keşif randevusu mu servis çağrısı mı olduğu telefonla sorulur. Tek formu fiyatlayan teklif ucuzdur; ucuzluğun karşılığı o telefonlardır.
Keşif randevusu ile servis talebinin baştan iki ayrı akış olduğu Diotek’in sitesinde ayrım veri modelinde kuruldu ve site bu ayrımla yayında. İki talep tipinin neden aynı formdan geçmediği ayrıca yazıldı. Buradaki konu, ayrım tarifte yazılmadığında iki tedarikçinin iki ayrı işi fiyatlıyor olması.
Tersi de mümkün. Siteye tek tip talep geliyorsa tek form doğru okumadır; iki akış fiyatlayan teklif sizin istemediğiniz bir işi fiyatlamıştır ve pahalı olması onu doğru yapmaz.
Üç satır, iki varsayım ve farkı kapatan cümle
İş tarifinin yazmadığı her satırda iki teklifin varsayımı ayrışır ve farkı kapatan şey, o satır için hangi okumanın istendiğini söyleyen tek bir cümledir. Aşağıdaki tablo üç satırı yan yana koyuyor. Satırlar, kendi teklif formumuzun projeyi anlatan adımında adlandırılan koşullardan geliyor.
| İş tarifinde yazılmayan satır | A teklifinin varsayımı | B teklifinin varsayımı | Farkı kapatan tek cümle |
|---|---|---|---|
| Devralınacak sistemin kapsamı | Mevcut site sıfırdan yazılır; devralınan kodda okunacak bir şey yoktur, bütün sistem fiyatlanır | Kod önce okunur ve okuma teklifte ayrı bir satırdır; çalışan bölümler yerinde kalır, müdahale sayfa yükünü taşıyan yerlerle sınırlıdır | ”Ayakta duran sistemi devralın: çalışan bölümler yerinde kalsın, yalnız yükü taşıyan yerler ele alınsın.” |
| Bağlantı yokken alınacak saha kaydı | Kayıt formu bağlantı bekler; teknisyen kapsama alanına çıkınca gönderir | Uygulama kapsama alanı bittiğinde de kayıt açar; kayıt bağlantı dönünce ofise ulaşır | ”Teknisyen kapsama alanının bittiği yerde de kayıt açabilsin; kayıt bağlantı dönünce ofise düşsün.” |
| Ayrı taşınacak talep tipleri | Siteden gelen her talep tek forma düşer; ayrım ofiste telefonla yapılır | Keşif randevusu ile servis talebi baştan iki ayrı akıştır; operasyona ayrışmış ulaşır | ”Keşif randevusu ile servis talebi ayrı akışlardan gelsin; hangisinin ne olduğu telefonla sorulmasın.” |
Son sütun “B doğrudur” demiyor. Her cümle hangi okumanın istendiğini yazıyor; istediğiniz okuma pekâlâ tersi olabilir ve o zaman cümlenin tersini yazarsınız. Belirleyici olan hangi tarafın seçildiği değil, satırın yazılmış olması.
Tablonun ikinci okuması şu: teklife girmeyen satır işten çıkmıyor. Kazan dairesindeki kayıt yine tutuluyor, keşif randevusuyla servis çağrısının ayrımı yine yapılıyor, eski koddaki yük yine bir yerde karşılanıyor. Fiyatlanmadıklarında ortadan kalkmıyorlar; bedelini teklif yerine kullanım ödüyor, çoğu zaman da elle tutulan ikinci bir defter biçiminde.
Tabloyu kendi tarifinizle okumak da mümkün. Üç satırın hangisi sizin işinizde geçiyorsa tarifinizde o satırın karşılığını arayın; yoksa son sütundaki cümleyi kendi koşulunuza göre yazın. Üç satırın hiçbiri sizin işinizde geçmiyorsa tarifiniz büyük ihtimalle başka bir yerde susuyor ve aynı yöntem orada da işliyor: açık kalan kararı adlandırın, hangi okumayı istediğinizi yazın.
Üç satırın ortak yanı da bu. Devralma satırı kodun nereye dokunulacağını, bağlantı satırı kaydın önce nereye yazılacağını, talep tipi satırı veri modelinin kaç kayıt tipi taşıyacağını belirliyor. Üçü de fiyattan önce verilen kararlar. Teklife rakam olarak yansımaları sonradan geliyor; rakam yansıdığında kararın kim tarafından verildiği artık okunmuyor.
Varsayım listesini tedarikçiden isteyin
Aynı iş tarifini alan her tedarikçiden neyi varsaydığını listelemesi istendiğinde, listede olmayan satır fiyat farkının adresidir. Hamle iki adımlı. Önce tablonun son sütunundaki cümleleri kendi işinize göre yazıp tarifinize koyarsınız. Sonra aynı tarifi tedarikçilerin hepsine gönderir ve her birinden tek bir şey istersiniz: teklifini verirken neyi varsaydığını yazsın.
İstek tek. Uzun bir soru listesi ya da teknik şartname göndermiyorsunuz; tedarikçinin kendi okumasını görünür kılan tek bir talep yeterli. Bunu yaptığınızda teklifin yanında bir de karar belgesi oluşuyor ve iki teklif ilk kez aynı düzlemde karşılaştırılabiliyor. Listede olmayan satır da kendini gösteriyor: o satır, tedarikçinin söylemeden fiyatladığı satırdır.
Hamlenin ikinci getirisi, en düşük teklifi refleksle elemek zorunda kalmamak. Düşük teklif bir şeyi atlamış olabilir, ama daha dar bir okumayı fiyatlamış da olabilir ve o dar okuma tam istediğiniz iş çıkabilir. Varsayım listesi geldiğinde bu ayrım rakamdan değil listeden okunuyor. Tedarikçi liste vermezse de bir cevap almış oluyorsunuz; o teklifin satırı boş kalır.
Kendi formumuz aynı sırayı izliyor. Üç koşul projeyi anlattığınız adımın alt başlığında adlandırılıyor, kapsamı serbestçe yazdığınız açıklama kutusu onu takip ediyor, bütçe aralığı alanı bu kutudan sonra geliyor. Gönderilen talep bir referans numarasıyla kayda geçiyor: “Referans numarası bu kaydın adı; ikinci kez anlatmanız gerekmiyor.”
Tarifinizde açık kalan satırlar aslında koddan önce verilmesi gereken kararlardır: kayıt neye bağlanacak, hangi okuma nereden gelecek, tek çekirdeğe kaç arayüz asılacak. Bu kararların nerede verildiğini sistem mimarisi tarafında okuyabilirsiniz.