PM, kimsenin [kapalı] ile deneyimlemediği, aşırı karmaşık bir kurulumu seçti


51

Kısa süre önce, yapmak zor görünmeyen bir projeye başladım, konsept, şimdi ve sonrasında (belki de günde 10x) girdi kabul etmek ve bunlarla ilgili bazı işlemler yapmak ve tüm sonuçları toplamaya çalışmak için oldukça basit bir uygulama oldu. sonunda. Bu uygulama daha sonra tam olarak roket bilimi değil, müşterilerin sonuçları görüntülemek için kullanabileceği bir ön uç web portalı alacaktı.

Bunun için başlangıçta Python'un yerleşik eşzamanlılık kitaplıklarını ( ThreadPoolExecutor) akıllıca kullandım ve ön uç için kullanımı kolay bir kitaplık kullandım (Flask'ı yeni başlayanlar için kolay ve bakımı kolay ve test etmek için kolay olduğu için seçtim).


Projenin yarısında bulunduktan sonra, Başbakan, iş parçacığı yerine üçüncü taraf mesaj kuyruğu yeteneklerini kullanmak zorunda kaldığımızı ve yük dengelemesi yapmak zorunda kaldığımızı, sonunda sonuçta Celery, Redis, RabbitMQ, Nginx, uWSGI ile çalışmaya başladığımızı belirtti. ve hiç kimsenin deneyimlemediği bir sürü üçüncü şahıs hizmetleri.

Sonunda bu, bir grup spagetti koduna, denenemeyen görevlere (üçüncü parti kütüphanelerin karmaşıklığı nedeniyle, kodu yamalamadı bile işe yaramadı) ve bir sürü baş ağrısına yol açtı; çünkü kimse bu hizmetlerin katma değerinin ne olduğunu bilmiyordu. .


"Evet, bu hizmetleri kullanmalısın" demeden önce, hiç kimsenin bunları nasıl kullanacağını bilmediğini ya da hatta yarış koşullarını saran kodları eklemenin dışında ne yaptığını bilmediğini unutmayın .

Bu konuda ne yapmalıyım? Bu noktada, sahip olduğumuz şeye geri dönmek çok pahalıya mal olacak ve Başbakan bu hizmetleri kullanmaya kararsız kaldı, ancak son ürün başlangıçta olduğundan daha kötü. Bunu onunla tartışmanın bir faydası var mı? Daha fazla zaman ister miyim? Yoksa sert cevap, işim için fazla aptal mıyım?


12
Eşzamanlılık sizin için hangi sorunu çözer? Bu sistemi kim kullanacak? Hangi iş değerini gerçekleştirir? Ele alınması gereken önemli ölçeklenebilirlik sorunları var mı? Bir geliştirici olarak, bu araçlara ve kütüphanelere neden ihtiyaç duyulduğuna bakmalısınız . O zaman, bu araçların nasıl yardımcı olacağını hiç anlamaya başlayabilirsiniz.
RibaldEddie

7
Verimsiz bir PM ile çalışıyorsunuz. Ya kalabilirsin ya da gidebilirsin. Muhtemelen, aynı Başbakanlık aynı PM altındaki diğer projelerle gerçekleşecek.
Frank Hileman

80
Neden bir Başbakan teknik kararlar veriyor ?! Bu, gerçekten kokusunu aldığımda gerçek bir proje kokusudur.
RubberDuck

13
Bu bir çocuğa motorlu testere alıp dışarı çıkmaları ve kesilecek bir ağaç bulmaları için zorlamak gibidir, bu yüzden para kaybı olmazdı.
JeffO

28
Bu projeye benzeyen, bir çözüm mimarı gibi davranan bir proje yöneticisine histerik bir şekilde gülmekten korkmayan güçlü bir teknik kurşuna ihtiyaç duyuyor. Gerçekten sadece başınızı onaylayarak başını sallamalısınız ve sonra yine de mantıklı çözümü oluşturmalısınız. Evet. Bu benimle uçmazdı.
Greg Burghardt,

Yanıtlar:


89

Projenin yarısını geçtikten sonra, PY iş parçacığı yerine üçüncü taraf mesaj kuyruğu yeteneklerini kullanmak zorunda kaldığımızı ve yük dengeleme yapmamız gerektiğini belirtti.

Bu, bir Başbakan'ın tek taraflı olarak “devlet” etmesi için uygun bir şey değil. İki sebep:

  1. Tasarım kararları teknik bir kaynak tarafından ve yalnızca UFK'lara cevap olarak verilmelidir . Öyleyse, nezaketle yeni bir NFR olup olmadığını ve lütfen detaylarını öğrenip öğrenemeyeceğini sor.

  2. Eğer bir NFR projenin yarısı boyunca tanıtılıyorsa, muhtemelen bir değişim kontrolü ile yapılmalıdır . Değişim kontrolü, yönetişim perspektifinden çok önemlidir; bu sadece sizin ihtiyaçlarınız için bir girdi değil, aynı zamanda KG'nin test durumları, operasyonların konuşlandırılması ve destek el kitabının ve (burada gerçekten önemli olan kısmı) Başbakan programının önemli bir girdisidir . Yeni gereksinim daha fazla çalışma getirdiğinde, geliştirme ekibi yeni gelişme tahminlerini iletme fırsatına sahip olmalı ve Başbakan, yeni tarihle yaşayabilecekleri, daha fazla kaynak ekleyebilecekleri veya teklif veren paydaşları geri çekebileceklerine karar vermek zorunda kalacak. NFR.

Şimdi eğer gerçekten iyi niyetli bir NFR varsa ve bu konuda bir sorun yok ise, piyasaya sürülen teknolojilere aşina olan yeni veya farklı kaynaklar istemek veya mevcut bazılarınız için bir eğitim bütçesi istemek de uygun olabilir. kaynaklar. Bu yüzden de bir maliyet yönü var .

Başbakan'ın dilini konuşursanız - zamanlama ve maliyet - geliştiricilerin ortaya çıkan tasarım hakkında nasıl hissettiği hakkında konuşmaktan daha fazla etkileneceğini düşünüyorum. Bu şeylerin gerçek etkisi var.

Bir Başbakan, yönetişimsiz, kontrolsüz ve fikir birliği olmadan, böyle şeyleri tanıtmaktan daha iyisini bilmelidir. Sadece bulamazlarsa, kalite ve programlamayı gereksiz yere riske attığı için ürün yönetimi veya program yönetimine tırmanmanız gerekebilir.


21
Tamam, cevap bu. Bir proje yöneticisi asla bu tür kararlar vermemelidir. Para? Zaman? Proje yönetimi bunu gerçekleştirir. RabbitMQ? Bir şans değil.
Greg Burghardt,

Bu cevabı çok beğendim. Sadece sana bir şey bırakmadığından emin olmak için kontroller var. Onunla otur ve bunun hakkında konuş.
Rhys Johns

3
Ancak bir şey, bazen berbatken yeni bir teknoloji veya kütüphane öğrenmek zorunda kalabileceğinizdir. Zaman alacak mı, evet, ama buna değebilir.
Rhys Johns

5
Bir proje yöneticisi olarak, bu cevaba daha fazla katılamadım.
James McLeod

13
Küçük organizasyonlarda "Proje Yöneticisi" genellikle patrondur. Sahibinin \ CEO'sunun kulağına sahip olabilirler ve etkili bir şekilde Teknik Lider Geliştirici veya Mimar ya da bazı ungodly kombinasyonları olabilirler. Bu durumda, borçlarının kapsamı açık değildir.
Kızak

31

Aptalca şey, ölümün yürümesine izin vermek .

Açıkladığınız şey, kritik hissinizi kaybetmiş olmanız. Kontrol hissi yoktur ve geri dönüş yolu yoktur.

Yapmanız gereken son şey çok çalışmak, başınızı eğmek ve sonunda projenin mahkum olduğunu kabul edene kadar sessizce acı çekmek.

Yapmanız gereken şey, beklediğiniz her hakka sahip olduğunuz hakkında çok fazla düşünmektir.

Eğer anlamadığınız teknolojileri kullanmanızı istiyorlarsa, onları öğrenmek için zaman beklemelisiniz. Bilmediklerinden utanma. Cehaletinizi bir sukel olarak kullanın. Talep ettikleri zaman bir şey kullanmanı istiyorsan nedenini sor. Kabul etme, çünkü. 'Modern en iyi uygulamaları' kabul etmeyin. Gerçek, test edilebilir, beklentileriniz olmadan 'ölçek yeteneğini' kabul etmeyin.

Test edilebilir olarak, günde / saat / dakikada kaç istek yapmasını istediklerini size söylemelerini istiyorum. Bu sistemi bu özelliklere göre uygulamak için bir şeyler inşa etme niyetinde olduğunuzdan emin olun.

Bu şekilde, istedikleri en son wiz patlama şeyinin buna değdiğini ya da zaten bildiklerinize yapışmanın daha iyi olup olmadığını kanıtlamak için 30 günlük ücretsiz bir deneme kullanabilirsiniz.

Şimdi aklında tut. Irk koşulu veba kodu içeren araçlar değil. Siz bunu yaptınız. Bunu NASIL yaptığınızı öğrenmeniz gerekir, böylece bunu geri alabilirsiniz.

Ve hayır. Sahip olduklarına geri dönmek çok pahalı değil. Başbakan sadece talep ederek istediklerini elde edemez. Başbakan'ın istediğini etkili bir şekilde kullanana ya da projenin ihtiyaç duymadığını kanıtlayana kadar geri itmek zorundasın.

Cidden, sadece buna teslim olmak profesyonelce ve projeye ölümcül.

Ben burada oldum adamım. Bir kereden fazla. Kendini aptal gibi hissettiriyor. Bu gerçekten değil. Sadece kayboldun.

Başbakan ile konuş. Dürüst. Hepsini yatır. Öğrenmeye istekli olduğunuzu, ancak gezintiye çıkmak istemediğinizi gösterin. Asla asla asla inanca dayalı tasarım veya kod yapmayın. Başbakan size istediklerini nasıl yapacaklarını göstersin. Yapmadığın zaman anlıyormuş gibi yapma. Yapmayacağı zaman biteceğini söyleme. Bir şeye inanacaksan kendine inan. HAYIR demeye istekli olmalısın.

Bu işe yaramazsa, özgeçmişinizi cilalayın çünkü yakında ihtiyacınız olacak. Öyle ya da böyle.


7
Now keep in mind. It isn't the tools that introduced race-condition plagued code. You guys did that. You need to learn HOW you did that so you can undo that.Evet, bu kısım özellikle bana yapışıyor. Kereviz veya iplik olsun, her türlü eşzamanlılık yarış koşullarına neden olabilir. Aynı sorun, iş parçacığı temelli kodda da mevcut olabilir.
Izkata

10

Bu gerçekten workplace.stackexchange.com adresinde olmalı, çünkü sorun gerçekten bir yazılım geliştirme sorusu değil iş yeri ilişkileri hakkında.

Basit yaklaşımınızın çok hızlı bir şekilde çalışıp sonuç olarak işe yarayacağından eminseniz, Başbakanınız şirketinizde kaldırılması gereken yıkıcı bir güçtür. Haberin üstündeki seviyeye nasıl ulaşılacağına karar verin: Ekibinizin basit bir çalışma çözümü olduğunu ve iyi bir ilerleme kaydettiğini ve hiç kimsenin Başbakanınızı açıklayamadığı nedenlerden dolayı çok sayıda karmaşık bir çözümü denemeye zorladı. hiç kimsenin bilmediği, kimsenin anlamadığı, hiç kimsenin yararlı olup olmadığını bilemediği araçların listesi ve Başbakanınızın kabul edilemez kararları size bütün sıkıntılara neden oldu ve projenin geç kalmasına ve çalışmamasına neden oldu.


1

Yönetiminiz tarafından takip edilen bağlamı ve ürün stratejisini bilmemek, sorunuzu objektif olarak cevaplamak zordur.

İşte bazı objektif argümanlar. Ancak, beklediğiniz gibi olmaması mümkün:

  • " Henüz kimsenin bu ürünleri nasıl kullanacağını bilmediğini unutmayın ".
  • Yalnızca mükemmel şekilde bilinen araç ve teknikleri kullanmak, yüksek verimlilik sağlayacaktır. Ancak, yenilikçilik yeteneğini önemli ölçüde kısıtlayacaktır. Bazı pazarlarda, ürününüz için ölümcül olabilir. Örneğin, neredeyse 30 yıl önce, MS-DOS altında başarılı bir CAD ürününün yeni bir sürümünü geliştirmek için windows 3.0 kullanmayı önerdim. Ürün müdürü bunun kanıtlanmış bir ortam olmadığını, ekip için öğrenmenin çok karmaşık ve zor olacağını ve yine de " Windows asla ana akım bir ortam olmayacağını " itiraz etti . Ürünü 2 yıl sonra.
  • Hepsi maliyet ve fayda meselesi. Denemenin maliyeti - büyük kurulumlar ve ağır iş yükü ile deneyimli üçüncü bir tarafça sağlanan ölçeklenebilirlik ve konuşlandırılabilirliğin faydası.
  • Yeni bir teknoloji eklemenin sakıncaları, uygun bir eğitim ile ya da deneyimli bir danışman tarafından ilk destek / koçluk ile yumuşatılabilir.

Sonuç olarak, ekonomik seçim ürün yöneticinizin sorumluluğundadır. İyi bilgilendirilmiş bir karar vermesini ve ek karmaşıklığı hafife almamasını sağlamak için, artılarını ve eksilerini tartışın. Ve yolunda kalırsa, elinizden gelenin en iyisini yapmaya çalışın: kaybedecek bir şeyiniz yok ve en kötü durumda, CV'nizde yeni bir teknolojiye sahip olacaksınız.


1

Üçüncü taraf kütüphanelere (ve diğer bileşenlere) iki yaklaşım vardır:

  1. Mümkün olduğunca çoğunu kullanın
  2. Mümkün olduğunca az kullanın

Benim yaklaşımım (2). Yaklaşımınız da öyle (2) gibi görünüyor, ancak proje yöneticisi yaklaşımı (1) seviyor.

Bu durumla başa çıkmanın üç yolu vardır. Ya Başbakan'ın istediği şeyi yapmasına izin verirsiniz, ya da Başbakanı üçüncü taraf kütüphanelere yaklaşımı değiştirmeye ikna etmeye çalışırsınız ya da ayaklarınızla oy verir ve başka bir iş seçersiniz.

Başbakanı yaklaşımı değiştirmeye ikna etmek istiyorsanız, şu argümanları dikkate alın:

  • Öğrenme zamanı. Her harici kütüphane öğrenmek için zamana ihtiyaç duyar, bu süre içinde yetkin bir programcı özellikle birkaç yüzlerce kod satırında yapılabilecek çok basit bir şey yapmak için büyük bir kütüphane seçildiyse istenen işlevselliği yazabilir.
  • Değiştirebilirlik.Harici bir kütüphaneniz varsa, gelişimi durduğunda başka bir kütüphaneyle değiştirebileceğinizden nasıl emin olabilirsiniz? Benim çözümüm ne zaman yapabilirsem dış kütüphanelerden kaçınmak ve mümkün olduğunda ne zaman istediğim programlama arayüzünün bir kısmını soyutlamak için basit bir paketleyici yazmaktayım. Genellikle istediğim arayüz kütüphanenin sunduğu arayüzden çok daha basittir. Sonra kodum harici kütüphaneye yalnızca bu paketleyiciden erişerek değiştirmeleri kolaylaştırır. Uygulamanızı bir çerçevede inşa etmek büyük bir hayır-hayır. Servlet? Evet, uzun süredir buradalar ve öngörülebilir gelecek için burada olmaya devam ediyorlar. Şablon motorları? Evet, tam olarak değiştirilemese de (genellikle birini seçip onunla kalıyorsun), getirdikleri değer çok büyük, bu nedenle dikkatli bir şekilde seçin - ve şablon motorlarını değiştirirken, aynı uygulamada iki şablon motoruna sahip olabileceğinizi ancak aynı uygulamada genellikle iki çerçeveye sahip olamayacağınızı unutmayın. Apache Struts? Hayır, çerçeveler modaya çabucak gelir ve modadan çıkar ve aynı uygulamada genellikle iki çerçeveye sahip olamazsınız.
  • Sürüm cehennemi. Harici bir kütüphane seçerek, güvenlik açıklarını önlemek için güncellemelisiniz ve güncellemek işleri bozabilir. İyi tasarlanmış bileşenler (Java JRE gibi) farklı sürümlerle uyumludur, ancak benim deneyimim çoğu kütüphanenin büyük sürüm cehennemi getirdiği için berbat olduğudur. Ayrıca, X bileşeni Z sürüm 1'i gerektirebilir ve Y bileşeni Z sürüm 2'yi gerektirebilir ve aynı uygulamada Z sürüm 1 ve Z sürüm 2'yi bağlamanız mümkün olmayabilir.
  • Güvenlik açıkları. Harici bir kütüphane seçerek, uygulamanıza karşı kolayca yararlanılabilecek güvenlik açıkları artar. Bazıları şirket içi geliştirilen kodun gizlilik yoluyla güvenliğe benzediğini iddia edebilir, ancak daha sonra yine de bir güvenlik şekli olduğunu söyleyebilirim.
  • Lisans sorunları. Her harici kütüphane, programınızın bölümlerine kendi lisansını getirir. Örneğin, GPL kitaplıkları GPL olmayan programlarda kullanılamaz ve LGPL kitaplıkları kaynak kodunun ikili kodlarla birlikte dağıtılmasını gerektirir, bu da büyük miktarda bant genişliği alabilir.
  • Uygulama başlangıç ​​zamanı Her büyük harici kütüphane uygulamanızın başlangıç ​​zamanını yavaşlatır. Basit, yalın bir kütüphaneyi şirket içinde yazarak, uygulamanızın başlangıç ​​zamanını daha hızlı hale getirebilirsiniz.
  • Hafıza alanı B gerektiren Y gerektiren Z gerektiren A'ya sahip olmak için, aynı anda bellekte X + Y + Z + A + B'ye ihtiyacınız vardır. Sadece X'in eşdeğerini uygulayarak, hadi X 'diyelim-içi, hafızada sadece X' e ihtiyacınız var. Ve genellikle X 'in hafıza alanı X'in hafıza alanından daha azdır.
  • Böcek riski. Dış bileşende ne kadar fazla satır varsa, anlamanız gereken büyük miktarda kod nedeniyle düzeltilmesi zor olan bir hatayla karşılaşmanız riski de o kadar yüksek olur. Şirket içi bir şey yaparsanız, genellikle daha az kod satırı (sadece ihtiyacınız olanı yapmak için başka hiçbir şey yapmamak) ve dolayısıyla daha küçük hata riskiyle yaparsınız.
  • Özelleştirilebilirlik. SQL sorguları kendim yazarsam, sorgunun neye benzediğini ve verilen bir veritabanı motorunda ve verilen indeks setinde ne kadar iyi performans gösterdiğini biliyorum. Öte yandan, SQL sorgusu harici bir bileşen tarafından yazılmışsa, performansı hakkında hiçbir şey bilmiyorum. Eskiden her web sayfasının gelmesi birkaç saniye süren bir şirkette çalışıyordum. Nedeni, ihtiyaç duyduğunuz tek şey bu öğe ile ilgili tüm öğeler değil tek bir öğe olduğunda, veritabanından otomatik olarak çok fazla veri aldıkları Hibernate kütüphanesi olduğundan şüphelendim. Bu yavaşlığın gerçek nedenini keşfetmeden önce şirketten ayrıldım, çünkü çok sayıda mevcut kütüphane kullanma yaklaşımını beğenmedim.

Özellikle bir kütüphane kendisine bir çerçeve diyorsa dikkat edin . Bu, kütüphanenin tüm uygulamanızı kendi etrafında oluşturmanızı gerektirdiği anlamına gelir. Aynı uygulamada genellikle iki çerçeveye sahip olamazsınız; barış içinde bir arada yaşamadan birbirleriyle savaşacaklar. Web geliştirme programı kütüphanesi? Evet, lütfen bunlardan çok az var. Şimdi kullandıklarımdan daha iyi bir kitaplık bulursam, eski kitaplığı eski kodda kullanmaya devam ederken yeni bulunan kitaplığı yeni kodda kullanabilirim. Web geliştirme çerçevesi? Büyük bir honking NO!


0

Başbakanınızın, yaşadığı süre boyunca çok fazla bakım çalışması yapacak, yönetilmesi zor bir sistemi hedeflediğini, böylece gelirinizi sağlayacağını düşünüyorum.

Şahsen, python ile sıkışmış gibi görünüyorsun, sadece bir süre pythonu unutma, bir yıl boyunca python kodlama, yeni şeyler öğren, aynı şeyi yapan ve muhtemelen daha iyi diller olduğunu göreceksin.

Diğerlerinin de belirttiği gibi, onlarla kodlamaya başlamadan önce araçları öğrenin. Belki gerekli yığını, göreve uygun görünen farklı araçların araştırmasına dayanarak değerlendirmenin iyi olacağını önerebiliriz. Ya da belki o listeyle nasıl ortaya çıktığını sorun, güncel bir kişiden yardım almış olabilir.


-2

Geliştiriciler, yeni kütüphaneler, çerçeveler, teknolojiler, vb. Kullanmayı öğrenmekten korkmamalı. Bu, geliştiricinin iş tanımının temel bir parçasıdır ve ekibin, hiç kimsenin sahip olmadığı üçüncü şahıslarla çalıştığını söylemek için birileri için kesinlikle mantıklıdır. Takım için otoriter teknik kararlar alma pozisyonundalarsa, takımın bunu yapmasını talep etmek veya hatta talep etmek.

Bununla birlikte, yeni bir teknoloji çekmenizi beklemeniz mantıklı değildir (bir seferde birkaç yeni teknolojiyi bıraksanız bile)) yığınınıza koyun ve ilerlemeye devam edin. Yeni yaklaşımın içeriğini ve çıkışlarını öğrenmek ve yeni parçaları birleştirmek için iyi bir tasarım bulmak için önemli bir zaman planlanmış olmalıydı; bu sırada asıl ürün üzerinde gerçek bir ilerleme beklenmiyordu (bu öğrenme / tasarım çalışmasını yapan kişilerden) ki bu tüm takım olabilir veya olmayabilir, ancak eğer değilse, muhtemelen takımın geri kalanına bilgi aktarmayı öğrenen insanlar için yolun aşağısında daha fazla zamanlama yapılması gerekebilir). Bu kadar büyük bir değişiklik yapmanın bedeli budur. Yeni teknolojiler öğrenmek, geliştiricinin işinin bir parçasıdır, ancak sadece sıfır zaman maliyetiyle gerçekleşen bir şey değildir.

Bu soru olmamış gibi geliyor. İnsanlar bir şekilde kendilerinin anlamadığı teknolojiler üzerine iyi uygulamalar oluşturmaya çalışmakta haklılar. Elbette ortaya çıkan kod korkunç.

Başbakanınızı şirketin bu konuda daha fazla zaman harcayacağına ikna etmeye çalışın . Ya şimdi durma, yeni teknolojileri öğrenme ve değerlendirme, iyi bir tasarım bulma ve mevcut uygulama karmaşasını temizleme şeklinde gelecek. Ya da böcek, bakım, müşteri geliştirme vb. İle harcanan daha fazla zaman şeklinde gelecek.

Soruda tarif edilen teknik seçimlerin (yük dengeleme, mesaj kuyrukları vb.) Gerçekten uygun olup olmadığını söylemek mümkün değildir . Kesinlikle bir karar ekarte etmek iyi bir neden "takımda kimse önce bu çalışmayı deneyime sahip" olduğunu sanmıyorum, ama yok (ki "değiştirebileceğini karar kısa dönem maliyetini artırabilir “En iyi karar” bağlamında) ve eğer Başbakanınız bunu düşünmüyorsa ve ekibin deneyimli insanlar kadar derhal üretken olmasını bekliyorsa, o zaman bu temelleri zorlamalısınız; hiç kimsenin ilgisini çekmeyen, gerçekçi olmayan proje programları hazırlayacaklar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.