Kako sada izraditi tim platforme! tajne uspješnog inženjeringa

TLDR; Timovi za skaliranje su tvrdi. Tim platformi učinjen ispravno može pomoći u olakšanju teškoća.
Platforma usred mora (Dobra metafora za uobičajenu izolaciju platformskih timova)

U Conde Nast International izrasli smo iz tima od 20 inženjera na manje od 100 u manje od godinu dana. Otkrili smo da izgradnja sustava koji će se koristiti na mnogim tržištima ima puno pokretnih dijelova i ponavljanja. Na primjer, obnova infrastrukture i konfiguracije aplikacije. Dodavanje dodatnog softvera treće strane. Izgradnja aplikacije pomoću CDN preusmjeravanja. Registracija i konfiguracija DNS-a.

Bilo je puno AWS računa koji su koristili mnogi timovi. Praćenje praćenja uporabe bilo je nered. Svaki programer mora razmišljati o tome gdje i kako pokrenuti svoj sustav. Obično to rade neovisno jedan o drugome. Moraju razmišljati o nadzoru i evidentiranju. To također uključuje razne podsustave kao što su postavljanje reda u redove razmještanja i usmjeravanje prometa.

Bilo je puno stvari koje smo mogli učiniti da proces bude puno lakši i glatkiji. To je primarni razlog zašto smo odlučili izgraditi infrastrukturni tim kasnije na tim platformi.

Tim platforme

Tim platforme

Tim platforme nije dio proizvodnih timova, već djeluje kao inženjerski tim za učinkovitost. To znači da su glavna klijentela platforme tim timova proizvoda. Rečeni tim proizvoda također treba naučiti o platformi općenito. Zatim pokrenite pitanja i pošaljite povratne informacije za kontinuirano poboljšavanje (novi CI). To ne bi trebalo značiti da je tim platforme izoliran s ostatkom organizacije. No, presudno važan igrač za uspjeh organizacije.

Upravljanje infrastrukturom jedna je od odgovornosti tima platforme. Osiguravanje najboljih praksi i duboko razumijevanje infrastrukture u oblaku ili na licu mjesta. Na primjer, osiguravanje da će infrastruktura biti pod mogućnosti revizije. To se može implementirati na više načina. Ali najčešći način implementacije je infrastruktura kao kod (IAC).

IAC omogućuje infrastruktura kao usluga (IaaS). Tim platforme rješava izgradnju IAC-a pomoću alata koji su otvoreni. to znači da je platforma koja se gradi apstrakcija alata. Ti su alati slabo povezani i integracija tih alata je platforma. Zamislite to kao platformu kao uslugu (PaaS), ali bliže onome što poslovni slučajevi koriste.

Znali smo zašto gradimo tim platforme. Sada smo morali postaviti temelje na kojem je izgrađen tim platforme. Za razliku od timova proizvoda koji obično imaju vidljiv cilj i mandate. Tim platforme ima više nefunkcionalnih zahtjeva, to smo morali detaljno definirati.

Evo mog osobnog mišljenja kako izgraditi uspješan tim platforme.

Tim i njegovi mandati

Mandati

Automatizacija

Ljudi su skloni pogreškama. Automatizacija unutar platforme omogućava nam da budemo sigurniji pri izvršavanju dijela koda. To nam omogućava da izoliramo sve pogreške i pogreške unutar koda. a zatim izvršite kontinuirano aktiviranje.

Automatizirani testovi su važni ono što nije testirano još nije u potpunosti implementirano. Potrebno je mnogo vrsta testova ovisno o vrsti softvera. Primjerice, ispitivanje raspršivača s kraja na kraj s integriranom jedinicom.

Sigurnost je najvažnije osiguravanje i automatizirano sigurnosno testiranje trebalo bi biti prioritet. Time se sprječava napad CORS-a i SQL ubrizgavanje. To će smanjiti napadnu površinu.

Koristite načelo najmanje privilegija kad god dajete pristup. U isto vrijeme pazite da to uravnotežite s lakoćom unosa. Programer koji koristi platformu kojoj treba pristup svakih 5 sekundi loše je za međuljudske odnose. Tim platforme trebao bi biti pokretač koji ne predstavlja prepreku. To znači ići na veliku dužinu u izgradnju odnosa i omogućavanje učinkovitosti u timu.

Sve što se mora učiniti dva puta treba automatizirati. Držite se DRY principa što je više moguće.
 
Platforma bi trebala biti automatizirana za uklanjanje kognitivnih troškova. Ujedno nam pomaže da budemo stabilniji kao platforma. Ovo nije alternativa dokumentaciji i obdukcijama, već je rezultat toga.

Veliki dio automatizacije su strategija implementacije i mjerenje implementacije pomoću metrika. Konačno, planiranje metrika protiv usvajanja kupca.

Koristite pametne implementacije i shvatite kada se primjenjuju. Primjer za to su sljedeći. Plavo zelena implementacija, a / b testiranje, automatska povratna sprega i nula povratnih znanja.

efikasnost
Važna je izgradnja visoko učinkovite platforme. To će nam omogućiti brže kretanje. Brzo uklanjanje pogrešaka za postizanje učinkovitosti. I značajke izgradnje po potrebi. Ključna je upotreba koda i stvaranje referentne implementacije. Ovo će pomoći širem poslu kako bi steklo veće vrijeme na tržištu kao i konkurentsku prednost. Obavezno dokumentirajte sve poznate nepoznanice i rubne slučajeve. Česti problemi i putovi eskalacije.

Učinkovitost platforme također znači brzo neuspjeh i fiksiranje. Platforma treba biti što transparentnija kada prikazuje pogreške. Pogreške će tada dovesti do bržeg uklanjanja pogrešaka i implementacije. Učinkovitost leži u ponavljanju malih značajki, a ne u velikim razmještajima.

Imati sustav eskalacije baze znanja nije prepreka. Umjesto toga, mjesto je za početak kad god se osjećate izgubljeno. To uz dobre odnose daje produktivne rezultate i učinkovitiju suradnju. Pomaganje timovima u razmjeni znanja. Steći će jedno s drugim iskustvo, a to je dobar način za izgradnju vrlo učinkovitog tima.
 
Samoposluga

Važna je dovoljna i kontinuirana dokumentacija. Osposobljavanje za programere. U obzir se moraju uzeti i troškovi obuke novih programera. Svaka nova tehnologija koju usvojimo ima režijske troškove. Ovo treba pažljivo razmotriti ako režijski troškovi vrijede vrijednost usvajanja. Korisni su interaktivni laboratorij za obuku i portal za programere. Mjesto na kojem možemo napraviti otkriće mvp i referentne implementacije. Sve to pomoći će nam da postignemo samodostatnost.

Svi novi inženjeri trebali bi prvog mjeseca izgraditi nešto koristeći platformu. To može biti dio početne orijentacije novih zapošljavanja. To će nam također omogućiti da otkrijemo probleme unutar prirode samoposluživanja platforme. Također prekvalifikacija za svaki novi dio platforme. Potiče se otkrivanje „uradi sam“ unutar platforme. Ponovno pronalaženje kola i upotreba sjene IT aktivno se obeshrabruje. Održavanje mnogih primjena iste stvari troši se i bespotrebno.

Nadgledanje metrika i traženje upozoravanja snažni su alati. SRE u početku može biti dio funkcije platforme ugrađene u temeljni tim platforme. To će pomoći SRE-u da razumije temeljnu implementaciju platforme.

Najvažniji dio platforme je da je stvorena za programere. Nastojeći uravnotežiti izgradnju najboljih praksi i njegovanje međuljudske komunikacije. Platforma za samoposluživanje znači da ćete imati znanje. Tada razumijevanje vrijednosti postojanja platforme. To znači da će programeri ponekad imati frustracije. Povratne informacije treba uzeti u obzir tijekom iteriranja razvoja platforme. Trebao bi postojati način davanja povratnih informacija programerima platforme i općenito o radu platforme. Bez toga platforma živi u izolaciji s ostatkom tvrtke. Usvajanje će u najboljem slučaju biti naporno. Ljudi žele iskoristiti i usvojiti nešto u čemu se osjećaju dobro. Napokon razvoj softvera je projekt usredotočen na ljude. Komunikacija, motivacija za interakcije važan je dio razvoja. To moramo usavršiti zajedno sa poslovnim zahtjevima i rokovima. Nepostojeća savršena platforma nikome nije od koristi. Polu funkcionalna i nesigurna platforma prokletstvo je bilo koje tvrtke.

Konačno će uvijek biti stvari koje nisu izvan okvira platforme. O tome uvijek treba odlučivati ​​od slučaja do slučaja. Znajući da je ljudima još uvijek potreban na kraju dana, a morat ćete zahtjev preusmjeriti kod drugog tima. Moguće ga eskalirati.

Timski planer koji promatra tim na visokoj razini

Principi

Tim koji se želi suprotstaviti svojim odlukama

vlast

Na mnogo načina uspjeh ili neuspjeh tima platforme leži u odluci koju donese. Tim platforme morat će donositi odluke koje utječu na druge timove. To se događa tijekom izgradnje temelja platforme. Na primjer jezik koji koristimo alate i okvire.

Vlast tima platforme nije u provedbi standarda. Ali u suptilnom usmjeravanju razvojnog tima u jednu ili drugu odluku. Na primjer, izrada preporuke za sječu. Da bi bio kompatibilan s analizatorom zapisivanja dnevnika tijekom otpreme trupaca. Izrada čvrstih i brzih standarda nije odgovornost tima platforme. Sami razvojni tim trebao bi imati prednost i izbora. Poput okvira i jezika alata koje to smatra prikladnim za vlastite slučajeve uporabe. Rekavši da postoje temeljne snage o kojima treba unaprijed odlučiti. Na primjer, korištenje oblaka ili više pružatelja usluga oblaka.

Zatvaranje dobavljača ujedno je i poklon i prokletstvo za timove platformi. Poklon u smislu da su ove odluke donijeli drugi timovi. To znači da su timovi izgradili svoj ekosustav alata oko odluke. Prokletstvo, jer ove odluke moramo živjeti unutar životnog ciklusa aplikacije. Ili dodajte dodatni režijski preseljenje. Tim platforme trebao bi imati vidljivost i autoritet nad širom organizacijom kako bi imali veće šanse za uspjeh.

Okrenite ga ovako. Vjerujemo da je DevOps kultura, a ne osoba

Zagovaranje i evangelizacija

DevOps je kultura koja nije uloga. Tim platforme trebao bi to moći evangelizirati.

Uobičajena točka neuspjeha u razvoju softvera je nedostatak razumijevanja kako će aplikacija raditi u uvjetima proizvodnog okruženja.

Prvi tehnički tim koji olakšava međusobnu komunikaciju obično je tim platforme. Tada se zalaganje za ponovnu upotrebu koda i najbolje prakse prema zadanim postavkama pada na tim platforme. Učinkovitost i pouzdanost postaju glavna briga tima platforme.

Inženjerska učinkovitost je stalno zalaganje tima platforme. Cjelokupna svrha izgradnje tima platforme je da inženjeri naprave više s manje kognitivnih troškova. Pojedinosti koje bi se moglo ponovo upotrijebiti i automatizirati obično padaju na tim platformi.

Vaša platforma čini stabilno jedno sidro u isto vrijeme

Odgovornost

S autoritetom za unošenje promjena u temeljne blokove svakog od sustava. Greška ili ranjivost unutar bilo kojeg od ovoga uzrokovat će kaskadni problem. Tada će utjecati ostatak inženjerskog tima.

Odgovornost kao tima važno je osigurati da svaki put kad tim napravi pauzu promjeni bude informiran i ostatak tima.

Bezgrešni post mortem uvjet je da se svaki član može osjećati sigurno napraviti promjene. Izgradnja boljeg sustava u isto vrijeme preuzimanje vlasništva nad sustavom. Odgovornost za pokretanje modela podrške i operacije tada prelaze na platformu i SRE tim.

Ahm .. Dakle, neće svi imati isti posao u okretanju ovog kolu

ekspertiza

Iskustvo i stručnost koja je potrebna timu platforme ovise o strukturi tvrtke.

Na primjer, neke tvrtke imaju funkcionirajući SRE tim koji se brine za rad i operacionalizaciju svake aplikacije. To znači da stvaranje modela podrške nije u potpunosti odgovornost tima platforme.

Upravljanje dobavljačima također je zadatak koji se može prenijeti na timove za podršku aplikacijama.

Ali općenito su ovdje potrebne vaše stručnosti u timu platforme:

  • orkestracija kontejnera i kontejnerizacija
  • upravljanje oblakom
  • upravljanje dobavljačima
  • upravljanje cjevovodom
  • dns i cdn konfiguracija
  • konfiguracija poslužitelja
  • git i scm
  • produkt ionizacija
  • promatranje (praćenje praćenja zapisivanja zapisa)
  • operacionalizacija (upozorenja za trčanje i upozorenje eskalacije podrške nakon smrtnih slučajeva)
  • meka vještina i upravljanje ljudima
  • softverski definirana infrastruktura (infrastruktura kao kod)
  • suradnja s drugim timovima i pregovori s upravom
  • zajednički tijek rada i upravljanje arhitekturom
  • sigurnosti
  • obuka i podučavanje programera
  • izrada dokumentacije

U idealnom slučaju vaši inženjeri će imati stručnost u domeni, a zatim će imati dobro radno znanje o drugim domenama.

Moj prijedlog za izgradnju stručnosti je prebacivanje između članova tako da postoje stručnjaci na razini domene. Zatim napravite primopredaju ili napravite ekstremno programiranje parova tablica. Takvo da je višak ugrađen u strukturu tima.

S obzirom na ogromnu sposobnost tima platforme. Možemo sa sigurnošću pretpostaviti da bi trebao postojati veliki tim za paralelno obavljanje svih tih aktivnosti. Neki od zadataka mogu se prenijeti na tim aplikacija. Iako bi to dodalo dodatne troškove za razvoj. Mogli smo i razdvojiti ovu ekipu, ali ako nepravilno rukovanje može dovesti do daljnjeg neusklađivanja.

Preporučuje se polu ravna struktura s višestrukim starijim i glavnim inženjerom koji bi mogli donositi okretnu odluku. I ako imamo ovako veliki tim s mnogim pokretnim dijelovima, značilo bi da je tehnička vodeća uloga neprikladna, a ključno je imati inženjerskog menadžera za arhitekturu platforme i rješenja.

Arhitekt rješenja mogao je izraditi plan tima platforme. Zatim to uskladite s ostalim tehničkim timovima. U ovom procesu možemo razumjeti i potrebe organizacije. I onda planiramo koje su nam sposobnosti potrebne. Konačno, arhitekt rješenja može pomoći u izboru tehnologija koje treba dodati na platformu.

Menadžer inženjera mogao bi vam pomoći u komuniciranju i izgradnji odnosa. To je važno iz više razloga. Prvo ako budemo pravi funkcionalni tim, broj zahtjeva bit će visok. Drugo, prioritizacija zadataka bit će ključna za izgradnju sposobnosti.

Zaista puno pokretnih dijelova. Ali ako se radi ispravno, to može biti nalik na dobro podmazan stroj

epilog

Tim platforme novi je koncept omogućen novim tehnologijama koje dolaze na tržište. Dobar primjer za to su kubernetes i njegova sveprisutnost. Ovaj novi tim može pomoći poslovanju da lakše izgradi svoje mogućnosti. Timovima za skaliranje teško je što će novi tim pomagala brže postići tim s manje trenja. To je moj osobni pristup temeljen na iskustvu što treba biti u srcu tog tima i koja stručnost je potrebna da bi se u njega ugradila.

Radite s nama Pogledajte ovaj posao u Condé Nast International: https://www.linkedin.com/jobs/view/839478085

Pridružite se našoj zajednici Slack i čitajte naše tjedne Faun teme ⬇

Ako je ovaj post bio od pomoći, molimo kliknite gumb clap nekoliko puta ispod da pokažete autoru svoju podršku! ⬇