Teknik Liderlik
Nedir teknik liderlik, neler yapar, nelerden sorumludur, nelere dikkat etmesi gerekir, zorlukları nelerdir, kişiye ve takıma avantajları dezavantajları nelerdir gibi konulardan bahsetmek istiyorum.
Öncelikle kabaca nasıl bir teknik liderden bahsedeceğimizi tanımlamak faydalı olacaktır çünkü benzer rolde ancak çok farklı pratiklerle/sorumluluklarla çalışanlar mevcut. Benim bahsedeceğim daha doğrusu olmasını istediğim teknik lider: Bir geliştirme takımından sorumlu lider ve zamanının en az üçte birini takım ile beraber kod yazarak geçiren kişidir.
Teknik liderliğe geçiş geliştirme takımının içindeki birisinin bu pozisyona geçmesine duyulan ihtiyaç ile olur. Bu geçişi tetikleyen ihtiyaç; takımın büyümesi(onshore veya Türkiye’de çok yaygın olmasa da offshore) ve kendi içinde teknik anlamda seknronizasyonu sağlayacak birisine ihtiyaç duyması, büyüyen takımın dış dünyaya karşı bir temsilciye ihtiyaç duyması, takımın sosyal/bireysel anlamda kendileri ile ilgilenecek birisine ihtiyaç duyması şeklinde sıralanabilir. Bu kapsamda teknik lider’in sorumluluklarını üç farklı kategoride değerlendirebiliriz: Teknoloji, insan ve paydaşlar.
Teknoloji anlamında teknik lider projenin ve takımın teknik/mimari vizyonundan sorumludur. Dolayısı ile ortada teknik bir vizyon olması gerekir. Bu sorumluluk teknik liderin takımdaki teknik olarak en yetkin, en derin bilgi sahibi kişi olduğu veya olması gerektiği anlamına gelmemeli, diğer sorumluluklara da değinince zaten bunun çok mümkün bir şey olmadığı anlaşılacak. En azından kişinin teknik liderlik sürecinin başında öyle ise bile sürecin devamında veya devam edebilmesi için öyle olmaması gerekir. Teknik lider projenin büyük resmine ve somut amaçlarına(müşteri beklentileri) hakim olmalı, projenin sınırlarını bilmeli, takımın teknik olarak yaptığı işleri, aldığı kararları da bu anlamda değerlendirmeli, takımı yönlendirmeli ve takımı projenin sınırlarının içinde tutmalıdır. Takımda ortak bir bakış açısı ve amacın oluşmasını ve bunun korunmasını sağlamalıdır.
Olumsuz bir teknik lider tanımını şöyle yapabiliriz: Projedeki önemli teknik kararları alır, onun onayı olmadan takım teknik olarak bir şeye karar veremez, yapamaz, takım ile beraber kod yazmaz, hatta hiç kod yazmaz, en son on yıl önce yazmıştır. Böyle bir teknik lider bariz bir şekilde yetkili ama sorumlu değildir, onun aldığı kararların olumsuz etkileri hep takıma yansır. Kendi yapamadığın bir şey hakkında sürekli karar veriyor olmak…Söylediğimi yap, yaptığımı değil…Bir takımın, fildişi kulede oturan bu mimara veya teknik lidere ihtiyacı yok(The Ivory Tower Architect, Architecture Astronaut)!
Teknik lider kod yazmadığı zaman hem takımın saygısını kaybeder hem de realiteden uzaklaşır, verdiği kararlar anlamsızlaşır. Dolayısı ile teknik lider her zaman işin içinde olmalı, ellerini kirletebilmeli yani kod yazabilmelidir ve sürekli olarak, kısa süreli de olsa kod yazmalıdır. Burada diğer işlerinden dolayı kendine bağımlılık oluşturmamak için teknik lider daha önemsiz tasklar üzerinde çalışabilir veya daha iyisi pair olarak kod yazabilir, böylece o olmadığında diğer pair kodu devam ettirebilir. Burada olumsuz bir örnek, tam zamanlı kod yazan teknik liderlerdir. Teknik liderin tek sorumluluğu teknik olmadığı için bu tarz çalışma şekli yönetilebilir değildir, işin insan ve paydaş ilişkileri boyutunu ıskalarsınız ve bir darboğaz olmaktan öteye gidemezsiniz.
Teknik lider proje planlanması ve takip edilmesi konusunda da rol alabilir. Burada user story’lerin çıkarılması/yönetilmesi, release planları, sprint planları, izleme/raporlama gibi konularda bilgi sahibi olmalıdır. Proje planlama/takip/yönetim kapsamındaki bazı işlerden teknik lider doğrudan sorumlu olabileceği gibi bazılarında da proje yöneticisi, analist gibi rollere destek olur.
Bir takımda developer iken teknik lider olmanın size getireceği temel avantajlardan birisi problemlerin çözümünde yeni şeyler deneme imkanını size bir miktar veriyor olmasıdır. Kafanızdaki çözümleri, teknik olarak yapmak istediğiniz şeyleri hayata geçirmek için artık biraz daha özgürsünüzdür. Tabii burada çok farklı parametreler olabilir, teknik lider’in fil dişi kule’de yaşayan mimar tarzında bir yöneticisi var ise işi biraz daha zor olabilir.
Teknoloji kısmını, büyük resim, teknik vizyon, kod yazmak şeklinde özetleyebilirim.
İşin insan boyutu belki de en zor olanı. Bir developer iken daha çok bilgisayar ile muhattapsınız, çalışırken karşılaştığınız problemlerin çoğunu bilgisayar üzerinden çözüyorsunuz, daha çok sadece kendi yaptığınız işe odaklısınız, dışarıya çok açık değilsiniz olmanız da gerekmiyor. Teknik liderliğe ilk geçişte, insan ilişkileri konusunda extreme yetenekleriniz yok ise, bu bilgisayar ile sorunları çözme konusunun gerçekten büyük bir mutluluk olduğunu anlayabilirsiniz. Çünkü artık siz takımdaki insanlardan da sorumlusunuz, onların her türlü sorunu, iş ile ilgili olsun veya olmasın, artık sizin de sorununuzdur. Ve insanların sorunları bilgisayarlar gibi ikili bir sistemde çözülmüyor, siyah/beyaz değil gri alanlar var, deterministik değil ve çok daha karmaşık. Teknik liderlik rolü muhtemelen beklediğinizden daha çok insan’a dönük bir rol olacaktır. İnsanlar ile yakından ilgilenmeyi istemiyorsanız veya bunu önemli görmüyorsanız muhtemelen teknik liderlik rolü size göre değil. Takım arkadaşlarınızla çalışırken onları öncelikle insan olarak görmüyorsanız zaten kaybetmişsiniz demektir.
Bir kaç tane insanın bir araya gelmesi bir takımı oluşturmaz, bu sadece bir grubu oluşturur, takım ortak bir amaç için çalışan insanlardan oluşur, etkili bir lider de bu ortak amaca doğru gitmek için takımdaki insanları senkronize/orkestre(align) eden kişidir.
Teknik liderin takımdaki insanların özelliklerinin farkında olması çok önemli. Söylediğiniz bir şeyi herkes farklı anlayabilir, herkesin daha iyi anladığı bir yöntem olabilir, kimisi sözlü, kimisi yazılı, kimisi görsel. Sizin de buna paralel olarak takımdaki insanların bu farklılıklarının farkında olup yanlış anlaşılmaların önüne geçmek için doğru iletişim yöntemlerini kullanmanız gerekir. Takımdaki herkes farklı bir konuda güçlü olabilir teknik liderin bu güçleri doğru şekilde yönlendirebilmesi gerekir.
Teknik lider olarak sizin takımdaki insanlara ilişkin temel sorumluluğuz aslında onların hem teknik hem de teknik olmayan konulardaki yetkinliklerinin seviyesini yukarıya çekmek. Bunun için de işbirliği, kolaylaştırıcılık, liderlik, yol göstericilik, mentorluk/danışmanlık/koçluk gibi kavramlar ön plana çıkıyor. Bir nevi onları yetiştirmelisiniz, kabuklarını kırmaları için desteklemelisiniz, cesaretlendirmelisiniz. Takımınızda en iyilerin olması için işe alım süreçlerinden başlamak üzere her seviyede takım ile bire bir ilgilenmeniz gerekiyor. Her zaman bir kulağınız takımda olmalı, olan bitenleri, insanların davranışlarını, konuşmalarını gözlemlemelisiniz. Geri bildirim konusuna önem vermelisiniz, insanları sık sık fikirleriniz ile beslemelisiniz, övgülerinizi esirgemeden herkesin içinde yapmalısınız. Ne kadar yetkin bir takımınız var ise karmaşık problemlerin üstesinden gelmek de o kadar kolay olacaktır, sizin eliniz o kadar rahatlayacaktır. Kararlarınızı ne kadar ortak verebiliyorsanız o kadar işi sahiplenen takımınız olur, sizi takımda bir darboğaz olmaktan kurtarır(siz yoksunuz takımda karar verilemiyor durumu). Sizi teknik lider yapan faktörlerden birisi zeki olmanız olabilir ancak bu her zaman sizin fikirlerinizin doğru olduğu anlamına gelmez. Dolayısı ile takım ile bir çözüm üzerinde tartışırken herkesin bir birini nazik bir şekilde dinlediğinden ve tüm alternatiflerin değerlendirildiğinden emin olunmalı. Burada delegasyon kavramı da ön plana çıkan diğer bir faktör, tek temas noktası olmaktan ne kadar kaçınırsanız, işlerin farklı kişilere delegasyonunu ne kadar başarılı yaparsanız ortak karar alma süreciniz de o kadar sağlıklı olacaktır ve bu sizin çok daha doğru konulara odaklanmanıza olanak sağlayacaktır. Her şeye yetemezsiniz, her şeyi kontrolünüz altında tutma takıntınız var ise bundan kurtulmalısınız. Bir teknik liderin veya mimarın değeri verdiği kararların sayısı ile ters orantılıdır diye düşünebiliriz.
Takımın gelişebilmesi için öğrenmenin çok aktif bir şekilde takım içinde benimsenmesi gerekir. Başarısızlıklar da öğrenme sürecinin doğal bir parçasıdır, dolayısı ile teknik lider takımda başarısızlıkların oluşmasına da izin vermelidir, insanlar hata yapmaktan korkmamalıdır, çünkü doğruya giden yol çoğu zaman ilk deneme; başarı, değildir, birinci deneme; başarısız, ikinci deneme; başarısız, üçüncü deneme; başarılı, şeklindedir. Ama siz başarısızlıklara izin vermezseniz o üçüncü denemeye hiçbir zaman ulaşamazsınız. Başarısızlıklar için emniyetli bir ortamın da olması gerekir ki insanlar korkmadan bir şeyler yapabilsin, deneyebilsin. Bunun için belki çalışırken eğlenebilmek, yaptığı işten zevk alabilmek gibi konular üzerinde kafa yormak gerekiyor. İletişim tarzını şiddet içermeyen, aşırı ciddiyet içermeyen bir seviyede korumak önemli. İnsanlar çekinmemeli, sizden de, bir fikrini beyan etmekten de. Takım arkadaşlarınız acaba söyleceğim şey çok mu saçma olur en iyisi söylemeyeyim gibi düşüncelere sahip olmamalı.
Bu kısmı insan odaklı olmak(insanlar önce, müşteri sonra), liderlik, kolaylaştırıcılık, delegasyon, iş birliği, saygı, tek takım ortak amaç şeklinde özetleyebilirim.
Paydaş ilişkilerindeki paydaşlardan kastım teknik olmayan paydaşlar, bunlar kendi firmanızdaki yöneticiler olabilir, müşteri olabilir. Teknik olmayan paydaş ilişkilerinde en temel nokta güven.
Yazılımın kalitesine çok fazla odaklanıp müşteri için değer teslim etmeyi çok umursamazsanız bu güven sarsılır. Biran önce değer teslim edeceğiz diye yazılımın kalitesini(yazılımda kalite nedir sorusuna da başka bir yazıda cevap aramaya çalışacağım) umursamaz iseniz de yaşanacak olan iç kalite sorunları hızlıca müşteriye dokunan dış kalite sorunlarına dönüşecektir ve güven yine sarsılacaktır. O yüzden teknik liderin bu dengeyi sağlaması, teknik borçları iyi takip edip iyi yönetebilmesi çok önemli. Teknik olmayan paydaşlar ile bu güven ilişkisinin tesis edilmesi zaman alacaktır, teknik liderin takıma ve teknik olmayan bu paydaşlara ayıracağı zamanı iyi ayarlaması gerekir. Teknik olmayan paydaşlar ile geçirilecek zaman, teknik liderin onlar için gerçekten önemli olan konuları daha iyi anlamasına olanak sağlayacaktır. Bu bilgiyle takımın kendisine dönük; istediği teknoloji kullanabilme, üst seviyelerde birim test kapsamı gibi konular ile son kullanıcıların sistemden beklentileri dengelenebilecektir.
Teknik lider zorlayıcı paydaşlar ile de uğraşmak durumunda kalabilir. Mesela bir kurumdaki transformasyon projesinde eski sistemde calışan bir paydaş bu sistemin değişmemesini, kendi işine bir tehdit olarak gördüğü için, isteyebilir. Ve yeni proje için zorluklar çıkarabilir. Bu tip durumlarda teknik liderin tek başına çözemeyeği daha üst seviyelerde çözülmesi gereken durumlar olabilir, önemli olan duygulara hakim olarak profesyonel davranabilmektir.
Teknik olmayan paydaşlar ile ilişkilerde anahtar kavramları güven ve denge olarak söyleyebiliriz.
Yazılım zanaatkarlığı(Software Craftsmanship) hareketinin arkasındaki temel fikirlerden birisi de, her bir bireyin kendi kariyerinden, yetişmesinden sorumlu olmasıdır, işvereniniz, lideriniz, yöneticiniz değil, kariyerinizden siz sorumlusunuz. Dolayısı ile bir teknik liderin sorumluluklarını sağlıklı bir şekilde yerine getirebilmesi için kendisine yatırım yapacak zaman ayırması çok önemli. Her türlü okuma, konferanslara/seminerlere konuşmacı/dinleyici olarak katılma, kullanıcı gruplarına dahil olma, bu kapsamda faaliyetler olarak düşünülebilir. Teknik liderin sadece kendisini değil etrafındaki insanları da geliştirmek gibi bir sorumluluğu olduğu için kendini geliştirme faaliyetlerine de bu gözle bakması gerekir. Mesela sadece kendisi için okumak ile anlatmak, paylaşmak için okumak arasında fark var.
İş yerindeki zamanın dışında da sağlıklı bir iş/hayat dengesine sahip olmanız önemlidir. Boş zamanlarınızda iş ile ilgili konulardan psikolojik olarak kopabilmeniz gerekir. İş, duygusal olarak sizi etkileyen temel faktör olursa, hayatınızdaki genel başarıyı duygusal olarak iş yerindeki bir projenin teslimatına bağlamak gibi saçma bir duruma düşebilirsiniz. Stres, uzun saatler çalışmak sizi işinizde daha etkisiz yapacaktır, ve bu takımınız için de kötü bir örnek olacaktır. Kendi güçlü ve zayıf yönlerinizin farkında olmanız ve davranışlarınızda, kendinize yapacağınız yatırımlarda bunu gözetmeniz gerekir.
Teknik liderlik rolüyle sizi zorlayacak bir diğer faktör de sık sık konudan konuya(context switching) geçiş yapmanız gerekeceğidir. Sık sık bölüneceksiniz, gün içinde çok farklı konular ile uğraşmak durumunda kalacaksınız. Bunlar için de kendinize iyi bir zaman yönetimi stratejisi geliştirmeniz gerekecektir. Zamanınızı nasıl yöneteceğinizi belirlemelisiniz. Task listeleri, kod yazma zamanları, mailleri okuma zamanları, toplantı katılımları vs. gibi konulara gününüzü nasıl böleceğinizi bilmelisiniz.
Takımınızın ve kendinizin neler yaptığını da mümkün olduğunca dışarıya(yöneticiniz,üst yönetim, paydaşlar) görünür kılmak size farklı seviyelerde fayda sağlayacaktır. Bazen gerçekten çok güzel şeyler başarsanız dahi bunlar görünür olmadığında size farklı yansımalar olabiliyor ve bunlar sizin ve takımınızın moral ve motivasyonunu etkileyebiliyor. Burada teknik liderin politik, pazarlamacı vs. gibi biraz daha farklı bir bakış açısına da sahip olması gerekiyor, yaptığı işleri küçümsememesi gerekiyor. Tabii bir yapıp beş yapmış gibi anlatan insanlar ile de karşılaşacaksınız. Bu tip insanlara karşı da teknik liderin biraz profesyonel sinirlere sahip olması gerekir.
Referans
[1] Patrick Kua, Talking with Tech Leads