Vývoj v prostředí s více týmy

aneb surfujeme na vlně API

Ondřej Mysliveček / LMC

O LMC

O mě (Ondřej Mysliveček)

  • ČVUT FEL (2004)
  • LMC - produktový manažer
  • LMC - head of product management
  • LMC - technology director
  • technology -> business -> technology/business

Vývoj vývoje v LMC

  1. Původně klasická organizace formou Waterfallu
  2. Již cca 3. rokem přecházíme na Agile/Lean

Pár otázek na úvod

  • V kolika lidech jste intenzivně vyvíjeli v jedné codebase?
  • Jaké verzovací systémy jste používali?
  • Pracovali jste v jednom týmu s jedním cílem (a dobrým přehledm o tom, co dělají ostatní)?
  • Jak často vám někdo rozbil váš kus kódu změnou úplně někde jinde?
  • Stalo se vám, že vám někdo změnil DB schéma "pod rukama"?

Problémy vícetýmových prostředí

  • Úmyslné změny mění víc než se čeká
  • Občas extrémně složité merge commitů
  • Nemožnost hýbat s menšími celky (občas je pouze 1 monolitická aplikace)
Monolith

Možnosti řešení

All seeing eye Rozděl a panuj

Proč jsou menší celky výhodné?

  • Transparentnější prostředí i jednotlivé dílky
  • Izolace problémů
  • Lze minimalizovat i dopady celkové nedostupnosti jednoho z dílků

APIfikace portfolia
(produktů/aplikací/systémů)

  • Dílky musí být striktně oddělené a izolované
  • Komunikace mezi dílky JASNĚ a STRIKTNĚ definovanými rozhraními
  • Musíme vědět kdo s kým komunikuje

Účastíci komunikace

  • Provider
  • Consumer

Jak se na API dívat?
[provider]

JE TO PRODUKT!!!

  • QA
  • Uptime monitoring
  • Performance monitoring/testing

Jak API navrhovat?
[provider]

  • Naprogramovat -> zdokumentovat (vygenerovat dokumentaci)
  • Navrhnout -> zdokumentovat -> naprogramovat (TDD?)

A jakou formu API zvolit?

  • SOAP? API založené na architekruře REST?
  • Střez se API ve formě DB schématu /*

Znám své consumery
[provider]

  • API odemykat pomocí tajných a unikátních klíčů
  • Monitorovat používání API (každé použití, každého consumera)

 

Proč tak složitě???

  • Nemáte tajné consumery
  • Víte koho informovat o vypínání starých verzí API
  • Máte API zabezpečené před zneužitím (základně)
  • Dokážete identifikovat nepoužívané endpointy

Lifecycle management API
[provider]

  • Jednou zveřejněné API se nemění
  • Verzovat, verzovat, verzovat
  • Zastarávání a vypínání

 

Proč tak složitě???

  • Flexibilita v releasování změn API
  • Koordinace priorit v týmech

Synchronně či asynchronně?
[consumer/provider]

Synchronní volání

  • Možnost dát zpětnou vazbu uživateli
  • Jednodušší (???)
  • Velmi rizikové (???)

 

Asynchronní volání

  • Ochrana proti nedostupnosti providera
  • Menší komfort uživatele
  • Obtížnější detekce vztahu consumer<->provider
  • Nutnost řešit fronty

QA ze strany consumera?
[consumer]

  • Pokrýt "cizí" API vlastními testy?
  • Monitorovat "cizí" API?

 

Proč si komplikovat práci???

  • Vlastní QA "cízího" API pro zajištění QA mého

Resistance is futile

you will be Apificated

 

Ondřej Mysliveček / LMC