TELEGEI

Home

Команда құрылымдары

Matthew Skelton, Manuel Pais

Оқылуы: 0%

Жазылымсыз режим: 20-беттен кейін жазылым беті ашылады, әрі қарай әр 10 бет сайын (ең көбі 5 рет).

20 px
1.85
0.30 px
0.95 em
Image segment 0

TEAM TOPOLOGIES КІТАБЫ ТУРАЛЫ ПІКІРЛЕР

«Team Topologies (Командалар топологиясы — командалардың құрылымы мен өзара әрекеттесу тәсілдері) нарық пен технологиядағы өзгерістерді қалай алдын ала болжауға және оларға бейімделуге болатыны туралы жаңа көзқарастар ұсынады. Аман қалу үшін кәсіпорындар бұрыннан қалыптасқан әміршілдік және бақылау құрылымдарынан арылып, өкілеттікті шешім қабылдауға және әрекет етуге қажетті ең үздік ақпараты бар көшбасшыларға беруі керек. Бұл кітап атқарушы директорлар мен бизнес-көшбасшыларға бүгінгі күннің қажеттіліктері мен ертеңгі өзгермелі жағдайларды тиімді шешу үшін жоғары өнімді командалардың негізгі стратегияларына назар аударуға көмектеседі». — Барри О’Рейли, ExecCamp негізін қалаушы, бизнес-кеңесші және «Unlearn» және «Lean Enterprise» кітаптарының авторы

«Менеджментте ұйымды қалай құрылымдайтыныңыздан және қандай мінез-құлықты ынталандыратыныңыздан маңыздырақ ештеңе жоқ. Осыған қарамастан, цифрлық, DevOps (бағдарламалық қамтамасыз етуді әзірлеу мен пайдалануды біріктіретін тәсіл) және SRE (Site Reliability Engineering — жүйе сенімділігін қамтамасыз ету инженері) трансформациясынан өтіп жатқан IT-ұйымдардың ұйымдастырушылық дизайн үлгілерін каталогтауға және талдауға тырысқандар аз. Скелтон мен Пайс бұл батыл сын-қатерді қабылдап қана қоймай, таптырмас әрі бірегей ресурс жасау арқылы мақсатқа дөп тиді». — Деймон Эдвардс, Rundeck негізін қалаушылардың бірі

«Team Topologies ағынды арттыру үшін командаларды ұйымдастыруды бағалау мен оңтайландыруға қажетті негізді ұсынады. Көлемі дұрыс таңдалған, шекаралары нақты және коммуникация деңгейі тиісті деңгейдегі командалар компанияға құндылық жеткізуге және команда мүшелерінің қанағаттануына дайын. Team Topologies технологиялық командаларыңыздың толық әлеуетін ашу үшін әдістемелік тәсілді нақты өмірдегі жағдайлық зерттеулермен біріктіреді». — Грег Баррелл, Netflix-тің аға сенімділік инженері

«Мэттью Скелтон мен Мануэль Пайстың Team Topologies кітабы — бірегей еңбек. Ол технологиялық компанияларға үлкен ықпал етеді. Бізге Spotify-дың бірнеше ритуалдарын көшіре салмай, үздіксіз жеткізу үшін командаларды қалыптастырудың құрылымдық және әдістемелік тәсілі қажет. Бұл — сол кітап». — Ник Тюн, API платформасының жетекшісі, Navico

«Condé Nast International-да [DevOps Topologies] біздің DevOps-тың қазіргі күйін түсінуде және болашақ DevOps операциялық моделінің көрінісін анықтауда өте маңызды болды. Біз модельдерде тамаша сипатталған қателіктер мен ұйымдық анти-паттерндерді (тиімсіз шешімдердің қайталанатын үлгілері) айналып өте алдық. Мэттью мен Мануэльдің DevOps Topologies табысына сүйеніп, өздерінің келесі білімдерін ұйымдық дизайнға арналған Team Topologies кітабына айналдырғанына өте қуаныштымын». — Кристал Хиршорн, Condé Nast жаһандық стратегия және операциялар бойынша инженерия вице-президенті

«Жоғары өнімді команда — заманауи цифрлық экономикадағы құндылықтың негізгі генераторы. Бірақ мұндай командалардың бейімделгіш экожүйесін қалыптастыру және масштабтау жиі қол жетпес мақсат болып қалады. Team Topologies-те Скелтон мен Пайс келесі ұрпақтың цифрлық операциялық моделін құрылымдау үшін инновациялық құралдар мен тұжырымдамаларды ұсынады. Дүниежүзіндегі CIO-ларға (ақпараттық директорлар), кәсіпорын архитекторларына және цифрлық өнім стратегтеріне ұсынылады». — Чарльз Бетц, Forrester Research бас талдаушысы

«Мэттью Скелтон мен Мануэль Пайс "Team Topologies — функционалды кітап болуы керек" дейді, және солай болып шықты. Ол жақсы құрастырылған және бағытталған, негізді ойлауға сүйенген және оқырмандарды ұйымды әлеуметтік-техникалық жүйе (адамдар мен технологиялардың өзара әрекеттесуін қарастыратын кешен) немесе экожүйе ретінде қабылдауға шақырады. Осы жорамалдан практикалық ұсыныстар, нұсқаулар емес, тиімді технологиялық/адами ұйымдық дизайнды қамтамасыз ететін тәсілді түсіндіру шеберлігі туындайды. Технологиялық/ұйымдық дизайн саласындағы кез келген адам үшін [Team Topologies] оқуға тұрарлық». — Д-р Наоми Стэнфорд, ұйымдық дизайн бойынша практик, оқытушы және автор

«Мэттью мен Мануэльдің үлгілер мен тіл бойынша жұмысы біздің ұйымдағы командалық контексттерді уақыт өте келе трансформациялау стратегияларын қалыптастыруда, сондай-ақ бизнес пен технологиялық көшбасшылыққа ағын және үздіксіз жеткізу тақырыптарымен байланысуға көмектесуде өте құнды болды». — Ричард Джеймс, Nationwide цифрлық технологиялар және инженерия бөлімінің басшысы

«Командалар — ұйымдардың негізгі құрылыс материалы. Ол командалардың қалай жұмыс істейтіні және олар әрекет ететін жүйе — орташа және жоғары өнімділік арасындағы айырмашылықты көрсетеді. Бұл кітап ұйымыңыздың жүйесін қазіргі контекстке қалай оңтайландыруға болатыны туралы терең ақпарат көзі болып табылады». — Джереми Браун, Red Hat Open Innovation Labs EMEA директоры

«DevOps — тамаша, бірақ нақты ұйымдар оны іске асыру үшін өздерін қалай құрылымдайды? Барлығын бір үлкен ашық кеңседе отыратын, бірге түскі асқа баратын немесе кикер ойнайтын жалғыз, оқшауланбаған командаға жинай алмайсыз. Team Topologies басқа нұсқаулықтар студенттерге жаттығу ретінде қалдыратын негізгі DevOps сұрақтарын шешуге арналған практикалық шаблондар жиынтығын ұсынады». — Джефф Суссна, Sussna Associates негізін қалаушы және бас директоры, «Designing Delivery» авторы

«Егер сіз жұмыс істеудің дәстүрлі тәсілдерімен байланысты қиындықтарды талдауды және сонымен бірге жеңілдету стратегиялары бойынша практикалық нұсқауларды (мысалы, жаңа өзара әрекеттесу режимдері, когнитивті жүктемені азайту және сәйкес "Командалық API" жасау) іздесеңіз, онда бұл кітап сізге арналған! » — Даниэль Брайант, InfoQ техникалық кеңесшісі және жаңалықтар менеджері

«Team Topologies командалар мен олар қолдайтын IT архитектурасы арасындағы симбиотикалық байланысты зерттейтіндіктен, қызықты оқуға айналады. Ол статикалық ұйымдық схемалардың немесе өзін-өзі ұйымдастыратын хаостың жалпы тәсілінен асып түседі және адамдар жүйесі мен IT жүйесін қалай бірге дамыту керектігін көрсетеді». — Мирко Херинг, Accenture жаһандық DevOps жетекшісі және «DevOps for the Modern Enterprise» авторы

TEAM TOPOLOGIES

ЖЫЛДАМ АҒЫН ҮШІН БИЗНЕС ПЕН ТЕХНОЛОГИЯЛЫҚ КОМАНДАЛАРДЫ ҰЙЫМДАСТЫРУ

МЭТТЬЮ СКЕЛТОН және МАНУЭЛЬ ПАЙС

Рут Маланның алғы сөзімен

Image segment 19
Image segment 20

TEAM TOPOLOGIES

Image segment 23

Әйелім Сьюзи Бекке — барлық қолдауың мен шабыт бергенің үшін.

Кэтиге, менің өмірлік серігім және отбасымның тірегіне — шаршамайтын махаббатың мен қолдауың үшін рақмет.

Дэн мен Бенге, күнделікті жылулық көздеріне — бұл кітап әкелерінің өмір сүру үшін немен айналысатынын түсінуге көмектеседі деп үміттенемін.

АЛҒЫ СӨЗ

Жүйелерімізді шағын және қарапайым етіп сақтау — лайықты мақсат, бірақ бұл көптеген табысты жүйелер қарсы келетін мақсат. Леманның бағдарламалық қамтамасыз ету эволюциясы заңдары (бағдарламалық жасақтаманың уақыт өте күрделенуі туралы заңдар) және, атап айтқанда, үздіксіз өсу заңы жүйелер қолданылған сайын және жаңа талаптар немесе мүмкіндіктер пайда болған сайын мүмкіндіктерді қосуға деген эволюциялық қысымды көрсетеді. Осы артып келе жатқан күрделілікпен күресу, тіпті оны пайдалану мүмкіндігі екі жақты дизайн саласының маңыздылығын арттырады: жүйелерді жобалау және сол жүйелерді жасайтын және дамытатын ұйымды жобалау. Бізде біріншісіне, яғни жүйелер мен бағдарламалық қамтамасыз ету дизайны мен архитектурасына бағытталған көптеген жұмыстар бар, соның ішінде domain-driven design (бизнес саласына негізделген дизайн) және бағдарламалық қамтамасыз ету архитектурасы бойынша өсіп келе жатқан кітаптар саны бар. Team Topologies Конвей заңын ескере отырып, бағдарламалық қамтамасыз етуді әзірлеу ұйымының дизайнын қарастырады.

Негізгі тезис [... ] мынада: жүйелерді жобалайтын ұйымдар [... ] осы ұйымдардың коммуникациялық құрылымдарының көшірмесі болып табылатын дизайндарды шығаруға мәжбүр. Біз бұл фактінің жүйе дизайнын басқаруда маңызды салдары бар екенін көрдік. Ең алдымен, біз дизайн ұйымдарын құрылымдау критерийін таптық: дизайн жұмысы коммуникация қажеттілігіне сәйкес ұйымдастырылуы керек.

Мел Конвейдің бағдарламалық қамтамасыз етуді әзірлеуге арналған ұйымдық дизайн туралы классикалық мақаласының қорытындысынан алынған жоғарыдағы дәйексөз осы кітаптың басталуына өте сәйкес келеді. Team Topologies команда құрылымы мен өзара әрекеттесу режимдерінің ұйымдық үлгілерін сипаттайды, ұйымның жүйеге тигізетін күшін негізгі дизайн мәселесі ретінде қабылдайды.

Жүйенің күрделілігі артқан сайын, оны құратын және дамытатын ұйымға қойылатын когнитивті талаптар да артады. Когнитивті жүктемені (адамның ақпаратты өңдеу қабілетіне түсетін күш) нақты жауапкершіліктері мен шекаралары бар командалар арқылы басқару — Team Topologies тәсіліндегі команда дизайнының айрықша фокусы. Тиісті көлемдегі, шектелген жауапкершіліктерге қол жеткізу үшін командаларды сәйкестендіруге болатын табиғи және салыстырмалы түрде тәуелсіз жүйелік (қосалқы) құрылым ізделеді. Бұл Конвей заңын ескереді және оны нақты шекаралары мен әлсіз байланысы бар біртұтас құрылымдарды сақтау үшін пайдаланады (бұл кері Конвей маневрі — ұйымдық құрылымды қажетті бағдарламалық архитектураға сәйкестендіру әдісі — деп аталады және осы кітапта сипатталған).

Team Topologies төрт команда үлгісін анықтайды, олардың нәтижелерін, формаларын және олар шешетін және қалыптасатын күштерді сипаттайды. Stream-aligned teams (ағынға бағытталған командалар) — негізгі команда формасы. Бұл — құндылықты үздіксіз жеткізуді жүзеге асыру және тиісті кері байланыс циклдеріне толық жауап беру үшін қажет нәрсенің бәрі бар, ағын үшін оңтайландырылған командалар. Бұл жүйе дизайны тек әлсіз байланысты емес, сонымен қатар ағынды қолдайтын және ағынға бағытталған командалар арасындағы тәуелділіктер мен үйлестіру қажеттіліктерін төмендететін декомпозицияны іздейтінін білдіреді. Complicated-subsystem (күрделі қосалқы жүйе) және platform teams (платформалық командалар) ағынға бағытталған командалардың жүктемесін азайтады. Enabling teams (мүмкіндік беретін командалар) дәл солай басқа командаларға қызмет етеді, бірақ олар ағынға бағытталған командаларға жаңа әдістерді үйренуге, жаңа технологияларды зерттеуге және т. б. көмектесетін қызмет провайдерлері болып табылады.

Мэттью Скелтон мен Мануэль Пайс өздерінің бай тәжірибелерін осы әртүрлі командалық формалардың табысты болуы үшін не қажет екенін сипаттауға жұмсады, сонымен қатар контексттегі өзгерістерді атап өтіп, олардың дизайнға әсерін көрсетті және аулақ болу керек анти-паттерндерді белгіледі. Олар сондай-ақ үлкен жомарттықпен басқа жұмыстардан алынған түсініктер мен сілтемелерді біріктіреді. Бұл жағдайлық зерттеулер жиынтығымен бірге кітапты одан әрі байыта түседі.

Рут Малан, Bredemeyer Consulting архитектура бойынша кеңесшісі

КІРІСПЕ

[Заманауи] ұйымдық дизайн... бұл колабборативті технологияларды, тұтынушының дауысын ескере отырып жобалау туралы. — Наоми Стэнфорд, Ұйымдық дизайн бойынша нұсқаулық (Guide to Organization Design)

КІРІСПЕ

Командалар әрқашан жетілдіруді қажет ететін процесс болып табылады, бірақ сонымен бірге олар бизнестің мақсаттарына сәйкес келе отырып, құндылықты үздіксіз және тұрақты түрде жеткізудің ең жақсы мүмкіндігі болып табылады. Идеалды жағдайда командалар ұзақ өмір сүретін, автономды және құрамында ынталы мүшелері болуы керек. Дегенмен, командалар оқшауланған күйде өмір сүрмейді. Олар бір-бірімен қалай және қашан әрекеттесу керектігін түсінуі қажет. Және бұл командалық өзара әрекеттесулер өнімдер мен технологиялардың өмірлік циклі кезіндегі ізденіс пен орындаудың ерекше кезеңдерін қолдау үшін уақыт өте келе дамып отыруы тиіс. Қысқасы, ұйымдар тек автономды командаларға ұмтылып қана қоймай, сонымен бірге тұтынушыларға құндылықты тез жеткізу үшін өзін-өзі үздіксіз ойластырып, дамытып отыруы керек.

Бұл кітап біз қолданған және әртүрлі кемелдік деңгейіндегі бизнестерде жұмыс істейтінін көрген ұйымдық дизайнның практикалық, қадамдық, бейімделгіш моделін ұсынады: <span data-term="true">Team Topologies</span> (Командалық топологиялар — командалық құрылымдар мен олардың өзара әрекеттесу үлгілері).

Дегенмен, Team Topologies — бұл бағдарламалық жүйелерді сәтті құру мен іске қосудың әмбебап формуласы емес. Осы жерде сипатталған және ұсынылғаннан мүлдем басқа ұйымдық динамикамен табысқа жеткен командалар мен ұйымдар бар (әсіресе тамаша мәдениеті мен озық тәжірибелері қалыптасқан ұйымдарда).

Team Topologies көптеген әртүрлі командалар мен ұйымдар үшін түсінуге және орындауға оңай нақты үлгілерді ұсынуға арналған, ол үздік ойыншыларға қалай әрекет ету керектігін бұйырмайды. Біз Team Topologies-ті жеке джаз трубашысына арналған әуен емес, оркестр немесе биг-бэндке арналған партитуралар жиынтығы ретінде қарастырғанды ұнатамыз. Үлкен музыкалық ансамбльге арналған ноталар топтың табысқа жетуіне көмектеседі, бірақ орындаудың әрбір аспектісін айқындамайды; көптеген бөлшектерді ансамбль жағдайға, орынға немесе ойыншылардың құрамына қарай өздері түсіндіреді. Сол сияқты, бағдарламалық қамтамасыз етуді жақсы жеткізуге қол жеткізу үшін бірыңғай сөздік қор мен бірлесіп жұмыс істеу тәсіліне келісудің мәні өте зор.

Team Topologies тәсілі өздерінің командалық құрылымын оңтайландыру жолын іздеп жүрген ұйымдарға немесе командалық дизайнның бизнес нәтижелеріне және бағдарламалық жүйелерге тигізетін әсерін әлі түсінбегендерге көмектеседі. Team Topologies ұйымдарға бұрынғыдан да тезірек және үздіксіз табысқа жетуге көмектеседі.

Бұл кітап бағдарламалық жүйелерді жеткізу мен пайдаланудың тиімділігіне бей-жай қарамайтын кез келген адамға арналған: C-деңгейіндегі басшылар (соның ішінде CTO/CIO, CEO, CFO және т. б. ), менеджерлер, бөлім басшылары, бағдарламалық қамтамасыз ету архитекторлары мен жүйелік архитекторлар және осы жүйелерді жеткізу мен іске қосуды тиімдірек еткісі келетін бағдарламалық жүйелерді құруға немесе басқаруға қатысатын кез келген адам үшін.

Бұл кітап қалай жазылды

2013 жылы Ұлыбританиядағы компаниялардың біріне DevOps (бағдарламалық қамтамасыз етуді әзірлеу мен пайдалануды біріктіретін тәсіл) пен үздіксіз жеткізуді енгізу кезінде Мэттью «DevOps гүлденуі үшін қандай командалық құрылым дұрыс? » деп аталатын блог жазбасында бастапқы DevOps топологиясының үлгілерін (және анти-үлгілерін) ойлап тапты. Сол уақытта ол кеңес беріп жүрген компания бағдарламалық қамтамасыз етуді жеткізудің заманауи тәсілдерін енгізуде қиындықтарға тап болды және Мэттью жасаған алғашқы топология үлгілері компанияға әртүрлі нұсқаларды зерттеуге мүмкіндік берді.

Мануэль Мэттьюден 2015 жылы QCon London бағдарламалық қамтамасыз етуді әзірлеу конференциясында сұхбат алды, онда Мэттью Конвей заңы мен алғашқы DevOps топологиясының үлгілері туралы баяндама жасаған болатын. Нәтижесінде «Әртүрлі командалық топологиялар DevOps мәдениетіне қалай әсер етеді» атты мақала InfoQ арқылы жарияланып, бірнеше тілге аударылды. Сол жылдың соңында Мануэль DevOps топологиясының үлгілерін кеңейтуге көмектесті және қоғамдастық тарапынан да үлестер қосылды.

Содан бері DevOps топологиясы үлгілерінің қолданылуы күрт өсті. Олар баяндамаларда, мақалаларда және әңгімелерде қайта-қайта сілтеме жасалды. Олар бүкіл әлем бойынша әртүрлі салалардағы және кез келген көлемдегі ұйымдарға командалар арасындағы қарым-қатынастар және олардың өзара әрекеттесуі ұйымдық мәдениетке де, бағдарламалық жасақтама архитектурасына да қалай әсер ететіні туралы ойлануға көмектесті.

Уақыт өте келе біз түпнұсқа DevOps топологиялары командалар арасындағы өзара байланыстардың статикалық көрінісін ұсынғанын түсіндік, бұл бастапқы талқылаулар үшін пайдалы болғанымен, ауқымы жағынан өте шектеулі еді. Дүние жүзіндегі ұйымдарды оқыту мен кеңес берудегі біздің бірлескен тәжірибеміз арқылы кейбір командалар салыстырмалы түрде оқшауланған немесе автономды түрде жақсы жұмыс істейтінін, ал басқа командалар тығыз ынтымақтастықта жақсы жұмыс істейтінін байқадық. Біз мұның себебін сұрадық және клиенттеріміздің кері байланысы негізінде идеяларымызды дамыта бердік.

Ақыр соңында, бұл осы кітапта ұсынылған Team Topologies-ке алып келді: әртүрлі географиялар мен салалардағы нақты сценарийлерге негізделген ұйымдық дизайнға динамикалық және дамымалы тәсіл.

Бұл кітапты қалай пайдалану керек

Team Topologies функционалды кітап болуға арналған. Біздің мақсатымыз — интерактивті және осы беттерге сыйдыра алатын барынша көп білім беретін мазмұнды ұсыну. Бұл үшін біз сізге осы кітапты шарлауға көмектесетін кейбір дизайн шешімдерін қабылдадық.

Біріншіден, кітап үш бөлімнен тұрады:

Кітаптың I бөлімі Конвей заңын, ұйымдық өзара байланыстар біз құратын жүйелердің дизайнын қалай шектейтінін және бұл тенденцияны өз пайдамызға қалай қолдана алатынымызды зерттейді. Содан кейін біз командалар дегенді қалай түсінетінімізді анықтаймыз және тиімді командалық жұмысқа әсер ететін кейбір практикалық шектеулерді қарастырамыз.

II бөлімде біз салада өзін дәлелдеген статикалық командалық үлгілер жиынтығын және Конвей заңы мен ұйымдық контекстті ескере отырып, бір үлгіні екіншісінен таңдаудың салдарын зерттейміз. Бұл бөлім сіздің ұйымдық контекстіңізге сәйкес келетін командалық топологиялар туралы ойлануға көмектесуі керек. Сондай-ақ, бұл бөлім Конвей заңы мен іргелі командалық топологияларды ескере отырып, командаларды жүйенің аймақтарына қалай сәйкестендіруді шешуде бағыт-бағдар береді.

Соңында, III бөлімде біз тез өзгеретін жұмыс контекстіне жауап ретінде инновациялар мен жылдам жеткізу үшін қуатты мүмкіндіктерді қамтамасыз ету мақсатында ұйымдық дизайнды дамыту жолдарын қарастырамыз. Біз нарық пен пайдаланушы сұраныстарына жауап беретін «сезімтал» ұйым құру үшін Team Topologies тәсілін қалай қолдану керектігін және мұның жұмысқа қабылдау мен дағдыларға тигізетін салдарын түсіндіреміз.

Әрбір бөлім әр тараудың негізгі тұжырымдарының тізімімен ашылады. Тараулар бойы біз білуге немесе сілтеме жасауға пайдалы деп санайтын ақпаратты ерекшелеу үшін суреттер мен түсіндірмелерді қостық. Сондай-ақ, біз жол бойында оңай танылатын сценарийлерді, кейс-стадилерді және әртүрлі жағдайларға арналған нақты ұсыныстарды береміз.

Ақыр соңында, көптеген суреттерде кездесетін фигуралар, түстер мен үлгілер кітап бойында тұрақты мағынаға ие. Міне, олардың сипаттамасы:

Image segment 60
  1. 1-сурет: Команданың төрт түрі және өзара әрекеттесудің үш режимі

Толық түсіну үшін кітапты басынан аяғына дейін оқып шығу керек, өйткені тақырып тараудан тарауға ұласады. Дегенмен, біз материалды әр бөлім салыстырмалы түрде тәуелсіз болатындай етіп жаздық.

Осы орайда, сіздің қазіргі жағдайыңызға сәйкес келуі мүмкін кітапты оқудың кейбір сценарийлері мен тәсілдері:

Маған командалардың әртүрлі түрлері және қайсысы тиімді екені туралы көбірек айқындық керек. 1-тарауды (шолу), содан кейін 4-тарауды (статикалық топологиялар) және 5-тарауды (негізгі топологиялар) қарап шығыңыз.

Маған үлкен, монолитті бағдарламалық жүйені бөлшектеу керек. 6-тарауды (шекаралар) және 3-тарауды (команда) қарап шығыңыз.

Маған бағдарламалық жүйенің архитектурасын жақсарту керек. 2-тарауды (Конвей заңы), содан кейін 4-тарауды (статикалық топологиялар) және 6-тарауды (шекаралар) қарап шығыңыз.

Маған бағдарламалық қамтамасыз етуді әзірлеу командаларының тиімділігін арттыру керек. 3-тарауды (команда), содан кейін 6-тарауды (шекаралар) және 5-тарауды (негізгі топологиялар) қарап шығыңыз.

Маған командалар ішіндегі моральдық жағдайды және тиімділікті жақсарту керек. 3-тарауды (команда) және 5-тарауды (негізгі топологиялар) қарап шығыңыз.

Маған жоспарланған өсімге көмектесу үшін күш-жігерді қайда жұмсау керектігін түсіну керек. 1-тарауды (шолу), содан кейін 5-тарауды (негізгі топологиялар) және 8-тарауды (топология эволюциясы) қарап шығыңыз.

Маған өзгеретін бизнес қажеттіліктерін қанағаттандыру үшін командалық топологияларды қалай дамыту керектігін түсіну керек. 7-тарауды (динамикалық аспектілер) және 8-тарауды (топология эволюциясы және ұйымдық сезімталдық) қарап шығыңыз.

Бұл кітапқа ақпарат берген негізгі ықпалдар

Өз тәжірибемізден бөлек, бұл кітапқа бірнеше байланысты тәсілдер мен ойлау бағыттары қатты әсер етті. Біріншіден, біз ұйымды оның ішіндегі жеке тұлғалар мен командалардың өзара әрекеттесуінен қалыптасатын әлеуметтік-техникалық жүйе немесе экожүйе деп санаймыз; басқаша айтқанда, ұйым — бұл адамдар мен технология арасындағы өзара әрекеттесу. Осы аспектіде кітап келесі салалардағы идеялармен сәйкес келеді: кибернетика (әсіресе ұйымды «сезімтал механизм» ретінде пайдалану, бұл Норберт Винердің «Кибернетика немесе жануарлар мен машиналардағы басқару және байланыс» атты кітабы алғаш рет жарық көрген 1948 жылдан бастау алады), жүйелік ойлау (әсіресе У. Эдвардс Демингтің жұмыстары) және домендік күрделілікті бағалауға арналған Cynefin фреймворкі (Дэйв Сноуден мен Мэри Бун 2007 жылғы Harvard Business Review мақаласында сипаттаған) және бейімделгіш структураландыру теориясы (бұл терминді Джерардин ДеСанктис пен Маршалл Скотт Пул енгізген, олар технологияның әсері алдын ала белгілі емес, өйткені ол топтар мен ұйымдардың оны қалай қабылдайтынына байланысты екенін атап өткен).

Екіншіден, біз «команда» — бұл жай ғана адамдар жиынтығынан өзгеше әрекет ететін нәрсе екенін және команданың дамуы мен жұмысында оған қолдау көрсетіп, күту керек деп есептейміз. Осыған байланысты біз Брюс Такманның (1965 жылғы мақаласында команданың дамуының төрт кезеңін — қалыптасу, қақтығыс, қалыпқа келу, нәтиже көрсету — ұсынған), Расс Форрестер мен Аллан Дрекслердің, Памела Найттың, Патрик Ленсионидің (өзінің «Команданың бес ақауы» атты кітабында өзара әрекеттесу мәселелерін зерттейтін) және соған ұқсас командаға бағытталған теориялар мен зерттеулердің идеяларына сүйенеміз.

Үшіншіден, біз Конвей заңы (ұйымның коммуникациялық құрылымы ол жасайтын жүйелердің дизайнына әсер ететіні туралы қағида) бағдарламалық өнімнің пішінін анықтайтын негізгі драйвер екенін және ұйымдар осы заңның салдарын нақты қарастырудан пайда көретінін есептейміз. Осыған байланысты біз Мел Конвейдің, архитектуралық кеңесші Рут Маланның, «кері Конвей маневрінің» жақтаушыларының бірі Джеймс Льюистің және ұқсас авторлар мен практиктердің жазбалары мен идеяларына сүйенеміз.

Ақыр соңында, біз Adidas, Auto Trader, Ericsson, Netflix, Spotify, TransUnion және басқалары сияқты ұйымдарды қоса алғанда, ауқымды бағдарламалық жүйелерді әзірлеу мен іске қосудағы көптеген практикалық жетістіктерді сипаттайтын дереккөздерге жүгінеміз. Бұл ұйымдардың көлемі мен жылдамдығы бірнеше айдан бірнеше жылға дейінгі уақыт ішінде ұйымдық құрылым мен командалық өзара әрекеттесудегі өзгерістерден нақты табыстарды көруге мүмкіндік берді.

Осы кітапты оқу барысында сіз командалар, олардың құрылымдары және олардың қалай жұмыс істейтіні туралы ойлау тәсіліңізге жаңаша қарауға шабыт аласыз деп үміттенеміз.

I БӨЛІМ

Жеткізу құралы ретіндегі командалар

НЕГІЗГІ ТҰЖЫРЫМДАР

1-ТАРАУ - Конвей заңы бағдарламалық қамтамасыз ету архитектурасы мен командалық өзара әрекеттесуді бірге жобалаудан үлкен табысқа жетуге болатынын көрсетеді, өйткені олар ұқсас күштер болып табылады. - Team Topologies команданың мақсаты мен жауапкершілігін нақтылайды, бұл олардың өзара байланыстарының тиімділігін арттырады. - Team Topologies бағдарламалық жүйелерді құруға гуманистік тұрғыдан қарайды және ұйымдарды стратегиялық бейімделуге дайындайды.

2-ТАРАУ - Ұйымдар коммуникация жолдарын көрсететін дизайндарды шығаруға мәжбүр. - Ұйымның дизайны мүмкін болатын бағдарламалық қамтамасыз ету дизайндарын шектей отырып, «шешімді іздеу кеңістігін» тарылтады. - Әрбір адамнан әрбір адаммен байланысуды талап ету — бұл былыққа апаратын жол. - Команда аясындағы ағынды ынталандыратын бағдарламалық архитектураларды таңдаңыз. - Коммуникация жолдарын нақты анықталған командалық өзара әрекеттесулермен шектеу модульдік, байланысы аз жүйелерді тудырады.

3-ТАРАУ - Команда — жеке тұлғалар емес, бағдарламалық қамтамасыз етуді жеткізудің ең тиімді құралы. - Ұйым ішіндегі көп командалық топтардың көлемін Данбар санына (адам тұрақты әлеуметтік байланыста бола алатын адамдар санының шегі) негіздеп шектеңіз. - Командалық жауапкершілікті команданың максималды когнитивтік жүктемесіне (адамның немесе команданың ақпаратты өңдеу және есте сақтау қабілетінің шегі) сәйкес келетіндей етіп шектеңіз. - Командалар үшін жауапкершіліктің нақты шекараларын белгілеңіз. - Командалардың табысқа жетуіне көмектесу үшін командалық жұмыс ортасын өзгертіңіз.

1. Ұйымдық схемалардағы мәселе

Ұйымдарды механикалық және сызықтық жүйелер емес, күрделі және бейімделгіш организмдер ретінде қарастыру керек. —Наоми Стэнфорд, Ұйымдық дизайн бойынша нұсқаулық

Технология қызметкерлері тұрақты әрекет үстінде: жүйелерді керемет жылдамдықпен жасайды және жаңартады, сондай-ақ тартымды пайдаланушы тәжірибесін жасау үшін технологияның әртүрлі түрлерін біріктіреді. Мобильді қосымшалар; бұлттық қызметтер; веб-қосымшалар; және кірістірілген, киілетін немесе өнеркәсіптік IoT құрылғылары — бұлардың барлығы қажетті бизнес нәтижелеріне қол жеткізу үшін тиімді түрде өзара әрекеттесуі керек.

Бүгінгі таңда бұл жүйелер адамдардың күнделікті өмірінің барлық аспектілеріне терең әсер етеді. Егер бағдарламалық қамтамасыз ету нашар жобаланған болса — немесе одан да маңыздысы, бағдарламалық қамтамасыз етудің, провайдердің және тұтынушының өзара әрекеттесуінде сәйкессіздік болса — адамдар зардап шегеді. Егер такси шақыру қосымшасы істен шықса, олар үйінен алыс жерде қалып қоюы мүмкін. Интернет-банкингке арналған бағдарламалық қамтамасыз ету немесе процестер істен шықса, олар жалдау ақысын төлей алмауы мүмкін. Егер медициналық құрылғы істен шықса, олардың өміріне қауіп төнуі де мүмкін. Бұрын-соңды нақты әлеуметтік-техникалық дизайн мұндай маңызды болған емес.

Осы өте күрделі, өзара байланысты бағдарламалық жүйелерді құру және іске қосу — бұл әртүрлі платформаларда әртүрлі дағдылары бар адамдардың бірлескен күш-жігерін талап ететін командалық әрекет. Сонымен қатар, заманауи IT ұйымдары бағдарламалық жүйелерді жылдам және қауіпсіз жеткізуі және басқаруы тиіс, сонымен бірге бизнестегі немесе нормативтік ортадағы өзгерістер мен қысымдарға бейімделіп, өсіп отыруы керек. Бизнестер енді тұрақтылықты оңтайландыру мен жылдамдықты оңтайландыру арасында таңдау жасай алмайды.

Бірақ осы тәуекелдер мен талаптарға қарамастан, көптеген ұйымдар әлі де өз адамдары мен командаларын заманауи бағдарламалық қамтамасыз етуді әзірлеу мен пайдалануға кедергі келтіретіндей етіп ұйымдастыруда. Жұмысты бөлу және бақылау үшін ұйымдық схемалар (org charts) мен матрицаларға тым көп сенетін ұйымдар жылдам қарқынмен жеткізе отырып, инновацияларды қабылдауға қажетті жағдайларды жасай алмайды. Бұған қол жеткізу үшін ұйымдарға тұрақты командалар және тиімді командалық үлгілер мен өзара әрекеттесулер қажет. Олар ептілік пен бейімделгіштіктің негізі ретінде өкілеттігі бар, білікті командаларға инвестиция салуы керек. Барған сайын бәсекелестік күшейіп жатқан нарықтарда тірі қалу үшін ұйымдарға контекст өзгергенін сезіп, соған сәйкес дами алатын командалар мен адамдар қажет.

Жақсы жаңалық — командалар мен адамдарды орталыққа қоя отырып, бейімделгіштікке, сондай-ақ қайталануға баса назар аударатын құралдармен және дұрыс ойлау жүйесімен жылдам әрі қауіпсіз болуға болады. Марк Шварц пен оның авторластары 2016 жылғы «Thinking Environments» мақаласында айтқандай, «ұйымдық құрылым жоғары сапалы, әсерлі бағдарламалық қамтамасыз етуді жеткізу мақсаттарын қолдау үшін жауапкершіліктерді үйлестіруі тиіс».

Осы интерфейстерді басқаратын технологиялық командалардың мүшелері ретінде біз ойлау тәсілімізді өзгертуіміз керек: командаларды «дұрыс» процесті орындап, «дұрыс» құралдарды қолданған жағдайда табысқа жететін алмастырылатын адамдар жиынтығы ретінде қарастырудан, адамдар мен технологияны біртұтас адам/компьютер, көміртекті/кремнийлі әлеуметтік-техникалық экожүйе ретінде қарастыруға көшуіміз керек. Сонымен қатар, біз мұндай жүйе ішінде командалардың ішкі мотивациясы болуын және оларға өз жұмысын барынша жақсы атқаруға нақты мүмкіндік берілуін қамтамасыз етуіміз керек.

Бұл тарау Team Topologies-ті бизнеске жылдамдық пен тұрақтылыққа қол жеткізуге мүмкіндік беретін технологиялық ұйым дизайнының бейімделгіш моделі ретінде таныстырады. Бірақ алдымен, көптеген ұйымдардағы нақты коммуникациялық құрылымдар ұйымдық схема бізге айтатын нәрседен қалай ерекшеленетінін және мұның салдары қандай екенін қарастырайық.

Ұйымның коммуникациялық құрылымдары

Көптеген ұйымдар өз командалары мен адамдарының «ұйымдық схема» (org chart) деп аталатын бірыңғай көрінісін қалайды немесе болуы талап етіледі. Бұл схема командаларды, бөлімдерді, бөлімшелерді және басқа ұйымдық бірліктерді, сондай-ақ олардың бір-бірімен қалай байланысатынын көрсетеді. Ол әдетте ұйымның «жоғары және төмен» бағытындағы коммуникация желілерін білдіретін иерархиялық есеп беру желілерін көрсетеді.

Ұйымдық схеманың бағдарламалық жүйелерді құру контекстінде, әсіресе нормативтік және заңды сәйкестікке қатысты өз пайдасы бар. Дегенмен, нәтижелерге қатысты белгісіздікке толы тығыз ынтымақтастық контекстінде атқарылатын жұмысты бөлудің негізгі механизмі ретінде ұйымдық схемаға сену шындыққа жанаспайтын күтулерге алып келеді. Оның орнына біз жылдамдық пен қауіпсіздікті теңестіру міндетін орындау үшін тиімді жұмыс істей алатын оқшауланған, ұзақ өмір сүретін командаларға сенуіміз керек.

Ұйымдық схеманы шындық ретінде қабылдаудың мәселесі — біз ақыр соңында адамдарды бағдарламалық қамтамасыз ету сияқты архитектуралауға тырысамыз, олардың қарым-қатынасын қабылданған желілер ішінде ұқыпты сақтаймыз. Бірақ адамдар өз коммуникацияларын схемадағы сол қосылған желілермен ғана шектемейді. Біз жұмысты аяқтау үшін кімге тәуелді болсақ, соған жүгінеміз. Мақсаттарымызға жету үшін қажет болған жағдайда ережелерді бұзамыз. Сондықтан нақты коммуникация желілері 1. 1-суретте көрсетілгендей ұйымдық схемадан мүлдем басқаша көрінеді.

Image segment 96
  1. 1-сурет: Нақты коммуникациялық желілері бар ұйымдық схема

Іс жүзінде адамдар жұмысты орындау үшін басқа есеп беру желілеріндегі адамдармен көлденеңінен немесе «горизонталды» сөйлеседі. Бұл шығармашылық пен мәселелерді шешу қабілетін ұйымның игілігі үшін дамыту керек, оны жоғарыдан төменге/төменнен жоғарыға коммуникация мен есеп беруді оңтайландыру үшін шектемеу керек.

Ұйымдық схема бойынша ойлау — бұл мәселе

Дәстүрлі ұйымдық схемалар біздің ұйымдағы коммуникацияның нақты үлгілері қандай екенін түсінуге көмектеспейді, бұл 1. 1-суретте көрсетілген. Оның орнына ұйымдар жеке тұлғалар мен командалар арасындағы күтілетін және нақты болып жатқан коммуникацияның шынайырақ көрінісін жасауы керек. Олқылықтар ұйым үшін жүйелердің қандай түрлері қолайлы екенін анықтауға көмектеседі.

Сонымен қатар, ұйымдық схема құрылымына негізделген шешімдер жоғары және төменгі ағындық әсерлерді ескермей, ұйымның тек бір бөлігін ғана оңтайландыруға бейім келеді. Локалды оңтайландырулар тікелей қатысатын командаларға көмектеседі, бірақ олар міндетті түрде тұтынушыларға құндылықты жеткізудің жалпы процесін жақсартуға көмектеспейді. Егер жұмыс ағынында үлкенірек кедергілер болса, олардың әсері мардымсыз болуы мүмкін. Мысалы, командалардың бұлттық технологияларды және код ретіндегі инфрақұрылымды қолдануы жаңа инфрақұрылымды орнату уақытын апталардан немесе айлардан минуттарға немесе сағаттарға дейін қысқартуы мүмкін. Бірақ егер әрбір өзгеріс аптасына бір рет жиналатын кеңестің мақұлдауын талап етсе, онда жеткізу жылдамдығы ең жақсы жағдайда апта сайын болып қала береді.

Жүйелік ойлау бүкіл жұмыс ағынын қарастырып, бүгінгі таңдағы ең үлкен кедергінің не екенін анықтап, оны жою арқылы тұтастықты оңтайландыруға бағытталған. Содан кейін қайталау. Team Topologies командаларға жаңа жағдайларға тез бейімделуге және бағдарламалық қамтамасыз етуді жылдам әрі қауіпсіз жеткізуге көмектесетін динамикалық командалық құрылымдар мен өзара әрекеттесу режимдерін қалай орнатуға болатынына назар аударады. Бұл бүгінгі күні сіздің ең үлкен кедергіңіз болмауы мүмкін, бірақ ақыр соңында сіз коммуникациясы нашар және/немесе процестері сәйкес келмейтін, жеткізуді баяулататын қатаң командалық құрылымдар мәселесіне тап боласыз.

Ұйымдық схема шеңберінен тыс

Ұйымдық схеманы (org chart) жұмыстың қалай орындалатынының және командалардың бір-бірімен қалай әрекеттесетінінің шынайы көрінісі ретінде қарастыру — жұмыс пен жауапкершілікті бөлудегі тиімсіз шешімдерге әкеледі. Бағдарламалық жасақтаманың архитектуралық құжаты әзірлеу басталған бойда ескіретіні сияқты, ұйымдық схема да әрдайым шындықпен сәйкес келмейді.

Әрине, ресми ұйымдық құрылымдар мен жұмыстың нақты орындалу тәсілі арасындағы тепе-теңдіктің бұзылуын алғаш болып біз байқаған жоқпыз. Гири Раммлер мен Алан Брачтың "Өнімділікті арттыру: Ұйымдық схемадағы ақ кеңістікті қалай басқаруға болады" атты кітабы бизнесті үздіксіз жетілдіруге және басқаруға негіз қалады. Соңғы кездері (кем дегенде АТ саласында) Мик Керстеннің жобадан өнімге көшу туралы кітабында сипатталғандай, өнім мен командаға басымдық беру тағы бір маңызды кезең болды. Біз Team Topologies тәсілін осы пазлдың тағы бір бөлігі — атап айтқанда, командалардың анық әрі икемді құрылымдарын, жауапкершіліктерін және өзара әрекеттесу режимдерін айқындау деп санаймыз.

Ұйымдық схемадан тыс не бар?

Сонымен, егер ұйымдық схемалар ұйымдық құрылымдардың дәл көрінісі болмаса, онда не дәл? "Күрделілікке арналған ұйымдастыру" (Organize for Complexity) авторы Нильс Пфлаегинг әрбір ұйымда бір емес, үш түрлі ұйымдық құрылымды анықтайды:

Ресми құрылым (ұйымдық схема) — ережелерге сәйкестікті қамтамасыз етеді.

Бейресми құрылым — жеке тұлғалар арасындағы «ықпал ету саласы».

Құндылық жасау құрылымы — адамдар мен командалар арасындағы беделге негізделген жұмыстың нақты орындалу жолы.

Пфлаегингтің пікірінше, білімге негізделген сәтті ұйымдардың кілті — бейресми құрылым мен құндылық жасау құрылымы арасындағы өзара әрекеттесуде (яғни, адамдар мен командалар арасындағы байланыс). Фредерик Лалу ("Ұйымдарды қайта құру") немесе Брайан Робертсон (Холакратия тәсілі) сияқты басқа авторлар да осыған ұқсас сипаттамалар ұсынған.

Team Topologies тәсілі Пфлаегинг анықтаған бейресми және құндылық жасау құрылымдарының маңыздылығын мойындайды. Командаларға өкілеттік беру және оларды іргелі құрылыс блоктары ретінде қарастыру арқылы команда ішіндегі адамдар жай топ емес, нағыз команда ретінде әрекет ету үшін бір-біріне жақындай түседі. Екінші жағынан, басқа командалармен өзара әрекеттесу режимдерін нақты келісу арқылы мінез-құлыққа қатысты күтулер айқындалып, командааралық сенім артады.

Соңғы бірнеше онжылдықта бизнесті ұйымдастырудың көптеген жаңа тәсілдері пайда болды, бірақ әдетте жаңа дизайн қайта құрудан кейін пайда болатын нақты мінез-құлық пен құрылымдарды ескермейтін статикалық көзқарас күйінде қалады. Мысалы, 1990-жылдары басталған және кейінгі онжылдықтарда танымал болған матрицалық басқару (қызметкерлердің бір мезгілде бизнес-менеджерге де, функционалдық менеджерге де есеп беруі) тәсілі жоғары белгісіздік пен жоғары біліктілікті талап ететін жұмыстың күрделілігін шешуге тырысты. Таза функционалдық ұйыммен салыстырғанда бизнес құндылығына нақтырақ бағытталғанына қарамастан, бұл әлі де бизнес пен технология салалары тез дамыған сайын ескіретін статикалық көзқарас болып табылады.

Жұмысшылар үшін re-org (ұйымды қайта құру), мысалы, матрицалық басқаруды енгізу — үлкен қорқыныш пен алаңдаушылық тудыруы мүмкін. Көбінесе бұл бизнесті алға жылжытудың орнына, оны кейінге шегеретін уақыт пен күштің босқа жұмсалуы ретінде қабылданады. Келесі технологиялық немесе әдістемелік революция басталғанда, бизнес тағы бір қайта құруды қолға алады, бұл орнатылған коммуникация формаларын бұзып, жаңадан қалыптасып келе жатқан командаларды ыдыратады.

Team Topologies тәсілі дәстүрлі ұйымдық дизайнда жетіспейтін, технологиялық ұйымдар үшін қажетті динамикалық және "сезу" (sensing) аспектілерін қосады.

Қазіргі заманғы бағдарламалық жүйелердің тиімді нәтижелері үшін ұйымдық схема немесе матрицалық басқару сияқты бір ғана статикалық ұйымдық құрылымға сену мүмкін емес екені барған сайын анық болып келеді. Бір ғана құрылымның орнына қазіргі жағдайға бейімделетін, командалардың қалай өсетінін және бір-бірімен қалай әрекеттесетінін ескеретін модель қажет. Team Topologies барлық ұйымдар үшін командаларды, процестерді және технологияларды сәйкестендіруге қажетті (р)эволюциялық тәсілді ұсынады.

Наоми Стенфорд өзінің 2015 жылғы "Ұйымдық дизайн бойынша нұсқаулық" атты тамаша кітабында ұйымдарды жобалаудың бес ережесін атап өтеді:

Көндірерлік себеп болғанда ғана жобалау.

Дизайн туралы шешім қабылдаудың нұсқаларын әзірлеу.

Жобалау үшін дұрыс уақытты таңдау.

Процестердің сәйкес келмей жатқанын көрсететін белгілерді іздеу.

Болашаққа қырағы болу.

Осы кітапты оқу барысында біз ұйымдық дизайнға арналған осы бес эвристиканы қалай жүзеге асыру керектігін зерттейтін боламыз.

Team Topologies: Командалар туралы жаңаша ойлау тәсілі

Team Topologies тәсілі корпоративтік бағдарламалық жасақтаманы жеткізу үшін тиімді командалық құрылымдар туралы жаңа ойлау тәсілін әкеледі. Ол технологиялық, адамдық және бизнестік өзгерістерге үздіксіз төтеп беру үшін команда дизайнын дамыту бойынша дәйекті, іс-қимылға негізделген нұсқаулықты ұсынады. Бұл нұсқаулық қазіргі заманғы бағдарламалық жүйелерді құратын және басқаратын командалардың өлшемін, пішінін, орналасуын, жауапкершіліктерін, шекараларын және өзара әрекеттесуін қамтиды.

Team Topologies командалардың төрт негізгі түрін — stream-aligned (жұмыс ағынына бағытталған), platform (платформалық), enabling (мүмкіндік беруші) және complicated-subsystem (күрделі ішкі жүйе) — және командалық өзара әрекеттесудің үш негізгі режимін — collaboration (ынтымақтастық), X-as-a-Service (X қызмет ретінде) және facilitating (жеңілдету) — ұсынады. Конвей заңын, командалық когнитивті жүктемені (адамның немесе команданың бір уақытта өңдей алатын ақпарат көлемі) және "сезуші ұйымға" қалай айналу керектігін түсінумен бірге, Team Topologies бағдарламалық жүйелерді құру мен басқарудың тиімді және гуманистік тәсілін ұсынады.

Атап айтқанда, ол әртүрлі командалық топологиялардың технологиялық және ұйымдық кемелденуіне қарай қалай дами алатынын қарастырады. Техникалық және өнімді зерттеу кезеңдері сәтті болу үшін әдетте жоғары деңгейдегі ынтымақтастық ортасын (командалық шекаралардың бір-бірімен тоғысуымен) талап етеді. Бірақ зерттеу аяқталғаннан кейін (технологиялар мен өнім қалыптасқанда) сол құрылымдарды сақтап қалу күшті босқа жұмсауға және түсініспеушіліктерге әкелуі мүмкін.

Ұйымдық дизайнның бейімделгіш моделіне баса назар аудара отырып және командалардың өзара байланысына белсенді түрде басымдық бере отырып, Team Topologies тәсілі қазіргі заманғы бағдарламалық қамтамасыз етуге негізделген кәсіпорындар үшін стратегияны (бизнес немесе технология тұрғысынан) қашан өзгерту керектігін сезудің негізгі механизмін ұсынады. Түпкі мақсат — командаларға тұтынушы қажеттіліктеріне сәйкес келетін және құруға, басқаруға және иелік етуге оңай бағдарламалық жасақтаманы шығаруға көмектесу.

Team Topologies сонымен қатар бағдарламалық жүйелерді жобалау мен құруға гуманистік көзқараспен қарауды насихаттайды. Ол команданы бағдарламалық жасақтаманы жеткізудің бөлінбейтін элементі ретінде қарастырады және командалардың құрметтелуі тиіс шектеулі когнитивті сыйымдылығы бар екенін мойындайды. Конвей заңына негізделген динамикалық команда дизайнымен бірге Team Topologies шешімдерді табудың стратегиялық құралына айналады.

Конвей заңының қайта жаңғыруы

Біз Конвей заңының команда дизайны мен эволюциясының қозғаушы күші ретіндегі маңыздылығын атап өттік. Бірақ бұл заң нақты не туралы?

1968 жылы компьютерлік жүйелерді зерттеуші Мел Конвей "Datamation" журналында "Комитеттер қалай ойлап табады? " атты мақаласын жариялады, онда ол ұйымдық құрылым мен жүйелердің нәтижесіндегі дизайны арасындағы байланысты зерттеді. Мақала терең түсініктерге толы, бірақ Конвей заңы ретінде танымал болған фраза мынау:

"Жүйелерді жобалайтын ұйымдар... сол ұйымдардың коммуникациялық құрылымдарының көшірмесі болып табылатын жобаларды жасауға мәжбүр".

Конвей өз бақылауын алғашқы электронды компьютерлік жүйелерді құратын ұйымдарға негіздеді. Оның айтуынша, бұл "заң" ұйымның нақты коммуникация жолдары мен нәтижесінде пайда болатын бағдарламалық архитектура арасындағы немесе автор Аллан Келли "гомоморфты күш" (бірдей пішінге келтіруші күш) деп атайтын құбылыс арасындағы күшті корреляцияны көрсетеді. Бұл гомоморфты күш бағдарламалық архитектура мен командалық құрылымдар арасындағы заттарды бірдей пішінге келтіруге бейім. Басқаша айтқанда, бағдарламалық жасақтаманы құру бағдарламалық архитектураның қандай түрлері мүмкін екенін шынайы қарастыру үшін командалар арасындағы коммуникацияны түсінуді талап етеді. Егер қажетті теориялық жүйе архитектурасы ұйымдық модельге сәйкес келмесе, онда екеуінің бірі өзгеруі керек.

Эрик Рэймонд мұны өзінің "Жаңа хакер сөздігі" атты кітабында әзілмен былай деп білдірді: "Егер сізде компилятормен жұмыс істейтін төрт топ болса, сіз 4 кезеңді компилятор аласыз".

1968 жылдан бері Конвей заңының барлық құрылған бағдарламалық жасақтамаларға қолданылатыны барған сайын анық бола түсті. Архитектуралық жоспарға сәйкес келуі тиіс бағдарламалық жүйелерді құрғандарымыз, архитектура бізге көмектесудің орнына, онымен күресіп жатқандай сезінген кездерімізді еске түсіре аламыз. Бұл — Конвей заңының іс жүзіндегі көрінісі.

Командалық құрылымдар қажетті бағдарламалық архитектураға сәйкес келуі керек, әйтпесе күтпеген дизайн туындау қаупі бар.

Конвей заңының өзіндік "қайта жаңғыруы" 2015 жылдың шамасында, микросервистер архитектурасы қарқын алған кезде болды. Атап айтқанда, Thoughtworks техникалық директоры Джеймс Льюис және басқалары инверсиялық Конвей маневрін (командаларды жүйенің архитектурасына сәйкес ұйымдастыру) қолдану идеясын ұсынды, бұған сәйкес ұйым командалардан белгіленген архитектуралық дизайнды орындауды талап етпей, командалық құрылымдарды жүйенің көрсеткісі келетін архитектурасына сәйкес ұйымдастыруға назар аударады.

Мұндағы басты қорытынды — бағдарламалық архитектураны оқшауланған күйде жобалауға болатын және содан кейін кез келген командалар тобы жүзеге асыра алатын дербес тұжырымдама ретінде қарастыру түбегейлі қате. Архитектура мен командалық құрылымдар арасындағы бұл алшақтық клиент-серверден бастап SOA-ға, тіпті микросервистерге дейінгі архитектураның барлық түрлерінде байқалады. Дәл сол себепті монолиттерді (атап айтқанда, кез келген бір команданың когнитивті сыйымдылығынан асатын кез келген бөлінбейтін бағдарламалық бөлікті) командаға назар аудара отырып бөлшектеу қажет, бұл тақырыпты біз 6-тарауда егжей-тегжейлі талқылайтын боламыз.

Когнитивті жүктеме және кедергілер

Когнитивті жүктеме туралы айтқанда, кез келген адамның кез келген уақытта миында қанша ақпарат ұстай алатынының шегі бар екенін түсіну оңай. Команданың барлық мүшелерінің когнитивті мүмкіндіктерін қосу арқылы кез келген команда үшін де солай болады.

Дегенмен, біз белгілі бір командаға жауапкершіліктерді немесе бағдарламалық бөліктерді тағайындаған кезде когнитивті жүктемені сирек талқылаймыз. Мүмкін, бұл қолжетімді сыйымдылықты да, когнитивті жүктеменің қандай болатынын да сандық түрде анықтау қиын болғандықтан шығар. Немесе командадан сұрақ қоймай, тапсырылған іске бейімделуі күтілетіндіктен болар.

Когнитивті жүктеме ескерілмегенде, командалар шамадан тыс жауапкершіліктер мен домендерді қамтуға тырысып, күштері таусылады. Мұндай команданың өз ісінің шебері болуға мүмкіндігі болмайды және контексттерді жиі ауыстырудың зардабын тартады.

Мигель Антунес, OutSystems компаниясының ҒЗТКЖ бойынша жетекші инженері, осы қиындықтың мысалын келтірді. Олардың OutSystems-тегі Engineering Productivity командасы бес жаста еді. Команданың миссиясы өнім командаларына жинақтарды (builds) тиімді орындауға, инфрақұрылымды қолдауға және тестілеуді жақсартуға көмектесу болатын. Команда өсе келе, үздіксіз интеграция (CI), үздіксіз жеткізу (CD) және инфрақұрылымды автоматтандыру бойынша қосымша жауапкершіліктерді алды.

Өз жетістіктерінің құрбаны болған, сегіз адамнан тұратын команданың спринтті жоспарлауы әртүрлі жауапкершіліктер бойынша сұраныстардың жиынтығына айналды. Басымдық беру қиын болды, тіпті бір спринт ішінде контекстті жиі ауыстыру адамдардың мотивациясының төмендеуіне әкелді. Егер біз Дэн Пинктің ішкі мотивацияның үш элементін қарастырсақ, бұл таңқаларлық емес: автономия (бірнеше команданың сұраныстары мен басымдықтарын үнемі жонглерлік етуден жойылды), шеберлік ("бәрін біледі, бірақ ештеңенің маманы емес") және мақсат (жауапкершілік домендері тым көп).

Бұл мысалдағы команда әзірлеушілер командаларына ішкі қызметтер көрсеткенімен, сыртқы тұтынушыларға арналған бағдарламалық жасақтамамен жұмыс істейтін командалар үшін де әсері бірдей. Өнім командасы жауап беретін қызметтер мен компоненттердің саны (басқаша айтқанда, командаға түсетін сұраныс) әдетте уақыт өте келе өсе береді. Дегенмен, жаңа қызметтерді әзірлеу көбінесе команданың бос уақыты толық және когнитивті жүктемесі нөлге тең сияқты жоспарланады. Бұл немқұрайлылық проблемалық болып табылады, өйткені командадан бұрыннан бар қызметтерді жөндеу және жақсарту әлі де талап етіледі. Соңында команда жеткізу кедергісіне (bottleneck) айналады, өйткені олардың когнитивті сыйымдылығы шамадан тыс асып кеткен, бұл кідірістерге, сапа мәселелеріне және жиі команда мүшелерінің мотивациясының төмендеуіне әкеледі.

Біз команданы бірінші орынға қойып, олардың когнитивті жүктемелерін шектеуді жақтауымыз керек. Когнитивті жүктеме туралы нақты ойлану команда өлшемін шешуде, жауапкершіліктерді тағайындауда және басқа командалармен шекараларды орнатуда қуатты құрал бола алады. (Біз мұны 3-тарауда егжей-тегжейлі қарастырамыз. )

Жалпы алғанда, Team Topologies тәсілі өзгерістер ағыны мен жұмыс істеп тұрған жүйелерден келетін кері байланысты оңтайландыратын ұйымдық дизайнды жақтайды. Бұл командаларға түсетін когнитивті жүктемені шектеуді және бізге қажетті бағдарламалық жүйелер архитектурасын жасауға көмектесу үшін олардың арасындағы өзара байланысты нақты жобалауды талап етеді (Конвей заңына негізделген).

Түйін: Команда құрылымдарын, мақсатын және өзара әрекеттесуін қайта қарастыру

Қазіргі заманғы, өзара байланысқан жүйелер мен қызметтер үшін бағдарламалық жасақтаманы тиімді әзірлеу және пайдалану ұйымдардан көптеген әртүрлі аспектілерді ескеруді талап етеді. Тарихи тұрғыдан алғанда, ұйымдардың көбі бағдарламалық жасақтаманы әзірлеуді функционалдық мамандықтарға бөлінген жеке тұлғалар орындайтын, ірі жобалары алдын ала жоспарланатын және әлеуметтік-техникалық динамика аз ескерілетін өндірістің бір түрі ретінде қарастырды. Бұл 12-беттегі 1. 2-суретте көрсетілген басым мәселелерге әкелді.

Image segment 151
  1. 2-сурет: Жылдам ағынға кедергілер

Agile, Lean IT және DevOps қозғалыстары бизнес ағынына сәйкес келетін, шағын, итеративті циклдермен әзірлейтін және шығаратын, сондай-ақ пайдаланушылардың кері байланысы негізінде бағытын түзетіп отыратын кішігірім, автономиялық командалардың орасан зор құндылығын көрсетуге көмектесті. Lean IT және DevOps сонымен қатар жүйелер мен командалар үшін телеметрия мен метрика құралдарын дамытуға ықпал етті, бұл бағдарламалық жасақтаманы құратын және басқаратын адамдарға мәселелер туындаған кезде жай ғана жауап берудің орнына, өткен тенденциялар негізінде белсенді, ерте шешімдер қабылдауға көмектесті.

Дегенмен, дәстүрлі ұйымдар өздерінің ұйымдық модельдеріне байланысты Agile, Lean IT және DevOps артықшылықтарын толық пайдалануда жиі шектеулерге тап болды. Мәдени және ұйымдық өзгерістер бейберекет шешіліп жатқанда, дереу автоматтандыруға және құралдарды енгізуге баса назар аударылуы таңқаларлық емес. Соңғы өзгерістерді визуалды түрде көрсету, тіпті олардың тиімділігін өлшеу әлдеқайда қиын. Дегенмен, дұрыс командалық құрылымның, тәсілдің және өзара әрекеттесудің болуы және олардың уақыт өте келе даму қажеттілігін түсіну — ұзақ мерзімді перспективада табыстың негізгі саралаушысы болып табылады.

Атап айтқанда, дәстүрлі ұйымдық схемалар белгісіздік пен жаңалыққа толы ортадағы бірлескен білім жұмысы үшін командаларды жиі қайта құрудың жаңа шындығына сәйкес келмейді. Оның орнына, біз Конвей заңын (ұйымдық дизайн бағдарламалық архитектура дизайнынан басым болады), когнитивті жүктеме шектеулерін және нақты мақсаттары бар командаларды жобалау үшін "командаға басымдық беру" тәсілін пайдалануымыз керек, сондай-ақ бағдарламалық жасақтаманы жеткізу ағыны мен стратегиялық бейімделгіштікке басымдық беретін командалық өзара әрекеттесуді ынталандыруымыз қажет.

Team Topologies мақсаты — ұйымыңызға бейімделуге және ынтымақтастық қажет болатын орындар мен уақытты, сондай-ақ орындауға назар аударып, коммуникациялық шығындарды азайту жақсы болатын кезді динамикалық түрде табуға мүмкіндік беретін тәсіл мен ойлау құралдарын беру.

ЕСКЕРТПЕ Біз осы кітапты зерттеу барысында мүлдем басқа саладағы стратегиялық және бірлескен өзара әрекеттесудің қызықты мысалын таптық. Мероу балығы мен теңіз жыланы, бір-біріне мүлдем қатысы жоқ түрлер болса да, жарықтарда тығылып жатқан кішкентай балықтарды аулау үшін (сигналдар арқылы) нақты ынтымақтасады екен. Жылан жарықтарға кіріп, кішкентай балықтарды қорқытып шығарады, содан кейін олар мероу балығы үшін оңай олжаға айналады. Ұйымыңыздағы "мероулар" мен "жыландарға" жақсырақ ағын мен бизнес нәтижелері үшін күш біріктіруге қалай мүмкіндік беру керектігін білу үшін одан әрі оқыңыз!

2. Конвей заңы және оның маңыздылығы

"[Конвей заңы] мына сұрақты үнемі қойып отыруға мәжбүр етеді: «Біздің ұйымның құрылымына байланысты бізге қолжетімді емес бұдан да жақсы дизайн бар ма? »" — Мел Конвей, Toward Simplifying Application Development, in a Dozen Lessons

1-тарауда біз неліктен ұйымдар командалық ұйымдастыруды табыстың ажырамас факторы ретінде қарастыруы керектігін талқыладық. Сондай-ақ, командалардың ұйым ішінде қалай жұмыс істейтінін түсінуге көмектесетін негізгі идеялар мен принциптерді қарастырдық. Кітап барысында біз негізге алатын кейбір маңызды ұғымдарды енгіздік. I бөлімнің қалған тарауларында біз Конвей заңының командалар, ұйымдық құрылым және бағдарламалық архитектура туралы не ашатынын егжей-тегжейлі талқылаймыз; содан кейін "командаға басымдық беру" тәсілінің нені білдіретінін қарастырамыз. I бөлімнің мақсаты — Team Topologies-ті қарастыра бастағанда түсінуіңіз керек ұйымдық және командалық дизайнның іргелі принциптерін беру.

Конвей заңын түсіну және қолдану

Конвей заңы командаларды ұйымдастыру кезіндегі күштерді түсіну үшін өте маңызды, себебі олар біздің бағдарламалық жүйелерімізге ұзақ мерзімді әсер етеді, өйткені соңғылары бұрынғыдан да үлкен және өзара байланысты бола бастады. Бірақ сіз 1968 жылғы бағдарламалық архитектура туралы заң уақыт сынынан өтті ме деп ойлауыңыз мүмкін.

Біз бәрібір үлкен жолдан өттік: микросервистер, бұлтты технологиялар, контейнерлер, серверсіз есептеулер. Біздің тәжірибемізде мұндай жаңалықтар командаларға жергілікті жерде жақсаруға көмектеседі, бірақ ұйым неғұрлым үлкен болса, соғұрлым толық пайда алу қиындай түседі. Командалардың құрылу және өзара әрекеттесу тәсілі көбінесе өткен жобаларға және/немесе ескі технологияларға негізделген (бұл ондаған жылдар болмаса да, бірнеше жыл бұрынғы ұйымдық схема дизайнын көрсетеді).

Егер сіз қашан да үлкен ұйымда жұмыс істеген болсаңыз, бүкіл бизнесті жұмыс істетіп тұрған монолитті ортақ дерекқорлардың мысалдарын көрген боларсыз. Әрине, DevOps пен микросервистер пайда болғанға дейін монолитті дерекқорлардың басым болуының негізді тарихи себептері болды (мысалы, техникалық стек қабаттары бойынша адамдар мен командалардың мамандануының артуы). Жобаға бағытталу, аутсорсинг арқылы шығындарды азайту немесе тәжірибесі жеткіліксіз жас командалар сияқты факторлар бұл (қазір танымал) анти-патерннің сақталуына ықпал етті. Монолитті дерекқорлар оларға тәуелді бағдарламаларды бір-бірімен байланыстырады және дерекқор деңгейіндегі шағын бизнес-логикалық өзгерістер үшін магнитке айналады (бұл туралы 6-тарауда толығырақ). Дегенмен, оларды болдырмау үшін ұйымдарға тек жақсы архитектуралық тәжірибелер ғана емес, сонымен қатар осы жаңа ойлау тәсіліне сәйкес келетін нақты командалық құрылымдар мен құрам қажет.

Adidas спорттық киім компаниясы ұйымдық дизайнның драйвері ретінде Конвей заңына (жүйе архитектурасы оны жасаған ұйымның байланыс құрылымын қайталайтыны туралы тұжырымдама) ерекше назар аударған қызықты трансформациядан өтті. Платформалық инженерия бойынша аға директор Фернандо Корнаго мен Платформалық инженерия және архитектура бойынша вице-президент Маркус Раутерт түсіндіргендей, олардың IT департаменті басында шығын орталығы ретінде қарастырылатын. Бағдарламалық жасақтаманың басым бөлігін бір ғана вендор (жеткізуші) қамтамасыз ететін (бұл жиі жұмыс тапсыруды қажет ететін) және компанияда тек бірнеше инженер болатын (олар инженериядан гөрі басқарумен көбірек айналысатын). Кейін бұл құрылым өнімге бағытталған командалық ұйымға айналды.

Adidas өзінің инженерлік ресурстарының 80%-ын бизнес қажеттіліктеріне сәйкес келетін кросс-функционалды топтар арқылы ішкі бағдарламалық қамтамасыз етуді әзірлеу мүмкіндіктерін жасауға жұмсады. Қалған 20%-ы инженерлік платформалар мен техникалық дамуға, сондай-ақ жаңа мамандарға кеңес беру мен бейімдеуге жауапты орталық платформалық топқа бөлінді. Adidas өзінің цифрлық өнімдерін шығару жиілігін алпыс есеге арттырып, сонымен бірге бағдарламалық жасақтама сапасына да оң әсер ете алды. 1

Эмпирикалық тәжірибеден бөлек, Конвей ұсынған тенденцияларды растайтын зерттеулер көлемі де артып келеді. Гарвард бизнес мектебіндегі Алан МакКормак пен оның әріптестері түрлі ашық және жабық бастапқы коды бар бағдарламалық өнімдерді зерттеп, «өнім архитектурасы ол әзірленген ұйымның құрылымын қайталауға бейім деген гипотезаны қолдайтын бұлтартпас дәлелдер» тапты. 2

Көлік өндірісі мен ұшақ қозғалтқыштарының дизайны сияқты басқа салалардағы зерттеулер де бұл идеяны қуаттайды. 3 Іс жүзінде, Конвей заңында көрсетілген гомоморфты күштің кеңінен қолданылатынын көрсететін салалық зерттеулер жеткілікті.

Рут Маланның мына сөзін Конвей заңының заманауи нұсқасы ретінде қарастыруға болады: «Егер жүйе архитектурасы мен ұйым архитектурасы бір-біріне қайшы келсе, ұйым архитектурасы жеңіске жетеді». 4 Малан бізге ұйымның нақты, шынайы коммуникациялық құрылымына сәйкес келетін немесе соны еліктейтін дизайндарды жасауға мәжбүр екенін ескертеді. Бұл бағдарламалық жүйелерді іштей немесе жеткізушілер арқылы жобалайтын кез келген ұйым үшін маңызды стратегиялық салдарға ие.

Атап айтқанда, функционалдық оқшауланған бөлімдерге (командалар QA, DBA немесе қауіпсіздік сияқты нақты функцияларға маманданған) бөлінген ұйымның басынан аяғына дейінгі үздіксіз ағын үшін жақсы архитектураланған бағдарламалық жүйелерді шығаруы екіталай. Сол сияқты, негізінен әртүрлі географиялық аймақтардың сату арналары бойынша құрылған ұйым барлық жаһандық аймақтарға бірнеше түрлі бағдарламалық қызметтерді ұсынатын тиімді бағдарламалық архитектураны құруы мүмкін емес.

Неліктен ұйымдар белгілі бір архитектураларды аша алмайды немесе қолдай алмайды? Конвей өзінің 1968 жылғы мақаласында кейбір тұспалдар береді: «Кез келген [нақты] командалық ұйымда осындай ұйым тиімді жүзеге асыра алмайтын дизайн альтернативаларының класы болады, өйткені қажетті коммуникациялық жолдар жоқ». 5

Ұйым ішіндегі коммуникациялық жолдар (ресми бағыныштылық иерархиясы бойынша ма, жоқ па, маңызды емес) ұйым ойлап таба алатын шешімдердің түрлерін шектейді. Бірақ біз мұны стратегиялық артықшылығымыз үшін пайдалана аламыз. Егер біз дизайнның белгілі бір түрлерін — мүмкін, техникалық ішкі мәселелерге тым қатты көңіл бөлетіндерді — болдырмағымыз келсе, ұйымды содан қашатындай етіп қайта құра аламыз. Сол сияқты, егер біз ұйымымыздың белгілі бір дизайндарды — мүмкін, жұмыс ағынына қолайлырақ дизайндарды — ашып, қабылдағанын қаласақ, онда ұйымды соған көмектесетіндей етіп қайта құра аламыз. Әрине, ұйым біз қалаған дизайндарды тауып, қолданатынына кепілдік жоқ, бірақ коммуникациялық жолдарды қалыптастыру арқылы біз оның ықтималдығын арттырамыз.

Конвей заңын қолдана отырып ұйымды жобалау — тиімді бағдарламалық дизайндарды ашуды айтарлықтай тездететін және тиімсіз дизайндардан қашуға көмектесетін негізгі стратегиялық қызметке айналады. (8-тарауда біз Конвей заңын ескере отырып, ұйымды стратегиялық тұрғыдан қалай дамыту керектігі туралы толығырақ тоқталамыз).

Кері Конвей маневрі

Ұйымның ағынға оңтайландырылған тиімді бағдарламалық жүйелерді құру мүмкіндігін арттыру үшін, бағдарламалық жасақтама аяқталғанға дейін командалар арасындағы байланысты қайта конфигурациялау мақсатында кері Конвей маневрін (немесе инверсиялық Конвей маневрі) жасауға болады. Бастапқыда қарсылық болуы мүмкін болса да, басшылықтың жеткілікті ерік-жігері мен командалардың хабардарлығы болған жағдайда, бұл тәсіл жұмыс істей алады және істейді де.

Кері Конвей маневрі технология әлемінде 2015 жылдары танымал бола бастады және содан бері көптеген ұйымдарда қолданылып келеді. Доктор Николь Форсгрен, Джез Хамбл және Джин Ким жазған «Accelerate: The Science of Dev Ops» кітабы жоғары өнімді ұйымдар үшін бұл стратегияның маңыздылығын растайды:

Біздің зерттеулеріміз кейде «кері Конвей маневрі» деп аталатын тәсілді қолдайды, ол ұйымдар қалаған архитектураға қол жеткізу үшін өздерінің командалық және ұйымдық құрылымын дамытуы керек дейді. Мақсат — сіздің архитектураңыз командалар арасында жоғары өткізу қабілеттілігі бар байланысты қажет етпей-ақ, командалардың өз жұмысын — жобалаудан бастап орналастыруға дейін — орындау мүмкіндігін қолдауы керек. 6

Біз жоғарыда айтқан монолитті дерекқордың анти-паттерні есіңізде ме? Біз тұрақты командалар болмаған және барлық өзгерістер уақытша жобалар (негізінен аутсорсинг) арқылы енгізілген шектен шыққан жағдайларды көрдік, нәтижесінде қосымшалар дерекқор деңгейінде (ортақ деректер мен процедуралар) тығыз байланысып кеткен. Бұл кейінірек бизнестің кейбір бөліктері үшін дайын жүйелерді енгізуге кедергі болды, өйткені соңғыларын қалған бизнес-логикадан ажырату мүмкін болмады. Ішкі инженерлерді тұтынушылардың өзгеретін қажеттіліктерін қанағаттандыратын ерекше функциялармен айналысуға босатудың орнына, осындай техникалық қарыздың жиналуы ұйымның жылдам қозғалу және бәсекелестерден озу қабілетін шектейді.

Сонымен, кері Конвей маневрі қалаған бағдарламалық архитектураны алу үшін командалық ұйымды басқаруға қалай көмектесе алады?

Ойлар мен жұмыс істеп тұрған күштерді көрсету үшін бағдарламалық жасақтама жасап жатқан ұйымдағы Конвей заңының әдейі қарапайым етіп алынған мысалын қарастырайық. Айталық, әрқайсысы фронтенд және бекенд әзірлеушілерден тұратын төрт тәуелсіз команда жүйенің әртүрлі бөліктерінде жұмыс істейді, содан кейін дерекқордағы өзгерістерді енгізу үшін дерекқор әкімшісіне (DBA) тапсырады. Өзгерістер ағыны концептуалды түрде 2. 1-суреттегі диаграммаға ұқсауы мүмкін.

Image segment 181

2.1-сурет: Бағдарламалық жүйеде жұмыс істейтін төрт команда

Фронтенд және бекенд әзірлеушілерден тұратын төрт бөлек команда бағдарламалық жүйеде жұмыс істейді. Фронтенд әзірлеушілері тек бекенд әзірлеушілерімен байланысады, ал олар дерекқордағы өзгерістер үшін жалғыз DBA-мен байланысады.

Конвей заңына сәйкес, мұндай командалық дизайннан табиғи түрде туындайтын бағдарламалық архитектурада әр команда үшін жеке фронтенд және бекенд компоненттері және бірыңғай, ортақ ядролық дерекқор болады (2. 2-сурет, 20-бетті қараңыз).

Image segment 185

2.2-сурет: Төрт командалық ұйымнан туындайтын бағдарламалық архитектура

Әрқайсысының жеке пайдаланушы интерфейсі (UI) және бір ортақ дерекқормен байланысатын бекенд қосымша деңгейі бар төрт бөлек қосымша. Бұл 2. 1-суреттегі командалық коммуникация архитектурасын көрсетеді және оған сәйкес келеді; диаграмма жай ғана тоқсан градусқа бұрылған.

Басқаша айтқанда, ортақ DBA командасын пайдалану бірыңғай ортақ дерекқордың пайда болуына әкелуі мүмкін; ал жеке фронтенд және бекенд әзірлеушілерді пайдалану коммуникацияның сипатына байланысты UI мен қосымша деңгейлерінің ажырауына әкелуі ықтимал. Егер осы бір ортақ дерекқор мен төрт дана екі деңгейлі қосымша біз қалаған бағдарламалық архитектура болса, онда бәрі жақсы.

Алайда, егер біз бірыңғай ортақ дерекқорды қаламасақ, бізде мәселе туындайды. Конвей заңында көрсетілген гомоморфты күш қазіргі ұйымдық дизайн мен коммуникациялық жолдардан туындайтын «табиғи» бағдарламалық архитектураға күшті ықпал етеді.

Мысалы, біз кейбір жаңа бұлтқа негізделген бағдарламалық жүйелер үшін микросервистік архитектураны қолданғымыз келеді делік, мұнда әрбір бөлек сервис тәуелсіз және өзінің деректер қоймасы бар (2. 3-сурет, 21-бетті қараңыз).

Image segment 191

2.3-сурет: Тәуелсіз сервистері мен деректер қоймалары бар микросервистік архитектура

Төрт бөлек сервисі бар, әрқайсысының өз деректер қоймасы, API деңгейі және фронтенд клиенті бар микросервистерге негізделген архитектура.

Кері Конвей маневрін қолдана отырып, біз командаларымызды қажетті бағдарламалық архитектураға «сәйкес келетіндей» етіп жобалай аламыз: клиенттік қосымшалар мен API үшін жеке әзірлеушілер болады және дерекқор әзірлеушісі топтан бөлек емес, топтың ішінде болады (2. 4-сурет, 22-бетті қараңыз).

Image segment 195

2.4-сурет: Тәуелсіз сервистері мен деректер қоймалары бар микросервистік архитектураға арналған командалық дизайн

Төрт тәуелсіз микросервисі бар бағдарламалық архитектураны жасауға көмектесу үшін Конвей заңының артындағы гомоморфты күшті ескеретін ұйымдық дизайн. (Тағы да айта кетсек, бұл негізінен 2. 3-суреттегі диаграмманың тоқсан градусқа бұрылған түрі).

Конвей заңына сәйкес, бұл командалық дизайн қалаған бағдарламалық архитектураны ең «табиғи» түрде шығарады. Егер біз деректер қоймасының бизнес доменіне сәйкес келуін қаласақ, онда бірыңғай дерекқор адамы немесе командасының болуын болдырмауымыз керек (мүмкін, қосымшаны әзірлеу тобына деректермен жұмыс істеу мүмкіндігін қосу арқылы).

Топтық деңгейдегі ағынды ынталандыратын бағдарламалық архитектуралар

Конвей заңы бізге командаларымызды ұйымдастырмас бұрын қандай бағдарламалық архитектура қажет екенін түсінуіміз керек екенін айтады, әйтпесе ұйымдағы коммуникациялық жолдар мен ынталандырулар бағдарламалық архитектураны өздігінен айқындайтын болады. Майкл Найгард айтқандай: «Командалық міндеттер — архитектураның бірінші нұсқасы». 7

Өзгерістердің қауіпсіз, жылдам ағыны үшін біз топтық деңгейдегі ағынды ескеріп, бағдарламалық архитектураны соған сәйкес жобалауымыз керек. Жеткізудің негізгі құралы — команда (3-тарауда толығырақ), сондықтан жүйе архитектурасы әр команда ішіндегі жылдам ағынды қамтамасыз етіп, ынталандыруы қажет. Бақытқа орай, іс жүзінде бұл бағдарламалық архитектураның дәлелденген жақсы тәжірибелерін қолдануға болатынын білдіреді:

Әлсіз байланыс — компоненттер басқа компоненттерге қатты тәуелді емес. Жоғары когезия — компоненттердің жауапкершілік шекаралары нақты белгіленген және олардың ішкі элементтері бір-бірімен тығыз байланысты. Нұсқалардың анық және сәйкес келетін үйлесімділігі. Командалар арасындағы нақты және сәйкес келетін тестілеу.

Концептуалды деңгейде бағдарламалық архитектуралар өздері мүмкіндік беретін өзгерістер ағынына ұқсас болуы керек; бір-бірімен байланысқан компоненттер сериясының орнына, біз негізгі платформаның үстіндегі ағындарды жобалауымыз керек (платформаларды 5-тарауда қарастырамыз).

Барлығын команда көлемінде ұстау арқылы біз МакКормак пен оның әріптестері «модуль көлемін шектеу арқылы түсінуді жеңілдететін және дизайн өзгерістерінің таралуын азайту арқылы үлес қосуды жеңілдететін қатысу архитектурасы» деп атаған нәрсеге қол жеткізуге көмектесеміз. 8 Басқаша айтқанда, бізге адамдардың онымен жұмыс істеу қабілетін барынша арттыратын, командаға бағытталған бағдарламалық архитектура қажет.

Барлығын ажыратылған және топтық деңгейде сақтау ұйымның негізгі, тұрақты тесті болуы керек, өйткені Джон Робертс «The Modern Firm» кітабында айтқандай, «өнімділіктің нақты өсіміне көбінесе бытыраңқы модельге негізделген дизайндарды қабылдау арқылы қол жеткізуге болады». 9 Бұл өнімділік өсімі ішінара өзгерістер ағынының жылдамдығының артуына, ал ішінара ұйымның архитектураны жаңа жағдайларға сәйкес өзгерту қабілетіне байланысты.

«Өнімді дамыту ағынының принциптері» кітабының авторы Дон Райнертсен былай дейді: «біз архитектураны жылдам өзгерістердің драйвері ретінде де пайдалана аламыз. Біз мұны архитектурамызды өзгерістерді оңай қабылдайтындай етіп бөлу арқылы жасаймыз». 10 Осылайша, архитектура кедергі емес, мүмкіндік берушіге айналады, бірақ бұл тек Конвей заңына негізделген командаға бағытталған тәсілді қолданғанда ғана мүмкін болады.

Ұйымдық дизайн техникалық сараптаманы қажет етеді

Егер біз Конвей сипаттаған (архитектура мен командалық ұйым арасындағы) ұқсастық күшінің шынайы екенін қабылдасақ, онда инженерлік топтардың формасы мен орналасуы туралы шешім қабылдайтын кез келген адам бағдарламалық жүйелер архитектурасына күшті ықпал ететінін де қабылдауымыз керек. Мұнда Рут Маланның сөзімен айтқанда, Конвей заңының логикалық салдары бар: «егер бізде менеджерлер... қай командалар қандай сервистерді құратынын шешсе, демек менеджерлер жүйе архитектурасын да жанама түрде шешіп отыр». 11

HR департаменті бағдарламалық жүйелер туралы қаншалықты біледі? Командалар арасында бюджетті қалай бөлу керектігін шешетін департамент басшылары өз таңдауларының бағдарламалық архитектураның өміршеңдігіне тигізетін ықтимал әсерлерін біле ме?

Конвей заңының негізінде жатқан гомоморфизмнің дәлелдері артып келе жатқанын ескерсек, бағдарламалық жүйелерді құратын ұйымдар үшін техникалық лидерлердің қатысуынсыз командалардың формасын, жауапкершілігін және шекараларын анықтау өте тиімсіз (бәлкім, жауапсыздық).

Ұйымдық дизайн мен бағдарламалық жасақтама дизайны, іс жүзінде, бір тиынның екі жағы сияқты және екеуін де бірдей хабардар адамдар тобы жүзеге асыруы керек. Аллан Келлидің бағдарламалық архитекторының рөлі туралы көзқарасы бұл идеяны одан әрі кеңейтеді:

Мен архитектормын деп есептейтін адамға техникалық және әлеуметтік дағдылардың екеуі де қажет екеніне бұрынғыдан да көбірек сенемін; олар адамдарды түсініп, әлеуметтік құрылым аясында жұмыс істеуі керек. Сондай-ақ олардың өкілеттігі таза технологиядан кеңірек болуы керек — олар ұйымдық құрылымдар мен кадрлық мәселелерде де сөз иесі болуы керек, яғни олар менеджер де болуы керек. 12

Негізінде, біз ұйымдық дизайнға техникалық адамдарды тартуымыз керек, өйткені олар API мен интерфейстер, абстракция, инкапсуляция және т. б. сияқты бағдарламалық жасақтама дизайнының негізгі ұғымдарын түсінеді. Наоми Стэнфорд мұны былай түсіндіреді: «департаменттер мен бөлімдер, жүйелер және бизнес-процестер... егер интерфейстер мен кеңірек ұйыммен шекаралар дизайнның бір бөлігі болса, тәуелсіз түрде жобалануы мүмкін». 13

Қажетсіз коммуникацияны шектеңіз

Конвей заңының бір маңызды салдары — барлық коммуникация мен ынтымақтастық пайдалы емес. Сондықтан қандай жұмыс түрі тығыз ынтымақтастықты қажет ететінін, ал қайсысы қажет етпейтінін анықтау үшін «командалық интерфейстерді» белгілеу маңызды. Көптеген ұйымдар коммуникация неғұрлым көп болса, соғұрлым жақсы деп есептейді, бірақ бұл шын мәнінде олай емес.

Бізге нақты командалар арасындағы фокусталған коммуникация қажет. Біз күтпеген коммуникацияны іздеп, оның себебін жоюымыз керек; Мануэль Соса мен оның әріптестері 2004 жылы ұшақ өндірісін зерттеу барысында анықтағандай, «менеджерлер өз күш-жігерін шешілмеген дизайн интерфейстерінің себептерін түсінуге... және модульдік жүйелердегі командалардың күтпеген өзара әрекеттесуіне бағыттауы керек». 14

Scrum өнімді дамыту тәсілінің негізін салушылардың бірі Майк Кон ұйым ішіндегі командалар арасындағы коммуникацияның денсаулығын бағалау үшін мынадай сұрақтар қояды: «Құрылым командалар арасындағы коммуникациялық жолдардың санын барынша азайта ма? ... Құрылым басқа жағдайда сөйлеспейтін командаларды сөйлесуге итермелей ме? 15

Бұл жерде Кон, егер логикалық тұрғыдан бағдарламалық архитектура дизайнына сүйенсек, екі команданың сөйлесуіне қажеттілік болмаса, бірақ олар сөйлесіп жатса, онда бірдеңе дұрыс емес екенін айтып отыр. API жеткілікті деңгейде емес пе? Платформа қолайсыз ба? Бір компонент жетіспей ме? Егер біз командалар арасында төмен өткізу қабілеттілігі бар байланысқа — немесе тіпті нөлдік байланысқа — қол жеткізе алсақ және бағдарламалық жасақтаманы қауіпсіз, тиімді, жылдам түрде әлі де құрып, шығара алсақ, онда солай істеуіміз керек. Бұл Хенрик Книбергтің «Real Life Agile Scaling» еңбегіне негізделген 2. 5-суретте көрсетілген. 16

Image segment 219

2.5-сурет: Командалар арасындағы коммуникация

Команда ішіндегі коммуникация жоғары өткізу қабілеттілігіне ие. Екі «жұптасқан» команда арасындағы коммуникация орташа өткізу қабілеттілігінде болуы мүмкін. Көптеген командалар арасындағы коммуникация төмен өткізу қабілеттілігінде болуы тиіс.

Коммуникацияны шектеудің қарапайым жолы — екі команданы кеңсенің әртүрлі бөліктеріне, әртүрлі қабаттарға немесе тіпті әртүрлі ғимараттарға көшіру. Егер командалар виртуалды болса немесе негізінен чат-мессенджерлер арқылы сөйлессе, командалар арасындағы байланыс көлемі мен үлгілері бағдарламалық архитектура үшін күтілетін өзара әрекеттесуге сәйкес келмейтін байланыстарды анықтауға көмектеседі.

Сол сияқты, егер үлкен команда жүйенің екі бөлек аймағымен үнемі айналысатын болса, бұл команданы әр бөлікке арналған екі кішігірім командаға бөлу пайдалы болуы мүмкін, бірақ бұл тек әртүрлі жүйелерде бірдей команда мүшелері жұмыс істейтін болса ғана тиімді. Егер бүкіл команда дизайн бойынша жүйенің бірнеше бөлігінде жұмыс істесе (мысалы, жаңа сервис және ескі компонент), команданы бірге ұстаңыз. (Ескі бағдарламалық жүйелерді ұзақ мерзімді «күтудің үздіксіздігі» үлгілері туралы көбірек 9-тарауда қараңыз. )

Кейде екі немесе одан да көп команда тек өз бөліктеріне арналған код бір нұсқаны басқару репозиторийінде болғандықтан немесе тіпті бір қосымшаның немесе сервистің бөлігі болғандықтан ғана сөйлесу қажеттілігін сезінуі мүмкін, ал логикалық тұрғыдан олар бөлек болуы керек. Мұндай жағдайларда бізге бағдарламалық жасақтаманы бөлек репозиторийлерде өмір сүре алатын кішігірім бөліктерге бөлу үшін «сыну жазықтығы» (fracture plane) үлгілерін (6-тарауда талқыланады) қолдану қажет.

Бәрі бәрімен сөйлесуі шарт емес

Ашық кеңістікті (open-plan) кеңселерде және әсіресе чат құралдары арқылы лезде байланысу мүмкіндігі болғанда, кез келген адам кез келген адаммен сөйлесе алады. Бұл жағдайда жұмысты аяқтау үшін бәрі бәрімен сөйлесуі керек болатын (тұтынушыға не маңызды екенін сүзіп алу жүктемесін артатын) коммуникация мен өзара әрекеттесу үлгісіне байқаусызда түсіп қалуға болады. Конвей заңы тұрғысынан бұл бағдарламалық жүйелер үшін күтпеген салдарға, әсіресе ішкі жүйелер арасындағы модульділіктің болмауына әкеледі.

Егер ұйымда «әркім чаттағы әр хабарламаны көруі керек» немесе «әркім үлкен стендап-жиналыстарға қатысуы керек» немесе «шешімдерді мақұлдау үшін жиналыстарда бәрі қатысуы керек» деген үміт болса, онда бізде ұйымдық дизайн мәселесі бар. Конвей заңы мұндай «көптің көппен» (many-to-many) коммуникациясы жылдам ағынды қолдамайтын монолитті, шатасқан, тығыз байланысқан, өзара тәуелді жүйелерді тудыруға бейім екенін көрсетеді. Коммуникацияның көп болуы міндетті түрде жақсы нәрсе емес.

Сақ болыңыз: Конвей заңын үстірт қолдану

Конвей заңын дұрыс түсінбеу және қажетті архитектураға жақсы сәйкес келетін сияқты көрінетін, бірақ іс жүзінде жылдам ағынға қатты кедергі келтіретін командалар жиынтығын құру қаупі бар. Сонымен қатар, командааралық құралдар мен коммуникация арасындағы байланыс жиі еленбейді немесе ескерілмейді, бірақ мұндай құралдар ұқсас дизайнның күшті драйвері болуы мүмкін. Бұл бөлімде біз Конвей заңын үстірт қолданудан туындайтын кейбір ықтимал қателіктерді анықтаймыз.

Құралдарды таңдау коммуникация үлгілерін айқындайды

Командалардың бағдарламалық коммуникация құралдарын пайдалану тәсілі командалар арасындағы коммуникация үлгілеріне күшті әсер етуі мүмкін. Заманауи бағдарламалық жүйелерді құру мен басқаруда қиындық көріп жүрген ұйымдардағы ортақ мәселе — командалар немесе департаменттердің жауапкершілік шекаралары мен құралдардың жауапкершілік шекаралары арасындағы сәйкессіздік. Кейде ұйымда бір құрал жеткілікті болатын жерде бірнеше құрал болады (ортақ көріністі қамтамасыз ететін). Басқа уақытта бір ғана құрал қолданылады және командаларға бөлек құралдар қажет болғандықтан мәселелер туындайды.

Біз көргеніміздей, Конвей заңы ұйымның өзінің коммуникациялық құрылымдарының көшірмесі болып табылатын дизайндарды шығаруға мәжбүр екенін айтады. Сондықтан біз ортақ құралдардың командалардың өзара әрекеттесу тәсіліне тигізетін әсерін ескеруіміз керек. Егер біз командалардың ынтымақтасқанын қаласақ, онда ортақ құралдардың мағынасы бар. Егер бізге командалар арасындағы нақты жауапкершілік шекарасы қажет болса, онда бөлек құралдар (немесе бір құралдың бөлек даналары) ең жақсы таңдау болуы мүмкін.

Бағдарламалық жасақтаманы әзірлеу тобы IT-операциялар <span data-term="true"> (жүйелік әкімшілендіру және техникалық қолдау бөлімі) </span> тобымен тығыз жұмыс істеуі керек делік; егер бұл екі топ үшін бөлек тикетинг немесе инциденттерді басқару құралдары болса, бұл командалар арасындағы байланыстың нашарлауына әкеп соғады. Бұл топтардың бірлесіп жұмыс істеуіне және ақпарат алмасуына көмектесу үшін екі топтың да қажеттіліктерін қанағаттандыратын ортақ құралды таңдауымыз керек. Сол сияқты, тек өндірістік ортаға (production) қауіпсіздік рұқсаты бар топтармен шектелген арнайы «тек өндіріс үшін» құралын пайдаланудан аулақ болу керек. Егер бұл құрал жасалып жатқан бағдарламалық жасақтамамен әрекеттессе немесе оны өлшесе, онда құралға қолжетімділіктің шектелуі рұқсаты бар және жоқ командалар арасында байланыс алшақтығын тудыруы мүмкін. Құрал ақпарат ағынына көмектесе алады немесе кедергі келтіруі мүмкін, демек, командалардың тиімді өзара әрекеттесуіне әсер етеді.

Қауіпсіздікті сақтай отырып, ақпаратты қолжетімді етіңіз.

Лог-агрегация <span data-term="true"> (бағдарлама жұмысының жазбаларын бір орталыққа жинақтау) </span> құралдары өндірістік логтарды қарауы қажет (мысалы, қателерді іздеу үшін), бірақ өндірістік ортаға тікелей рұқсаты жоқ әзірлеушілер үшін қарапайым шешім ұсынады. Мұндай құралдар барлық логтарды сыртқы орынға жібереді, онда олар бірге өңделеді және индекстеледі (қажет болса, анонимді түрде), бұл оқиғаларды жеке логтарға қарағанда жылдамырақ іздеуге және салыстыруға мүмкіндік береді. Командалар өздеріне қажетті ақпаратқа қол жеткізеді, сонымен бірге өндірістік қауіпсіздік бақылауы сақталады (тек логтардың қауіпсіз түрде тасымалдануын қамтамасыз ету керек).

Дегенмен, егер екі команда арасындағы жауапкершілік шекаралары сәйкес келмесе (командалардың рөлдері мүлдем бөлек және бірлесіп жұмыс істеу қажеттілігі аз болса), біз екі команда үшін бірдей инциденттерді бақылау құралын немесе тіпті бірдей мониторинг құралын талап етуден көп пайда көрмейміз. Бұл әсіресе командалардың бірі ұйымнан тыс қызмет көрсететін жағдайда өзекті.

Қорытындылай келе, командалар арасындағы өзара қарым-қатынасты ескермей, бүкіл ұйым үшін бірыңғай құрал таңдамаңыз. Тәуелсіз командалар үшін бөлек құралдарды, ал бірлесіп жұмыс істейтін командалар үшін ортақ құралдарды қолданыңыз.

Көптеген түрлі компоненттік командалар

Кейбір ұйымдар Конвей заңын жүйелердің шағын бөліктерін құруға бағытталған көптеген компоненттік командаларды құру үшін аңғалдықпен пайдаланды. Компоненттік командалар — оларды «күрделі ішкі жүйе командалары» <span data-term="true"> (арнайы терең білімді қажет ететін бөліктерге жауапты топтар) </span> деп атаған дұрыс — тек өте егжей-тегжейлі сараптама қажет болатын ерекше жағдайларда ғана қажет. Жалпы айтқанда, біз жылдам ағынды (flow) оңтайландыруымыз керек, сондықтан ағынға бағытталған (stream-aligned) командаларға басымдық беріледі. Бұл аспектілерді 5-тарауда толығырақ қарастырамыз.

Жеке билік аймақтарын құратын немесе штатты қысқартатын қайталанбалы қайта ұйымдастырулар

Бұрынғы көптеген «қайта ұйымдастырулардың» негізгі мақсаты қызметкерлер санын азайту немесе менеджерлер мен басшылар үшін жеке билік аймақтарын (fiefdoms) құру болды. Ұйымдық құрылымды Конвей заңына сәйкес өзгерткен кезде, біз ұйымдардың бағдарламалық жүйелер арқылы шешімдер іздейтін кеңістігін (контекст, шектеулер және т.б.) жақсартуды мақсат етеміз. Бұл екі тәсіл бір-біріне мүлдем қайшы келеді. Бағдарламалық жасақтама және «өнім» шығаратын компанияларда құрылым өнім архитектурасын алдын ала болжауы керек. Командаға бағытталған тәсілмен үйлескенде, басқарушылық себептермен жасалатын тұрақты қайта ұйымдастырулар өткеннің еншісінде қалуы тиіс.

Басқаруға ыңғайлы болу немесе қызметкерлер санын қысқарту үшін жасалатын тұрақты қайта ұйымдастырулар ұйымдардың бағдарламалық жүйелерді тиімді құру және пайдалану қабілетін тікелей бұзады. Конвей заңын, командалық когнитивтік жүктемені және оған қатысты динамиканы ескермейтін қайта ұйымдастырулар бала жасаған ашық жүрек отасы сияқты: өте жойқын болу қаупі бар.

Түйін: Конвей заңы технологиядағы тиімді команда дизайны үшін маңызды

Конвей заңы бізге ұйымның құрылымы мен командалар арасындағы нақты байланыс жолдары құрылған жүйелердің архитектурасында сақталатынын айтады. Олар бағдарламалық жасақтаманы жобалауды командалардың өздерін жобалаудан бөлек әрекет ретінде қарастыру талпыныстарын жоққа шығарады.

Бұл қарапайым заңның әсері өте ауқымды. Бір жағынан, ұйымның дизайны берілген жүйе архитектурасы үшін мүмкін болатын шешімдердің санын шектейді. Екінші жағынан, бағдарламалық жасақтаманы жеткізу жылдамдығы ұйым дизайны қаншалықты командалық тәуелділіктерді тудыратынына тікелей байланысты.

Жылдам ағын (fast flow) командалар арасындағы байланысты шектеуді талап етеді. Командалық ынтымақтастық әзірлеудің «сұр аймақтарында», яғни ілгерілеу үшін жаңалықтар ашу мен сараптама қажет болатын жерлерде маңызды. Бірақ жаңалық ашу емес, орындау басым болатын салаларда байланыс қажетсіз шығынға айналады.

Бағдарламалық жасақтама архитектурасына (және жеткізу жылдамдығы немесе сәтсіздіктен кейін қалпына келтіру уақыты сияқты артықшылықтарға) қол жеткізудің негізгі тәсілдерінің бірі — кері Конвей маневрін қолдану: командаларды қажетті архитектураға сәйкес жобалау. Біз ұйым деректер базасы бойынша мамандарды қолданбалы командаға қосу арқылы монолитті деректер базасынан қалай құтыла алатыны туралы қарапайым мысал келтірдік; бұл оларға жеке деректер қоймасын ұстау үшін жеткілікті автономия берді (мүмкін, деректер базасының дизайны немесе басқа базалармен синхрондау бойынша ұсыныстар алу үшін орталықтандырылған DBA <span data-term="true"> (деректер базасының әкімшілері) </span> командасына сүйене отырып).

Қысқасы, бағдарламалық жасақтама архитектурасын жобалау және/немесе командалық құрылымдарды қайта ұйымдастыру кезінде Конвей заңының әсерін ескере отырып, сіз бағдарламалық жасақтама архитектурасы мен команда дизайнын біріктіретін изоморфты күштің <span data-term="true"> (екі құрылымның бір-біріне ұқсас болуға ұмтылуы) </span> артықшылығын пайдалана аласыз.

3. Команданы бірінші орынға қою (Team-First Thinking)

Жоғары нәтижелі командаларды тарату — вандализмнен де сорақы: бұл корпоративтік психопатия. — Аллан Келли, Project Myopia

Ұйымдық мінез-құлық саласындағы мамандар ондаған жылдар бойы заманауи күрделі жүйелер команданың тиімді жұмысын талап ететінін біледі: атап айтқанда, доктор Дрискелл мен Салас біртұтас бөлімше ретінде жұмыс істейтін командалар көп ақпаратты қажет ететін, білімге негізделген мәселелерді шешуде жеке адамдардың жиынтығынан әлдеқайда жақсы нәтиже көрсететінін анықтады. Тіпті бұрын иерархиялық болған АҚШ армиясы сияқты ұйымдар команданы жұмыстың негізгі бірлігі ретінде қабылдады. «Team of Teams» бестселлерінде АҚШ армиясының отставкадағы генералы Стэнли МакКристал ең жақсы нәтиже көрсететін командалар «таңғажайып жетістіктерге олардың мүшелерінің жеке біліктілігіне бола емес, сол мүшелердің біртұтас ағзаға айналуы арқылы жететінін» атап өтеді.

Бағдарламалық жасақтаманы әзірлеуде заманауи жүйелер үшін қажетті өзгерістердің жылдамдығы, жиілігі, күрделілігі және әртүрлілігі командалардың маңызды екенін білдіреді. Заманауи бағдарламалық жасақтаманы құру және дамыту үшін қажетті ақпараттың көлемі мен сипатын түсіну және онымен тиімді жұмыс істеу үшін жеке адамдарға сену тұрақсыз болып табылады. Шын мәнінде, Google компаниясының өз командаларына жүргізген зерттеуі командада кім бар екенінен гөрі команда динамикасының маңыздырақ екенін; және өнімділікті өлшеуге келгенде, командалар жеке адамдарға қарағанда маңыздырақ екенін көрсетті. Сондықтан бағдарламалық жасақтаманы тиімді жеткізу үшін біз жұмысты командадан бастауымыз керек. Қарастыру және дамыту қажет бірнеше аспектілер бар: команда мөлшері, команданың өмір сүру ұзақтығы, командалық қарым-қатынастар және командалық таным.

Шағын, ұзақ өмір сүретін командаларды стандарт ретінде пайдаланыңыз

Бұл кітапта «команда» сөзінің нақты мағынасы бар. Команда деп біз ортақ мақсатқа жету үшін біртұтас бөлімше ретінде жұмыс істейтін бес-тоғыз адамнан тұратын тұрақты топты айтамыз. Біз команданы ұйым ішіндегі жұмыс жеткізудің ең кіші бірлігі деп санаймыз. Сондықтан ұйым ешқашан жұмысты жеке адамдарға бермеуі керек; тек командаларға тапсыруы тиіс. Бағдарламалық жасақтаманы жобалаудың, жеткізудің және пайдаланудың барлық аспектілерінде біз командадан бастаймыз.

Көптеген ұйымдарда тиімді команданың максималды мөлшері шамамен жеті-тоғыз адамды құрайды. Мысалы, Amazon өзінің бағдарламалық командаларының көлемін «екі пиццамен тамақтандыруға болатын» мөлшермен шектейтіні белгілі. Scrum сияқты танымал фреймворктар ұсынған бұл шектеу топты тану және сенімнің эволюциялық шектеулерінен — Данбар санынан <span data-term="true"> (антрополог Робин Данбардың құрметіне аталған, адамның тұрақты әлеуметтік байланыстар санының шегі) </span> туындайды. Данбар бір адам терең сенім арта алатын адамдар санының шегі он бес екенін анықтады. Олардың ішінде тек бес адамға жуығын ғана жақын танып, сенім білдіруге болады.

Командалардың сиқырлы жеті-тоғыз мөлшерінен асып кетуіне жол беру жасалып жатқан бағдарламалық жасақтаманың өміршеңдігіне қауіп төндіреді, себебі сенім бұзыла бастайды және сәтсіз шешімдер қабылдануы мүмкін. Ұйымдар командадағы адамдар арасындағы сенімді барынша арттыруы керек, ал бұл команда мүшелерінің санын шектеуді білдіреді.

Өзгерістерді жылдам жеткізу кезінде жоғары сенімнің нақты бағалануын және жобалануын қамтамасыз ету маңызды. Жоғары сенім командаға жаңалықтар енгізуге және эксперимент жасауға мүмкіндік береді. Егер адамдар тобының көптігіне байланысты сенім жетіспесе немесе азайса, жеткізу жылдамдығы мен қауіпсіздігі зардап шегеді.

Жоғары сенімге ие ұйымдар үлкенірек командаларды ұстап тұра алады.

Жеті-тоғыз ережесінен ерекше жағдайлар бар, бірақ олар сирек кездеседі. Егер ұйымда жоғары сенім мәдениеті, өзара құрмет және сәтсіздікті қабылдау өте жақсы дамыған болса, командалар он бес адамға дейін жұмыс істей алады. Дегенмен, біздің тәжірибемізде бұл критерийлерге сәйкес келетін ұйымдар өте аз.

Кішігірім мөлшер сенімді нығайтады

Команда мөлшеріне қойылған шектеу мен Данбар саны командалар тобына, департаменттерге, жұмыс ағындарына, бизнес бағыттарына және т.б. қолданылады. Данбар санынан бөлек, антропологиялық зерттеулер адамдармен болатын қарым-қатынас түрі мен тереңдігінің нақты шектеулері бар екенін көрсетеді:

Бес адамға жуық — біз жақын жеке қарым-қатынаста бола алатын және жұмыс жадымызда сақтай алатын адамдар шегі. Он бес адамға жуық — біз терең сенім білдіре алатын адамдар шегі. Елу адамға жуық — біз өзара сенімде бола алатын адамдар шегі. 150 адамға жуық — біз қабілеттерін есте сақтай алатын адамдар шегі.

Кейбір зерттеушілер тиімді әлеуметтік қарым-қатынастардың мүмкін болатын шегін 500 және 1500 деп анықтады (мұнда шамамен үш еселік көбейткіш жұмыс істейді). Негізгі мәселе — бізге ұнаса да, ұнамаса да — кез келген ұйым ішіндегі тиімді топтардың мөлшеріне табиғи шектеулер бар. Топтың мөлшері ұлғайған сайын, топ мүшелері арасындағы динамика мен мінез-құлық шамалы немесе түбегейлі өзгереді, ал кішігірім ауқымда жұмыс істеген үлгілер мен ережелер үлкен ауқымда жұмыс істемей қалуы мүмкін.

Командаларға тиімді жұмыс істеу үшін сенім қажет, бірақ егер топтың мөлшері қажетті сенім деңгейі үшін тым үлкен болса, бұл топ кішігірім бірлік болған кездегідей тиімді бола алмайды. Сондықтан бағдарламалық жүйелерді құратын және басқаратын ұйым ішінде командалық топтардың мөлшерін Данбар санымен саналы түрде шектеу маңызды. Бұл командалардан болжамды мінез-құлық пен өзара әрекеттесуді алуға көмектеседі:

Бір команда: шамамен бес-сегіз адам (салалық тәжірибеге негізделген). Жоғары сенімге ие ұйымдарда: он бес адамнан аспайды. Отбасылар («тайпалар»): елу адамнан аспайтын командалар тобы. Жоғары сенімге ие ұйымдарда: 150 адамнан аспайтын топтар. Бөлімшелер/ағындар/P&L (пайда мен зиян есебі) желілері: 150 немесе 500 адамнан аспайтын топтар.

Ұйымдар осы мөлшердегі Данбар-үйлесімді топтардан құралуы мүмкін; шектеулердің біріне жеткенде, басқа бірлікті жартылай тәуелсіз топ ретінде бөлу қажеттілігі туындайды. Біз бұл «Данбар бойынша масштабтауды» барған сайын үлкейетін немесе кішірейетін концентрлік шеңберлер ретінде елестете аламыз (Джеймс Льюистің «пияз» тұжырымдамасына негізделген 3.1-суретті қараңыз):

Image segment 267

3.1-сурет: Данбар санын пайдаланып командаларды масштабтау

Ұйымдық топтасулар шамамен бес адамнан (немесе бағдарламалық командалар үшін сегіз адамнан) басталып, кейін он бес, елу, 150, 500 және т.б. дейін өсетін Данбар санын сақтауы тиіс.

Бағдарламалық жүйелер арқылы жүзеге асырылатын өнімдер мен қызметтер контекстінде Данбар санымен анықталған шектеулер әртүрлі бизнес желілеріндегі немесе жұмыс ағындарындағы адамдар санының да нақты шектелуі керектігін білдіреді. Департаменттегі адамдар саны елуден (немесе 150-ден, 500-ден) асқанда, басқа топтармен ішкі және сыртқы динамика өзгереді. Бұл, өз кезегінде, командалар архитектураны тиімді иеленуді жалғастыруы үшін бағдарламалық жасақтама архитектурасын жаңа командалық топтармен қайта сәйкестендіру қажеттілігін білдіреді. Бұл біз «командаға бағытталған архитектура» <span data-term="true"> (team-first architecture) </span> деп атайтын нәрсенің мысалы болып табылады, ол көптеген ұйымдар үшін мүлдем жаңа ойлау тәсілін талап етеді; бірақ Amazon (өзінің «екі пицца» ережесімен) сияқты компаниялар мұның өте сәтті және масштабталатын тәсіл бола алатынын дәлелдеді.

Командаға бағытталған бағдарламалық жасақтама архитектурасы Данбар санына негізделеді.

Бағдарламалық жүйелердің архитектурасын Данбар санымен белгіленген адамдар арасындағы өзара әрекеттесу шектеулеріне сәйкес өзгертуге дайын болыңыз. Егер командаға бағытталған көзқараспен қолданылса, микросервистер сияқты тәсілдер көмектесе алады.

Жұмыс ағыны ұзақ өмір сүретін командаларға бағытталады

Командалардың қалыптасуына және тиімді болуына уақыт керек. Әдетте, команданың біртұтас бөлімшеге айналуы үшін екі аптадан үш айға дейін немесе одан да көп уақыт кетуі мүмкін. Егер команда сол ерекше күйге жетсе, ол жеке адамдарға қарағанда бірнеше есе тиімдірек бола алады. Команданың жоғары тиімділікке жетуі үшін үш ай қажет болса, біз оларға сол деңгейге жетуге мүмкіндік беретін тұрақтылықты қамтамасыз етуіміз керек.

Команда енді ғана жақсы жұмыс істей бастаған алты айлық жобадан кейін адамдарды әртүрлі командаларға қайта тағайындаудың мәні аз. Фред Брукс өзінің классикалық «The Mythical Man-Month» кітабында атап өткендей, командаға жаңа адамдарды қосу оның әлеуетін бірден арттырмайды (бұл Брукс заңы <span data-term="true"> деп аталады). Шын мәнінде, ол бастапқы кезеңде өнімділікті төмендетуі мүмкін. Адамдарды жұмысқа баулу (ramp-up) үшін уақыт қажет, сонымен қатар команда ішіндегі байланыс желілері әрбір жаңа мүшемен бірге айтарлықтай артады. Ол ғана емес, жаңа және ескі команда мүшелері бір-бірінің көзқарастары мен жұмыс әдеттерін түсініп, бейімделуі үшін эмоционалдық бейімделу (Такманның команда дамуы моделіндегі «шторминг» </span> (қақтығыс) кезеңі) қажет.

Команданың өмір сүру ұзақтығына қатысты ең жақсы тәсіл — Аллан Келли 2018 жылғы «Project Myopia» кітабында айтқандай, команданы тұрақты ұстап, «жұмысты командаға бағыттау». Командалар тұрақты болуы керек, бірақ статикалық емес, тек сирек және қажет болған жағдайда ғана өзгеруі тиіс.

Жоғары сенімге ие ұйымдарда адамдар команда өнімділігіне үлкен нұқсан келтірмей, жылына бір рет командаларын ауыстыра алады. Мысалы, бұлттық бағдарламалық жасақтама маманы Pivotal-да «инженер шамамен әр 9-12 ай сайын командасын ауыстыратын». Сенім деңгейі төмен типтік ұйымдарда адамдар бір командада ұзағырақ (мүмкін он сегіз ай немесе екі жыл) қалуы керек және командаға оның ұйымшылдығын жақсарту мен сақтау үшін коучинг берілуі тиіс.

Такманның өнімділік моделінен тыс

Такман моделі командалардың төрт кезеңде қалай жұмыс істейтінін сипаттайды:

Қалыптасу (Forming): алғаш рет жиналу. Шторминг (Storming): тұлғалық және жұмыс тәсілдеріндегі бастапқы айырмашылықтарды еңсеру. Нормалану (Norming): бірге жұмыс істеудің стандартты тәсілдерін әзірлеу. Орындау (Performing): жоғары тиімділік күйіне жету.

Дегенмен, соңғы жылдары Памела Найт сияқты адамдардың зерттеулері бұл модельдің толықтай дәл емес екенін және «шторминг» шын мәнінде команданың бүкіл өмірі бойы үздіксіз жүретінін анықтады. Ұйымдар жоғары өнімділікті сақтау үшін команда динамикасын үнемі дамытып отыруы керек.

Команда бағдарламалық жасақтаманы иеленеді

Шағын, ұзақ өмір сүретін командалар болған кезде, біз бағдарламалық жасақтаманы иеленуді (ownership) жақсарта аламыз. Командалық иелік заманауи жүйелерге өз жұмыс қабілетін сақтау және мақсатына сай болу үшін қажетті «күтімнің үздіксіздігін» қамтамасыз етуге көмектеседі. Сондай-ақ, командалық иелік командаға бағдарламалық жасақтама мен оның өміршеңдігіне жақсырақ қамқорлық жасау үшін бірнеше «көкжиекте» — зерттеу кезеңдерінен бастап пайдалану мен орындауға дейін — ойлауға мүмкіндік береді. Джез Хамбл, Джоан Молески және Барри О'Рейли өздерінің «Lean Enterprise» кітабында айтқандай: 1-көкжиек (Horizon 1) сол жылы нәтиже беретін өнімдер мен қызметтер арқылы жақын болашақты қамтиды; 2-көкжиек алдағы бірнеше кезеңді қамтиды; ал 3-көкжиек жаңа қызметтердің, өнімдер мен функциялардың нарыққа сәйкестігін бағалау үшін эксперименттер қажет болатын көптеген айлар алдағы уақытты қамтиды.

Бірнеше командаға бірдей жүйені немесе ішкі жүйені өзгертуге рұқсат берудің қауіптілігі — ешкім жасалған өзгерістерге немесе оның нәтижесінде туындаған бейберекеттікке жауап бермейді. Дегенмен, жүйені бір ғана команда иеленсе және команданың өз жұмысын жоспарлауға автономиясы болса, онда сол команда қысқа мерзімді түзетулерді келесі бірнеше аптада алып тастайтынын біле отырып, саналы шешімдер қабылдай алады. Осы әртүрлі уақыт көкжиектерін сезіну және иелену командаға кодқа тиімдірек қамқорлық жасауға көмектеседі.

Бағдарламалық жүйенің әрбір бөлігі тек бір командаға тиесілі болуы керек. Бұл компоненттердің, кітапханалардың немесе кодтың ортақ иелігі болмауы керектігін білдіреді. Командалар жұмыс уақытында (runtime) ортақ сервистерді пайдалана алады, бірақ әрбір жұмыс істеп тұрған сервис, қолданба немесе ішкі жүйе тек бір командаға тиесілі. Сыртқы командалар иелік етуші командаға кодты өзгерту туралы ұсыныстар (pull request) жібере алады, бірақ олар өздігінен өзгерістер енгізе алмайды. Иелік етуші команда басқа командаға белгілі бір уақытқа кодқа рұқсат беретіндей дәрежеде сенуі мүмкін, бірақ тек бастапқы команда ғана иелікті сақтайды.

Кодқа командалық иелік ету «территориялық» мәселе болмауы керек екенін ескеріңіз. Команда код үшін жауапкершілікті өз мойнына алады және оған қамқорлық жасайды, бірақ жеке команда мүшелері кодты басқаларды шығарып тастайтын өз меншігіндей сезінбеуі керек. Оның орнына, командалар өздерін жеке иелер емес, басқарушылар немесе қамқоршылар ретінде көруі керек. Кодқа қарауды полициялық бақылау емес, бағбандық сияқты деп ойлаңыз.

Команда мүшелеріне «команда бірінші кезекте» деген ойлау тәсілі қажет

Жеке адам емес, команда жұмыс жеткізудің негізгі құралы болуы тиіс. Егер біз осы «команда бірінші кезекте» тәсілін ұстанатын болсақ, командамыздағы адамдардың да осындай ойлау тәсіліне ие болуын (немесе дамытуын) қамтамасыз етуіміз керек. Бұл кейбір адамдар үшін бейтаныс болуы мүмкін, бірақ дұрыс коучинг пен үйренуге уақыт бөлінсе, көптеген адамдар бейімделеді.

Командалар жұмыс істеуі үшін команда мүшелері команданың қажеттіліктерін өз мүдделерінен жоғары қоюы керек. Олар:

Стэндаптар мен жиналыстарға уақытында келуі; Талқылаулар мен зерттеулерді бағыттан тайдырмай ұстауы; Командалық мақсаттарға назар аударуды ынталандыруы; Жаңа жұмысты бастамас бұрын команданың басқа мүшелеріне кедергілерді жоюға көмектесуі; Жаңа немесе тәжірибесі аз команда мүшелеріне тәлімгер болуы; Дауларда «жеңіске жетуден» аулақ болып, оның орнына нұсқаларды зерттеуге келісуі керек.

Дегенмен, коучингке қарамастан, кейбір адамдар командада жұмыс істеуге жарамсыз немесе команда қажеттіліктерін өз мүдделерінен жоғары қоюға дайын емес. Мұндай адамдар командалық жұмысты бұзуы мүмкін, ал төтенше жағдайларда командаларды жойып жіберуі ықтимал. Мұндай адамдар «команда үшін улы» (team toxic) болып табылады және зиян келтірмей тұрып оларды алып тастау керек. Бұл салада көптеген зерттеулер бар. Мысалы, бір зерттеу «ұжымдық бағытталған команда мүшелері эгоцентрлік мүшелерге қарағанда басқа команда мүшелерінің тапсырмаларына көбірек көңіл бөлетінін және командалық өзара әрекеттесу кезінде өз жұмысын жақсартатынын» анықтады.

Командалардағы әртүрлілікті қабылдаңыз

Жылдам өзгеретін талаптар мен технологиялар жағдайында командалар өздеріне жүктелген міндеттерді шешудің жаңа және шығармашылық жолдарын үнемі тауып отыруы және басқа командалармен тиімді байланыс орнатуы керек. Азаматтық және әскери контексттердегі соңғы зерттеулер әртүрлі ортадан шыққан мүшелері бар командалар шығармашылық шешімдерді жылдамырақ шығаруға бейім екенін және басқа командалардың қажеттіліктерін жақсырақ түсінетінін (эмпатия) көрсетеді.

Адамдардың бұл әртүрлі құрамы жақсы нәтижелерге де ықпал ететін сияқты, өйткені команда мүшелері өздерінің бағдарламалық жасақтамасын пайдаланушылардың контексті мен қажеттіліктері туралы азырақ болжам жасайды. «Peopleware» атты ықпалды кітаптың авторлары Том ДеМарко мен Тимоти Листер «сәл ғана гетерогенділік (әртүрлілік) ұйымшыл команда құруға үлкен көмек бола алатынын» атап өтеді. Жаңа мүмкіндіктерді ашу тұрғысынан алғанда, әртүрлі көзқарастар мен тәжірибенің болуы командаларға шешімдер кеңістігін әлдеқайда жылдам шарлауға көмектеседі. «Guide to Organisation Design» авторы Наоми Стэнфорд айтқандай: «адамдар мен ұйымдар әртүрлілік оң энергия беретін жұмыс күшінен пайда көреді».

Жеке адамдарды емес, бүкіл команданы марапаттаңыз

Жеке тұлғаларды емес, бүкіл команданы марапаттаңыз

«Out of the Crisis» (Кризистен шығу) кітабының авторы және Lean (үнемді өндіріс — шығындарды азайтуға бағытталған басқару тұжырымдамасы) қозғалысының негізгі тұлғасы У. Эдвардс Деминг менеджментке арналған он төрт нүктесінің бірі ретінде «жылдық немесе еңбек рейтингінен және мақсаттар бойынша басқарудан бас тартуды» атап өтті. 20 Қазіргі ұйымдарда жеке нәтижені марапаттауға тырысу көбінесе нашар нәтижелерге әкеледі және қызметкерлердің мінез-құлқына нұқсан келтіреді. Жеке бонустарды пайдаланудың ең зиянды түрі — компаниялар оны жыл соңындағы пайданы арттыру құралы ретінде қолданған кезде көрінеді. Дағдарыс жылы болса, жеке адамның керемет еңбегі үшін бонус аз берілуі немесе мүлдем берілмеуі мүмкін. Бұл адамның еңбегі мен ол алатын бонустың арасындағы сәйкессіздікті күшейтіп, реніш пен мотивацияның төмендеуіне әкеледі.

Команданы бірінші орынға қою тәсілінде бүкіл команда ортақ күш-жігері үшін марапатталады. 1990-шы және 2000-шы жылдардағы табысты кезеңінде Nokia технологиялық компаниясындағы жұмыстың айқындаушы ерекшеліктерінің бірі мынадай болды: «Ұйым бойынша жалақы айырмашылығы төмендетілді. Бонустар аз болды және әдетте жеке емес, командалық негізде және компанияның жалпы көрсеткіштеріне байланысты төленді». 21

Дәл осы қағиданы оқыту бюджеттеріне де қолдануға болады. Команданы бірінші орынға қою тәсілінде әрбір жеке тұлғаға емес, бүкіл командаға бірыңғай оқыту бюджеті бөлінеді. Егер команда бір адамды жыл бойы алты немесе жеті конференцияға жібергісі келсе (себебі ол алған білімін командаға өте жақсы жеткізе біледі), бұл команданың өз шешімі болуы керек.

Жақсы шекаралар когнитивті жүктемені азайтады

Команданы жеткізудің негізгі құралы ретінде бекіткеннен кейін, ұйымдар командаға түсетін когнитивті жүктеменің (мидың ақпаратты өңдеуге жұмсайтын күші) тым жоғары болмауын қамтамасыз етуі керек. Тым жоғары когнитивті жүктемені талап ететін бағдарламалық жүйелермен жұмыс істейтін команда бағдарламалық жасақтаманы тиімді басқара алмайды немесе оны қауіпсіз дамыта алмайды. Бұл бөлімде біз өзгерістердің жылдам ағынын қауіпсіз ілгерілету үшін командалардағы когнитивті жүктемені қалай анықтауға және шектеуге болатынын қарастырамыз.

Команданың міндеттерін когнитивті жүктемеге сәйкестендіру

Қазіргі бағдарламалық жасақтаманы жеткізудегі кедергілерді арттыратын, бірақ ең аз ескерілетін факторлардың бірі — командалар жұмыс істеуі тиіс код базаларының (бағдарламаның барлық бастапқы кодының жиынтығы) үнемі өсіп отыратын көлемі мен күрделілігі. Бұл командалар үшін шексіз когнитивті жүктеме тудырады.

Когнитивті жүктеме код жазумен аз айналысатын, бірақ дәстүрлі операциялық немесе инфрақұрылымдық команда сияқты тапсырмаларды орындаумен көбірек айналысатын командаларға да қатысты. Олар да жауапкершілік салалары, басқаруы тиіс қосымшалар саны мен құралдар тұрғысынан шамадан тыс когнитивті жүктемеден зардап шегуі мүмкін.

Команданы бірінші орынға қою тәсілінде команданың міндеттері ол көтере алатын когнитивті жүктемеге сәйкес келеді. Бұның оң әсері командалардың қалай құрылатынын және олардың ұйым бойынша бір-бірімен қалай әрекеттесетінін өзгерте алады.

Бағдарламалық жасақтаманы жеткізу командалары үшін когнитивті жүктемеге командалық тұрғыдан қарау — команда жұмыс істейтін жүйенің көлемін шектеуді білдіреді; яғни ұйымдар бағдарламалық жүйенің когнитивті жүктемеден асып кетуіне жол бермеуі керек. Бұл бағдарламалық жүйелердің формасы мен архитектурасына үлкен және түбегейлі әсер етеді, бұны біз кітаптың келесі бөлімдерінде көреміз.

Когнитивті жүктемені 1988 жылы психолог Джон Свеллер «жұмыс жадында қолданылатын ақыл-ой күшінің жалпы мөлшері» деп сипаттаған. 22 Свеллер когнитивті жүктеменің үш түрін анықтайды:

Ішкі (intrinsic) когнитивті жүктеме — мәселенің өзіне тән негізгі аспектілеріне қатысты (мысалы, «Java класының құрылымы қандай?», «Жаңа әдісті қалай жасауға болады?»). Сыртқы (extraneous) когнитивті жүктеме — тапсырма орындалатын ортаға қатысты (мысалы, «Бұл компонентті тағы қалай орналастырамын (deploy)?», «Бұл сервисті қалай конфигурациялаймын?»). Маңызды (germane) когнитивті жүктеме — оқу немесе жоғары нәтиже үшін ерекше назар аударуды қажет ететін тапсырма аспектілеріне қатысты (мысалы, «Бұл сервис ABC сервисімен қалай әрекеттесуі керек?»).

Мысалы, веб-қосымша әзірлеушісі үшін ішкі когнитивті жүктеме — бұл қолданылатын бағдарламалау тілін білу; сыртқы жүктеме — динамикалық тестілеу ортасын іске қосуға қажетті командалардың егжей-тегжейлері болуы мүмкін; ал маңызды жүктеме — әзірлеуші бағдарламалап жатқан бизнес саласының нақты аспектілері (мысалы, шот-фактура жүйесі немесе бейне өңдеу алгоритмі). Джо Пирстің бағдарламалық жасақтаманы әзірлеу контекстіндегі когнитивті жүктеме бойынша жұмысы көптеген қосымша мысалдар береді. 23

Жалпы айтқанда, заманауи бағдарламалық жүйелерді тиімді жеткізу және пайдалану үшін ұйымдар ішкі когнитивті жүктемені азайтуға (оқыту, технологияларды дұрыс таңдау, жұмысқа алу, жұптық бағдарламалау және т. б. арқылы) және сыртқы когнитивті жүктемені толығымен жоюға (жұмыс жадында сақтаудың мәні аз және автоматтандыруға болатын жалықтыратын немесе артық тапсырмалар) тырысуы керек. Бұл маңызды когнитивті жүктемеге (яғни, «қосымша құн» тудыратын ойлау процесіне) көбірек орын қалдырады.

Осы тараудың басында көргеніміздей, бағдарламалық жүйелерді құратын және басқаратын команда үшін жетіден тоғыз мүшеге дейінгі тиімді максималды шек бар (34-беттегі 3. 1-суретті қараңыз), сондықтан белгілі бір команда көтере алатын когнитивті жүктеменің де шегі болады. Көптеген ұйымдар бағдарламалық жүйенің бөліктеріне жауапкершілік тағайындау кезінде командалардың когнитивті жүктемесін ескермейді, керісінше, мәселеге көбірек команда қосу арқылы когнитивті жүктеме командалар арасында бөлінеді деп есептейді. Оның орнына, командалар Брукс заңында айтылғандай коммуникация мен өзара әрекеттесу қиындықтарынан зардап шегеді.

Егер біз командаға оның когнитивті мүмкіндігінен тыс жүйе бөлігі үшін жауапкершілік беріп, оған қысым жасасақ, ол жоғары нәтижелі бірлік ретінде жұмыс істеуін тоқтатады. Команда мүшелері бұл шешімдердің команда мүддесіне сай келетінін ойлауға мұршасы болмай, тек өз тапсырмаларын орындауға тырысатын жеке тұлғалардың тобына айналады.

Команда үшін когнитивті жүктемені шектеу — команда жұмыс істейтін жүйе асты бөлігінің немесе аймағының көлемін шектеуді білдіреді. Дрискелл мен оның әріптестері өздерінің ғылыми мақаласында мынадай тактиканы ұсынды: «Тиімді командалық жұмыс маңызды болып табылатын жағдайларда, тапсырманы жеңілдету үшін оны құрылымдау қажет болуы мүмкін (яғни, ішкі тапсырмаларды басқаларға тапсыру арқылы), осылайша назар негізгі тапсырма мен командалық жұмысқа аударылады». 24

Сонымен қатар, командаға қазіргі ішкі және сыртқы жүктемені (оқыту, жаттығу, автоматтандыру және басқа да пайдалы әдістер арқылы) үнемі азайтуға тырысу үшін мүмкіндік беру керек.

Когнитивті жүктемені доменнің салыстырмалы күрделілігі арқылы өлшеу

Когнитивті жүктемені бағалаудың қарапайым және жылдам жолы — командадан ешқандай сынсыз сұрау: «Сіз өзіңізді тиімді сезінесіз бе және сізге берілген жұмысқа уақтылы жауап бере аласыз ба? »

Бұл дәл өлшем болмаса да, жауап командалардың шамадан тыс жүктелгенін анықтауға көмектеседі. Егер жауап теріс болса, ұйымдар когнитивті жүктеменің неге жоғары екенін түсіну үшін кейбір эвристикаларды (тәжірибеге негізделген ережелер) қолдана алады. Егер жүктеме шынымен жоғары болса, ұйым когнитивті жүктемені азайту үшін қажетті қадамдарды жасауы керек, осылайша команданың қайтадан тиімді және белсенді болуын қамтамасыз етеді. Бұл, өз кезегінде, команда мүшелерінің өз жұмысынан көбірек құндылық пен мақсат көруіне байланысты мотивация деңгейін арттырады.

Код жолдары, модульдер саны, кластар немесе әдістер сияқты қарапайым өлшемдер арқылы бағдарламалық жасақтаманың когнитивті жүктемесін анықтауға тырысу — қате жол. Компьютер зерттеушісі Грейлин Джей мен оның әріптестері 2009 жылы кейбір бағдарламалау тілдерінің басқаларына қарағанда көлемдірек екенін анықтады (және микросервистер — күрделі қолданбаны кішігірім қызметтерге бөлу тәсілі пайда болғаннан кейін көп тілді жүйелер жиілей түсті), ал абстракцияларды көбірек қолданатын және кодты қайта пайдаланатын командалардың код базасы кішірек, бірақ міндетті түрде қарапайым болмауы мүмкін. 25

Когнитивті жүктемені өлшегенде, бізді шын мәнінде доменнің күрделілігі қызықтырады — бағдарламалық жасақтама арқылы шешуге тырысатын мәселеміз қаншалықты күрделі? Домен (сала) — бағдарламалық жасақтама көлеміне қарағанда кеңірек ұғым. Мысалы, үздіксіз жеткізуді (CD) қолдау үшін құралдар тізбегін іске қосу және дамыту әдетте көптеген құралдарды біріктіруді және тестілеуді талап етеді. Біраз автоматтандыру коды қажет болады, бірақ ол тұтынушыға арналған қосымшаны құруға қажетті кодтан әлдеқайда аз. Домендер бізге жалпылама ойлауға және ортақ эвристикаларды қолдануға көмектеседі.

Когнитивті жүктеме үшін нақты формула болмаса да, біз белгілі бір команда жауапты домендердің санын және салыстырмалы күрделілігін (ұйым ішіндегі) бағалай аламыз. Бірінші тарауда айтқан OutSystems компаниясының Engineering Productivity командасы өздері жауапты домендердің (құрастыру және үздіксіз интеграция, үздіксіз жеткізу, тестілеуді автоматтандыру және инфрақұрылымды автоматтандыру) өздерін шамадан тыс жүктегенін түсінді. Команда үнемі тым көп жұмысқа тап болды және контекстті ауыстыру (бір жұмыстан екіншісіне көшу) басым болды. Командада домендік білім жеткіліксіз деген жалпы сезім болды, бірақ оны меңгеруге инвестиция салуға уақыт болмады. Іс жүзінде олардың когнитивті жүктемесінің көп бөлігі сыртқы (артық) болды, бұл маңызды ішкі немесе маңызды жүктемеге өте аз орын қалдырды.

Команда әрқайсысы бір доменге/өнім аймағына жауапты микро-командаларға бөліну туралы батыл шешім қабылдады: IDE өнімділігі, платформалық сервер өнімділігі және инфрақұрылымды автоматтандыру. Өнімділік бойынша екі микро-команда тиісті өнім аймақтарымен сәйкестендірілді. Домендер бір-бірімен сирек қабаттасатын; сондықтан бұрынғы бір командалық модель ережеге емес, ерекше жағдайларға оңтайландырылған еді. Жаңа құрылымда командалар домен аралық мәселелер бойынша тығыз жұмыс істеді (тіпті қажет болған жағдайда уақытша микро-командалар құрды), бірақ бұл тұрақты құрылым емес еді.

Бірнеше айдан кейін нәтижелер олардың ең жақсы күткендерінен де асып түсті. Әрбір микро-команда бір доменді меңгеруге назар аудара алғандықтан, мотивация артты (сонымен қатар оларда енді жетекші болмады, бұл командалық шешімдерге мүмкіндік берді). Әр команданың миссиясы түсінікті болды, контекстті ауыстыру азайды және команда ішілік байланыс жиіледі. Тұтастай алғанда, жұмыс ағыны мен сапасы айтарлықтай жақсарды.

Бір командаға келетін домендердің саны мен түрін шектеу

Анықтап айтсақ, «бұл команда үшін домендердің дұрыс саны мен түрі осы ма? » деген сұраққа нақты жауап жоқ. Домендер де, команданың когнитивті мүмкіндігі де тұрақты емес. Бірақ доменнің салыстырмалы күрделілігі туралы ой толғау командалардың жауапкершілігі мен шекараларын қалыптастыруға көмектеседі. Доменнің күрделілігіне күмәнданған кезде, әрқашан жауапты команданың сезіміне басымдық беріңіз. Көбірек доменді бір командаға сыйғызу үшін күрделілікті төмендетіп көрсету (мысалы, «Үздіксіз жеткізуге арналған құралдар көп — бұл қиын емес») тек сәтсіздікке әкеледі.

Жұмысты бастау үшін әр команда айналысатын айқын домендерді анықтаңыз және оларды қарапайым (жұмыстың көп бөлігінің анық жолы бар), күрделілеу (өзгерістерді талдау керек және дұрыс шешім табу үшін бірнеше қайталау қажет болуы мүмкін) немесе өте күрделі (шешімдер көптеген эксперименттер мен ізденістерді қажет етеді) деп жіктеңіз. Алынған жіктеуді командалар арасындағы домен жұптарын салыстыру арқылы нақтылаңыз: А домені В доменімен салыстырғанда қалай? Олардың күрделілігі ұқсас па әлде біреуі анық күрделі ме? Қазіргі жіктеу соны көрсете ме?

Бірінші эвристика — әр доменді бір командаға тағайындау. Егер домен бір команда үшін тым үлкен болса, бір доменнің жауапкершілігін бірнеше командаға бөлмей, алдымен доменді ішкі домендерге бөліп, содан кейін әрбір жаңа ішкі доменді бір командаға тағайындаңыз. (Үлкен домендерді қалай бөлуге болатыны туралы көбірек ақпаратты 6-тараудан қараңыз. )

Екінші эвристика — бір команда (жетіден тоғыз адамға дейінгі оңтайлы мөлшерді ескере отырып) екі-үш «қарапайым» доменді қамти алуы керек. Мұндай домендер процедуралық сипатта болғандықтан, домендер арасында контекстті ауыстыру шығыны төзімдірек болады, себебі жауаптар механикалық болып келеді. Бұл контекстте команда үшін қарапайым домен — бұл тек шағын, кездейсоқ, қарапайым өзгерістері бар ескі бағдарламалық жүйе болуы мүмкін. Дегенмен, жұмыстың күнделікті сипатына байланысты команда мүшелерінің мотивациясы төмендеу қаупі бар.

Үшінші эвристика — өте күрделі доменге жауапты командаға басқа домен берілмеуі керек, тіпті қарапайым болса да. Бұл жұмыс ағынының бұзылу шығынына (күрделі мәселелерді шешу уақыт пен зейінді талап етеді) және басымдық беруге (қарапайым, болжамды мәселелерді олар пайда болған бойда шешуге бейімділік болады, бұл бизнес үшін маңызды өте күрделі мәселелердің шешілуін одан әрі кешіктіреді) байланысты.

Соңғы эвристика — екі күрделілеу доменге жауапты бір командадан аулақ болу. Бұл сегіз немесе тоғыз адамнан тұратын үлкенірек командада мүмкін болып көрінуі мүмкін, бірақ іс жүзінде команда екі ішкі команда (әр доменге біреуден) ретінде әрекет етеді, бірақ бәрінен екі доменді де білу талап етіледі, бұл когнитивті жүктемені және үйлестіру шығындарын арттырады. Оның орнына, команданы бес адамнан тұратын екі бөлек командаға бөлген дұрыс (тағы бір-екі мүшені жұмысқа алу арқылы), сонда олардың әрқайсысы көбірек зейін қойған және автономды бола алады. (44-беттегі 3. 2-суретті қараңыз. )

Image segment 330

3. 2-сурет: Бір командаға бірден көп күрделілеу немесе өте күрделі домен берілмеуі керек

Бұрын: үлкен команда төрт доменге (екі күрделілеу және екі өте күрделі) шашырап, жақсы нәтиже көрсетуге қиналады. Жиі контекстті ауыстыру және жеке тұлғалардың жұмыстан алшақтауы команда ішіндегі рухқа теріс әсер етеді. Кейін: әрқайсысы бір доменге бағытталған бірнеше кішігірім командалармен мотивация артады және команда жұмысты жылдамырақ әрі болжамды түрде жеткізеді. Командалар арасындағы төмен өткізу қабілеттілігі бар ынтымақтастық екі немесе одан да көп доменге әсер ететін кездейсоқ мәселелерді шешуге мүмкіндік береді.

Әдеттегідей, бұл тек ұсыныстар, табысқа жететін нақты жол емес. Бұл нұсқаулықтарды ұйымыңыз дамып, тәжірибе жинақтаған сайын бейімделуге болатын бастапқы нүкте ретінде пайдаланыңыз. Әрқашан есте сақтаңыз: соңында, домендерді бөлу қисынды болып көрінсе де, жұмысты орындайтын командалар әлі де шамадан тыс жүктемені сезінсе, стресс жинақталып, рух әлсірейді, бұл нашар нәтижелерге әкеледі.

Бағдарламалық жасақтама шекарасының көлемін команданың когнитивті жүктемесіне сәйкестендіру

Бағдарламалық жасақтаманы жеткізу командалары тиімді болуы және жүйелердің бөліктерін басқара алуы үшін біз бағдарламалық жүйелердің көлеміне және шекаралардың орналасуына команданы бірінші орынға қою тәсілін қолдануымыз керек. Жүйені дерексіз түрде жобалаудың орнына, біз жүйені және оның бағдарламалық шекараларын жеткізу командаларындағы қолжетімді когнитивті жүктемеге сәйкес келетіндей етіп жобалауымыз керек.

Монолитті архитектура немесе микросервистік архитектура арасында таңдау жасаудың орнына, бағдарламалық жасақтаманы команданың максималды когнитивті жүктемесіне сәйкес келетіндей етіп жобалаңыз. Тек сонда ғана біз тұрақты, қауіпсіз және жылдам бағдарламалық жасақтаманы жеткізуге үміттене аламыз. Бағдарламалық шекараларға арналған бұл командалық тәсіл кішігірім, бөлектелген сервистер сияқты бағдарламалық архитектураның белгілі бір стильдерін қолдауға әкеледі. Біз бағдарламалық жүйелер шекараларына арналған бұл командалық тәсілді 3. 3-суреттен көре аламыз (45-бетті қараңыз).

Image segment 337

3. 3-сурет: Әдеттегі және Команданы бірінші орынға қоятын бағдарламалық жүйе шекаралары

Сол жақта біз әдеттегі бағдарламалық жүйе шекараларын көреміз, мұнда жүйелердің немесе өнімдердің әртүрлі бөліктері бірнеше командалардың, жеке командалардың және жеке тұлғалардың қоспасына тағайындалған. Оң жақта біз Team Topologies-тің бағдарламалық жүйе шекараларына арналған командалық тәсілін көреміз, мұнда жүйенің әрбір бөлігі команда көлеміне сәйкес және бір командаға тиесілі.

Команда жауапты бағдарламалық жүйенің немесе доменнің көлемін арттыру үшін команданың когнитивті мүмкіндігін барынша арттыру мақсатында (ішкі және сыртқы жүктеме түрлерін азайту арқылы) команда жұмыс істейтін экожүйені реттеңіз:

Командаға бағытталған жұмыс ортасын (физикалық немесе виртуалды) қамтамасыз етіңіз. (Бұл туралы толығырақ осы тараудың соңында білесіз). Кездесулерді шектеу, электрондық хаттарды азайту, сұрауларды қолдау үшін арнайы команданы немесе адамды тағайындау және т.б. арқылы жұмыс аптасында команданың алаңдауын азайтыңыз. Маккристал «Team of Teams» кітабында «Көз бақылауда, қол бос» (Eyes On, Hands Off) деп атағандай, «қалай» дегенге тым мән бермей, мақсаттар мен нәтижелерді жеткізу арқылы басқару стилін өзгертіңіз.26 Жақсы құжаттама, дәйектілік, жақсы UX (пайдаланушы тәжірибесі) және басқа да DevEx (әзірлеуші тәжірибесі) тәжірибелері арқылы командаңыздың кодын және API-ларын қолданатын басқа командалар үшін әзірлеуші тәжірибесінің сапасын арттырыңыз. Оның негізінде бағдарламалық жасақтама құратын командалар үшін когнитивті жүктемені азайтуға арнайы жасалған платформаны пайдаланыңыз.

Осы және ұқсас тәсілдер арқылы командалар мен оның мүшелері үшін артық ақыл-ой шығындарын белсенді түрде азайта отырып, ұйымдар командаларға бағдарламалық жүйелердің неғұрлым күрделі бөліктерін қабылдауға көбірек когнитивті кеңістік бере алады. Керісінше, егер ұйымда командаға бағытталған кеңсе кеңістігі, жақсы басқару тәжірибесі және әсіресе командаға бағытталған платформа болмаса, онда командалар қабылдай алатын бағдарламалық жүйелердің көлемі кішірек болады. Кішігірім бөліктердің көп болуы олармен жұмыс істеу үшін көбірек командаларды қажет етеді, бұл шығындарды арттырады. Когнитивті жүктемені ескере отырып жобалау арқылы бағдарламалық жүйе шекараларына командалық тұрғыдан қарау — бақытты командаларды және (соңында) шығындардың төмендеуін білдіреді.

Шешімдер тобының жетекшісі Альберт Бертилссон мен веб-әзірлеуші Густаф Нилссон Котте 2017 жылы IKEA-да өздері жетекшілік ететін мобильді командаға түсетін үнемі өсіп келе жатқан когнитивті жүктеменің салмағын сезінді. Олардың айтуынша, өткен жылы қысқа уақыт ішінде және бірнеше нарықтарда бірнеше жобаларды сәтті жеткізу нәтижесінде команда үнемі өсіп отырған.

Бұл жоғары нәтижелі команда өздері қолдайтын бағдарламалық өнімдердің саны артқан сайын өз иықтарына көбірек жауапкершілік жүктей берді. Соңында, кейбір жұмыс ағындары басқаларының шығарылуына кедергі келтіруіне байланысты олар қиындықтарға тап бола бастады. Команда тарапынан түсінікті қарсылыққа қарамастан, Бертилссон мен Котте команда мүшелерін бір код базасында іс жүзінде екі өнім бар екеніне және Конвей заңына сүйеніп, команданы екіге бөлу керек екеніне сендіре алды. Мұнда ескеретін қызықты жайт — бұл барлық ішкі мотиваторлары (автономия, шеберлік және мақсат) бар жоғары нәтижелі команда болса да, олар бәрібір когнитивті шамадан тыс жүктеменің зардабын сезінді.

Бағдарламалық шекараларға командалық тұрғыдан қараудың тағы бір артықшылығы — команда жұмыс істеп жатқан бағдарламалық жасақтаманың ортақ ментальды моделін оңай қалыптастыруға бейім болады. Зерттеулер көрсеткендей, командалық ментальды модельдердің ұқсастығы команда жұмысының жақсы көрсеткіші болып табылады, бұл қателіктердің азаюын, неғұрлым біртұтас кодты және нәтижелердің жылдамырақ жеткізілуін білдіреді. 27 Біз команда үшін көбірек оңтайландыруды бастаған сайын, артықшылықтар оң бағытта еселене түседі.

«Басқалар үшін когнитивті жүктемені азайту» — жақсы бағдарламалық жасақтаманы әзірлеуге арналған ең пайдалы эвристикалардың бірі.

«Командалық API» жобалау және командалық өзара әрекеттесуді жеңілдету

Енді біз команданы жеткізудің негізгі құралы ретінде көргендіктен, команда айналасында басқа нәрселерді жобалауды бастай аламыз. Бұл бөлімде біз анық байланысатын командалардың біртұтас, динамикалық желісін құру тәсілдері ретінде командалық API және жақсы анықталған командалық өзара әрекеттесу сияқты ұғымдарды зерттейміз.

Кодты, құжаттаманы және пайдаланушы тәжірибесін қамтитын «Командалық API»-ларды анықтау

Кодты, құжаттаманы және пайдаланушы тәжірибесін қамтитын «Командалық API» түсінігін анықтаңыз

Бағдарламалық жүйелердің нақты бөліктеріне иелік ететін тұрақты, ұзақ уақыт жұмыс істейтін командалар болғанда, біз тұрақты командалық API (бағдарламалық өзара әрекеттесу интерфейсі) — әр команданы қоршап тұратын интерфейсті құруды бастай аламыз. API — бұл бағдарламалық жасақтамамен бағдарламалы түрде қалай әрекеттесу керектігі туралы сипаттама мен спецификация, сондықтан біз бұл идеяны командамен болатын барлық өзара әрекеттесулерге таратамыз. Командалық API келесілерді қамтиды:

Код: команда шығарған орындалу уақытындағы соңғы нүктелер (endpoints), кітапханалар, клиенттер, пайдаланушы интерфейсі (UI) және т.б.

Нұсқалау: команданың өз коды мен сервистеріндегі өзгерістер туралы хабарлау тәсілі (мысалы, нәрселерді бүлдірмеу туралы «командалық уәде» ретінде <span data-term="true">SemVer</span> — бағдарламалық жасақтама нұсқаларының маңыздылығын білдіретін семантикалық нұсқалауды қолдану).

Wiki және құжаттама: әсіресе команда иелігіндегі бағдарламалық жасақтаманы қолдану бойынша нұсқаулықтар.

Тәжірибелер мен принциптер: команданың жұмыс істеудің қолайлы әдістері.

Коммуникация: команданың чаттар мен бейнеконференциялар сияқты қашықтан байланысу құралдарына деген көзқарасы.

Жұмыс туралы ақпарат: команда қазір немен айналысып жатыр, алда не күтіп тұр және қысқа немесе орта мерзімді перспективадағы жалпы басымдықтар.

Басқалары: басқа командаларға осы командамен әрекеттесу үшін қажет болуы мүмкін кез келген нәрсе.

Командалық API басқа командалар үшін қолданылу ыңғайлылығын (usability) нақты ескеруі керек: Басқа командаларға бізбен әрекеттесу оңай әрі түсінікті ме, әлде қиын және түсініксіз бе? Жаңа команда үшін біздің код пен жұмыс тәжірибемізге бейімделу қаншалықты оңай? Басқа командалардың pull request-теріне (кодқа өзгеріс енгізу туралы ұсыныс) және басқа ұсыныстарына қалай жауап береміз? Біздің командалық бэклог пен өнімнің жол картасы басқа командаларға оңай көріне ме және түсінікті ме?

Бағдарламалық жасақтамаға тиімді «команда бірінші кезекте» иелік етуі үшін, командалар өздерінің командалық API-ын үнемі анықтап, жарнамалап, сынап және дамытып отыруы керек. Бұл оның тұтынушылары — басқа командалар үшін мақсатына сай болуын қамтамасыз етеді. Dynamic Reteaming (Хайди Хелфанд) кітабында кәсіпорын деңгейіндегі ірі PaaS (дайын есептеу платформасын қызмет ретінде ұсыну моделі) провайдері Pivotal Cloud Foundry (PCF) бағдарламалық басқару директоры Эван Уайли PCF-те елуден астам команданың қалай жұмыс істейтінін сипаттайды:

Біз командалар арасында келісімшартқа негізделген, API-ға негізделген жауапкершіліктерді бөлуді мүмкіндігінше сақтауға тырысамыз. Біз командалар арасында код базаларын бөліспеуге тырысамыз. Нақты бір команданың функциясына арналған барлық git репозиторийлері толығымен сол командаға тиесілі және егер басқа команда сол код базасына толықтыру немесе өзгеріс енгізгісі келсе, олар мұны pull request арқылы немесе командааралық жұптасып бағдарламалау (pairing) арқылы жасайды.

Командалық API-ға бұдан да қатаң көзқарас AWS бұлттық вендорында қолданылады, онда бас директор Джефф Безос командалар арасындағы оқшауланудың өте жоғары деңгейін талап етті. Мысалы, AWS-тегі әрбір команда «әрбір [басқа команда] сервис деңгейлерін, квоталарды және шектеулерді талап ететін әлеуетті DOS (жүйе ресурстарын шамадан тыс жүктеу арқылы істен шығаруға бағытталған шабуыл) шабуылдаушысы болады» деп есептеуі керек.

Жақсы командалық API-ды құрайтын көптеген мінез-құлықтар мен үлгілер жалпы жақсы платформа мен командалық өзара әрекеттесулерге де тән.

Сенім, хабардарлық және оқу үшін командалық өзара әрекеттесуге жағдай жасаңыз

Ұқсас дағдылары мен тәжірибесі бар әртүрлі командалардың адамдары бір-бірінен үйрену және кәсіби құзыреттіліктерін дамыту үшін жиналуына уақыт, кеңістік және қаражат бөлу маңызды.

Командалар мен адамдардың өзара байланысуы мен білім алуына нақты уақыт пен орын бөлу арқылы ұйымдар оқуды және сенім ұялатуды тиімді командалық өзара әрекеттесуге ықпал ететін ырғақтың бір бөлігіне айналдыра алады. Бұл командаларға сенім мен хабардарлықты қалыптастыруға және жаңа нәрселерді үйренуге көмектесетін екі маңызды жол: (1) саналы түрде жобаланған физикалық және виртуалды орта; және (2) гильдияларда, тәжірибелік қауымдастықтарда (ортақ қызығушылығы бар адамдардың бірлесіп оқу тобы), ішкі технологиялық конференцияларда және т. б. жұмыс орнынан тыс уақыт өткізу.

Бұл командалық өзара әрекеттесу негізгі бағдарламалық жүйелерді құру мен іске қосудан тыс болғандықтан, Конвей заңы әлдеқайда аз рөл атқарады және командалар арасында еркін байланыс орнайды. Ең бастысы, осындай контексттерде өздерінің командалық өзара әрекеттесулерін жаттықтыруға мүмкіндігі бар командалар бағдарламалық жүйелерді құру және іске қосу кезінде басқа командалармен әрекеттесуді оңайырақ табады.

Командалық өзара әрекеттесуге көмектесу үшін физикалық және виртуалды ортаны арнайы жобалаңыз

Командалар білім алуы және сенім ұялатуы үшін саналы түрде жобаланған физикалық және виртуалды орталар қажет. Дегенмен, әртүрлі адамдарға нәтижелі болу үшін әртүрлі уақытта әртүрлі орта қажет. Кейбір тапсырмалар (мысалы, күрделі алгоритмді енгізу және тестілеу) толық зейінді және төмен шу деңгейін талап етуі мүмкін. Басқа тапсырмалар өте тығыз ынтымақтастықты қажет етеді (мысалы, пайдаланушы хикаяларын және қабылдау критерийлерін анықтау). Күні бойы құлаққаппен жұмыс істейтін адамдар антиәлеуметтік ретінде көрінеді және олардың мінез-құлқы өзара әрекеттесу мен ынтымақтастыққа ықпал етпейді; бірақ кеңсе ортасы жалпы шулы болуы мүмкін және бұл адамдар тиімді болу үшін тыныш ортаны қажет етуі ықтимал.

Жеке кабиналар да, толық ашық жоспарлы (open-plan) орындар да командалар үшін әдетте жарамсыз: бізге жақсырақ нәрсе керек. Командаларға ішкі жағынан жиі, ал сыртқы жағынан (басқа командалармен) тек кейде ынтымақтастық жасау мүмкіндігі қажет. Бұл тепе-теңдікке ашық жоспарлы орналасуда (команда үшін арнайы жұмыс аймағы жоқ) және жеке жұмыс кеңістігінде (бірге өткізетін уақытты алдын ала жоспарлау керек және жиналыс бөлмелері жиі тапшы) қол жеткізу қиын. Spotify бұны ерте кезеңде түсініп, кеңсе кеңістігін екі қажеттілікті де қолдайтындай етіп ұйымдастырды.

Тиімді бағдарламалық жасақтаманы жеткізуге арналған кеңсе дизайны келесі жұмыс режимдерінің барлығын қамтуы керек: шоғырландырылған жеке жұмыс, команда ішіндегі бірлескен жұмыс және командааралық бірлескен жұмыс.

Қандай жұмыс түрі жүріп жатқанын нақты көрсететін жұмыс кеңістігінің болуы да мазасыздықты және қажетсіз кедергілерді азайтуға көмектеседі.

КЕЙС-СТАДИ: CDL-дегі командаға бағытталған кеңсе кеңістігі

CDL — бөлшек сауданы сақтандыру секторында нарық көшбасшысы болып табылатын Ұлыбританияда орналасқан компания.

CDL-де біздің Agile жолымыз көптеген жағынан дамыды. Көптеген адамдарды қызықтыратын мәселелердің бірі — біздің командалар үшін жұмыс ортасын қалай ұйымдастыратынымыз. Бастапқыда біз өз командаларымызды бір жерде орналастыра алдық. Жаңа кеңсеге көшіп, кейін оған сыймай қалған соң, біз әзірлеушілер командаларын ескі штаб-пәтерімізге көшірдік, бұл бізге әр команда өз үйін құра алатын бірнеше шағын бөлмелерді берді. Бізге бұл орын мен иелік ету сезімі ұнады, бірақ командааралық байланыс пен басқа командалардың көрінуі оңтайлы болмады. Біздің жаңа ғимаратымыз — «The Codeworks» салынған кезде, біз әзірлеу аймақтарының жоспары қандай болуы керектігін мұқият ойластырдық.

Біз бәрін визуалды түрде көрсеттік, сондықтан көптеген магнитті тақталар маңызды болды. Бізге ескі ғимарат берген командалық кеңістік ұнады, бірақ командалардың оқшаулануын азайту керек болды. Біз «benched bay» (орындықтар мен үстелдер қатары) тәсілін ойлап таптық: әр команда үшін бір ұзын үстел және әр үстел тақта бөлімдерімен қоршалған. Команда үстелі қабырғаға тірелетін жерлерде біз оған сурет салуға болатындай арнайы бояумен боядық.

Image segment 377
  1. 4-сурет: CDL-дегі кеңсе жоспары

Командалардың көлемі мен өсуі де дизайндағы маңызды фактор болып табылады. Біздің үстелдер орналасуы команданың оңай өсуіне мүмкіндік берді. Команда тым үлкен болғанда, біз оны екі шағын командаға бөлдік. Бұның артықшылығы — әр команда ескі команданың мәдениетін өзімен бірге ала кетеді. Біз әдейі әртүрлі көлемдегі бөлімдерді жасадық, онда қажет болса қосымша бір-екі үстел орналастыруға болады.

Кейінірек біз үстелдерді бір шетіне жақынырақ орналастыру тиімдірек екенін түсіндік. Бұл бір жағында команданың жиналуы үшін көбірек орын берді, сонымен қатар қарама-қарсы тақталарды тиімді пайдалануға мүмкіндік берді.

Бұл дизайн мінсіз емес. Біз қателесеміз, бірақ үйренуді және бейімделуді жалғастырамыз. Бір тәжірибеміз — үстелдердің ортасындағы шағын шыны бөлімдерді алып тастау болды. Тағы бірі — үстелдердің шетінде бойына қарай реттелетін бөліктерді орнату болды.

CDL кейс-стадиі көрсеткендей, физикалық жұмыс ортасы командалардың тиімді әрекеттесу қабілетіне айтарлықтай әсер етеді. Табысты ұйымдар өз қызметкерлері үшін жақсы физикалық ортаға қол жеткізуге уақыт пен қаражат жұмсайды.

Мысалы, ING Netherlands банкі 2015 жылы командаларды құндылықтар ағынына (value streams) сәйкестендіру үшін кеңсе кеңістігін арнайы қайта жобалады. ING-де бір ағын ішінде ұқсас өнімдермен жұмыс істейтін бірнеше squad-тар (сегіз адамға дейінгі шағын команда) «тайпаны» (tribe) құрайды. Әр тайпаның кеңседе жеке аймағы бар. Кеңсе жоспарының мұқият ойластырылғандығы басқа командалардың жұмысын (мысалы, канбан тақталарын, WIP — аяқталмаған жұмыс шектеулерін) оңай көруге және жаңа тәсілдерді тез үйренуге мүмкіндік береді.

Кейс-стади: Auto Trader-дегі ағынға негізделген ынтымақтастыққа арналған кеңсе жоспары

2013 жылы біз баспа бизнесінен 100% цифрлық бизнеске көше бастағанда, ынтымақтастықты жақсарту және жұмыс ағынын оңтайландыру жолдарын іздестірдік. Біз он бес кеңсені үшеуге айналдырдық. Жұмыс ортасы мүмкіндігінше ашық жоспарлы етіп жасалды, барлық аға менеджерлер өз командаларымен бірге отырды және жеке кабинеттер болмады.

Біздің жаңа кеңселеріміз ынтымақтастық үшін салынды:

Техникалық және техникалық емес командаларды бір қабаттарда орналастыру: Бұл ортақ мақсаттары мен тұтынушылары бар бөлімдер арасындағы кедергілерді жоюға көмектесті.

Таза үстел саясаты: Біз жеке заттар үшін шкафтар бердік және адамдарды кеңседе қозғалуға, сол күні құндылық қосу үшін қажет жерде отыруға ынталандырдық.

Технологиялық шектеулер: Үстелдер бір монитормен жасалды, сонда адамдар қарсы отырғандарды көріп, еркін араласа алады. Үстелдердің аяқтары да адамдар арасында кедергісіз қозғалуға ыңғайлы етіп жасалды.

Жазуға болатын қабырғалар: Бейресми, шығармашылық әңгімелерді ынталандыру үшін қабырғаларға жазуға болатын етіп жасалды. Жиналыс бөлмелерінің көбі шыныдан жасалды.

Іс-шаралар кеңістігі: Біз ұйымнан тыс адамдармен танысу және жұмыс істеу үшін іс-шаралар өткізетін кеңістіктер жасадық.

Қазір бізде белгілі бір бизнес бөліміндегі барлық адамдар бірге отырады. Бұл бір бизнес ағынындағы барлық адамдардың «қиындықты бірге сезінуін» және барлық шешімдердің бірлесіп қабылдануын білдіреді.

Біздің кеңсе жоспарымыз ағынға және нақты ынтымақтастыққа көмектесу үшін өте мұқият жасалған. Бұл орналасу командаларға өздерінің бизнес ағынына назар аударуға көмектеседі, күнделікті жұмысты орындау үшін басқа бизнес аймақтарының командаларымен сөйлесу қажеттілігін азайтады.

Виртуалды орта да өте маңызды, өйткені көптеген ұйымдар «қашықтан жұмыс бірінші кезекте» саясатын қабылдауда. Виртуалды орта wiki, ішкі және сыртқы блогтар, чат құралдары, жұмысты қадағалау жүйелері және т. б. цифрлық кеңістіктерден тұрады. Тиімді қашықтан жұмыс істеу тек қажетті құралдардың болуымен шектелмейді; командалар жұмыс уақыты, жауап беру уақыты, бейнебайланыс, коммуникация тоны және басқа да практикалық аспектілер бойынша негізгі ережелерді келісіп алуы керек.

Коммуникация тиімділігі тұрғысынан виртуалды ортада шарлау оңай болуы керек. Атап айтқанда, чат құралдарында арна атаулары болжауға және іздеуге оңай болуы керек, топтық чаттар үшін префикстер қолданылуы тиіс:

#deploy-pre-production . . . #practices-engineering #practices-testing . . . #support-environments #support-logging #support-onboarding . . . #team-vesuvius #team-kilimanjaro #team-krakatoa

Виртуалды ортада пайдаланушы есімдерінде команданы анықтауды жеңілдететін атау конвенцияларын қолдану пайдалы болуы мүмкін. Чатта жай ғана «Jai Kale» деп жазғанның орнына, оның платформалық командада екенін білдіру үшін «[Platform] Jai Kale» деп көрсеткен жөн.

Ескерту: Инженерлік тәжірибелер — бұл негіз Сайып келгенде, технологиялық командалар үздіксіз жеткізу (бағдарламаны автоматты түрде жиі шығару әдісі), «алдымен тест» әдісімен әзірлеу және бағдарламаның жұмысқа қабілеттілігі мен шығарылуына назар аудару сияқты дәлелденген командалық тәжірибелерге инвестиция салуы керек. Оларсыз командалық жұмыс пен ағынға жұмсалған барлық күш-жігер айтарлықтай әлсірейді.

Түйін: Командалардың когнитивтік жүктемесін шектеңіз және жылдамдату үшін командалық өзара әрекеттесуге жағдай жасаңыз

Жылдам өзгеретін және қиын контекстте командалар жеке адамдар топтарына қарағанда тиімдірек. Табысты ұйымдар команданы жұмысты орындаудың негізгі құралы ретінде қарастырады. Командалар әдетте шағын, тұрақты және ұзақ өмір сүреді, бұл команда мүшелеріне өздерінің жұмыс үлгілері мен командалық динамикасын дамытуға уақыт пен кеңістік береді.

Ең маңыздысы, команда мөлшерінің шектеулеріне (Данбар саны) байланысты, бір команда көтере алатын когнитивтік жүктеменің тиімді жоғарғы шегі бар. Бұл кез келген команда жұмыс істеуі керек бағдарламалық жүйелердің көлемі мен домендердің күрделілігіне шектеу қоюды талап етеді. Команда өздері жауапты жүйеге немесе қосалқы жүйелерге иелік етуі керек. Бірнеше код базасында жұмыс істейтін командаларда иелік ету сезімі және тиісті жүйелерді түсіну мен сау күйде ұстау үшін ақыл-ой кеңістігі жетіспейді.

Командаға бағытталған тәсіл ұйымдағы көптеген адамдардың дамуына мүмкіндік береді. Жеке тұлғаларды бөлшектейтін ұйымда аман қалу үшін «төзімділік» қажет болса, командаға бағытталған ұйымда адамдар өз дағдылары мен тәжірибесін команда контекстінде дамытуға мүмкіндік пен қолдау алады.

Ең бастысы, күнделікті жұмыс барысында жеке тұлғалар арасындағы байланысқа емес, командалар арасындағы байланысқа басымдық берілгендіктен, ұйым түрлі қарым-қатынас формаларын қолдайды: оңаша сөйлескенді ұнататындардан бастап, үлкен топтық талқылауларды ұнататындарға дейін. Сонымен қатар, бұрынғы зиянды тұлғалардың теріс әсері шектеледі. Бұл гуманистік тәсіл — командаларды бірінші орынға қоюдың үлкен артықшылығы.

II БӨЛІМ Ағын үшін тиімді команда топологиялары

НЕГІЗГІ ТҮЙІНДЕР

4-ТАРАУ

Ad hoc (белгілі бір жағдайға байланысты туындаған, жоспарланбаған әрекет) немесе үнемі өзгеріп отыратын команда дизайны бағдарламалық қамтамасыз етуді жеткізуді баяулатады.

Бірыңғай жалғыз дұрыс команда топологиясы жоқ, бірақ кез келген ұйым үшін тиімсіз бірнеше топологиялар бар.

Топологияны таңдау кезінде техникалық және мәдени жетілу деңгейі, ұйымның ауқымы және инженерлік тәртіп шешім қабылдаудың маңызды факторлары болып табылады.

Атап айтқанда, «фича-команда/өнім командасы» үлгісі өте қуатты, бірақ ол тек қолдау көрсететін орта болғанда ғана жұмыс істейді.

Команданың жауапкершілігін бөлу силостарды (бөлімдердің бір-бірінен оқшауланып, ақпарат алмаспаспауы) жоюға және басқа командалардың мүмкіндіктерін арттыруға көмектеседі.

5-ТАРАУ

Төрт негізгі команда топологиясы қазіргі заманғы бағдарламалық командалардың өзара әрекеттесуін жеңілдетеді.

Саладағы жалпы команда түрлерін негізгі топологияларға сәйкестендіру ұйымдарды табысқа жетелейді, меншік құқығындағы түсініксіздіктерді жояды және командалардың шамадан тыс жүктелуін немесе бос тұруын болдырмайды.

Негізгі топология — (бизнес) ағынға бағытталған (stream-aligned); қалған барлық топологиялар осы түрді қолдауға арналған.

Басқа топологияларға қолдаушы (enabling), күрделі қосалқы жүйелер (complicated-subsystems) және платформа (platform) жатады.

Топологиялар үлкен ауқымда жиі «фракталды» (өзіне-өзі ұқсас) болып келеді: командалардан тұратын командалар.

6-ТАРАУ

Бағдарламалық шекараларды командаға бағытталған тәсіл арқылы таңдаңыз.

Бағдарламалық қамтамасыз етуді жеткізу тізбегіндегі жасырын монолиттерден (барлық функциялары бір блокқа жинақталған күрделі жүйе) және тығыз байланыстардан сақтаныңыз.

Бизнес-доменнің шектелген контекстерімен (bounded contexts) анықталған бағдарламалық шекараларды пайдаланыңыз.

Қажет және сәйкес болған жағдайда бағдарламалық шекаралардың балама нұсқаларын қарастырыңыз.

4. Статикалық команда топологиялары

Командаларды техникалық білімге немесе қызмет түріне қарай емес, бизнес-домен салаларына қарай құрыңыз. — Ютта Экштейн, «Feature Teams—Distributed and Dispersed»

І бөлімде біз Конвей заңының (жүйе дизайны оны жасаған ұйымның байланыс құрылымын қайталайды деген қағида) команда құрылымы мен байланыс жолдарын айнадай бейнелеу арқылы жүйе архитектурасына қалай әсер ететінін көрдік. Сондай-ақ, бағдарламалық қамтамасыз етуді тиімді жеткізу үшін жылдам ағынға қол жеткізетін ұзақ өмір сүретін автономды командаларға негізделген «команда бірінші кезекте» тәсілі қажет екенін атап өттік. II бөлімде біз осы екі идеяны ағынды барынша арттыратын, бірақ командалардың танымдық жүктемесін ескеретіндей етіп қалай біріктіруге болатынына назар аударамыз.

4-тарауда біз командаларды саналы түрде жобалау қажеттілігінен және жақсы немесе нашар команда үлгілері ұйымның көлемі, жетілуі және бағдарламалық қамтамасыз ету ауқымы сияқты көптеген факторларға байланысты екенін түсінуден бастаймыз. Бүгінгі таңда командаларды құрудың немесе қайта ұйымдастырудың басым тәсілі — ұзақ мерзімді бейімделу қабілетіне емес, шұғыл қажеттіліктерге бағытталған жүйесіз (ad hoc) тәсіл.

Ең жоғары тиімділікке қол жеткізу үшін біз командаларымыздың кездейсоқ немесе ретсіз қалыптасуына жол бермей, оларды саналы түрде жобалауымыз керек. Біз мұндай саналы түрде жасалған командалық құрылымдарды команда топологиялары (командалардың құрылымы мен өзара байланыс үлгілері) деп атаймыз. Бұл термин командалардың ұйымда мақсатты түрде «орналастырылуы» керектігін мойындайды және әр команданың жауапкершілік шекарасына сілтеме жасайды.

Бұл тарауда біз статикалық команда топологияларының мысалдарын қарастырамыз — бұл белгілі бір уақыт кезеңінде нақты ұйымның контекстіне сәйкес келетін командалық құрылымдар мен өзара әрекеттесулер. Атап айтқанда, біз көптеген ұйымдар үшін жақсы әрі қолжетімді бастапқы нүкте болатын DevOps Topologies (DevOps топологиялары) каталогына сүйенетін боламыз.

Бірақ алдымен, жүйесіз команда дизайнының нәтижесінде пайда болатын бірнеше жалпы анти-үлгілерге (anti-patterns) тоқталайық.

Командалық анти-үлгілер

Көріп отырғанымыздай, Конвей заңына сәйкес, бағдарламалық жүйелерді жасау және пайдалану үшін адамдардың командаларға қалай ұйымдастырылғаны алынған жүйелердің сипатына қатты әсер етеді.

Ұйымдар командалық құрылымдар мен өзара әрекеттесу үлгілері туралы анық ойланбаған кезде, олар бағдарламалық жүйелерді құру мен іске қосуда күтпеген қиындықтарға тап болады. Клиенттермен жұмыс істеу барысында біз әртүрлі көлемдегі ұйымдарда команда құрудың екі ерекше анти-үлгісін байқадық.

Бірінші анти-үлгі — жүйесіз (ad hoc) команда дизайны. Бұған байланыс шығындары өскендіктен тым үлкен болып кеткен және бөлінген командалар; барлық COTS (дайын коммерциялық бағдарламалық өнімдер) бағдарламаларын немесе барлық аралық бағдарламалық жасақтаманы күту үшін құрылған командалар; немесе деректер қорының нашар өңделуі салдарынан өндірістегі апаттан кейін құрылған DBA (деректер қорының администраторы) командасы жатады. Әрине, бұл жағдайлардың барлығы қандай да бір әрекетті талап етеді, бірақ командалар арасындағы өзара байланыстың кеңірек контекстін ескермей, табиғи шешім болып көрінген нәрсе жеткізуді баяулатып, командалардың автономиясын шектеуі мүмкін.

Тағы бір жалпы анти-үлгі — команда мүшелерін ауыстырып тұру (shuffling). Бұл жоба негізінде жиналып, аяқталғаннан кейін бірден таратылатын, мүмкін қолданбаны қолдау және техникалық қызмет көрсету фазалары үшін бір-екі инженерді қалдыратын өте тұрақсыз командаларға әкеледі. Жоғары икемділік сезімі мен мерзімдерге тезірек жауап беру қабілеті бар болып көрінгенімен, жаңа командаларды құру және контекстті үнемі ауыстыру шығындары ескерілмейді. Компьютер А бөлмесінде болсын, Б бөлмесінде болсын бірдей жұмыс істейді, бірақ А командасына қойылған инженер Б командасындағыға қарағанда мүлдем басқаша нәтиже көрсетуі мүмкін.

Ұйымдар мынадай сұрақтарды қою арқылы командаларды мақсатты түрде жобалауы керек: Біздің дағдыларымызды, шектеулерімізді, мәдени және инженерлік жетілуімізді, қажетті бағдарламалық архитектура мен бизнес мақсаттарымызды ескере отырып, қандай команда топологиясы нәтижелерді тезірек және қауіпсіз жеткізуге көмектеседі? Негізгі өзгерістер ағынында командалар арасындағы жұмыс тапсыруды (handovers) қалай азайтуға немесе болдырмауға болады? Жүйенің өміршеңдігін сақтау және жылдам ағынды ынталандыру үшін бағдарламалық жүйенің шекаралары қай жерде болуы керек? Біздің командалар осыған қалай бейімделе алады?

Өзгерістер ағыны үшін жобалау

Ауқымды бағдарламалық жүйелерді құратын және іске қосатын ұйымдар идеядан жұмыс істейтін бағдарламалық жасақтамаға дейінгі өзгерістер ағынына — біз «кедергісіз» бағдарламалық қамтамасыз етуді жеткізу деп атайтын нәрсеге басымдық беретін ұйымдық дизайндарға көшуде. Түрлі департаменттер арасында функционалдық силостары бар, аутсорсингті көп қолданатын және командалар арасында жұмысты бірнеше рет тапсыратын ескі ұйымдық модельдер қазіргі заманғы бизнес қызметтерінің дамуы үшін қажетті жылдамдық пен қауіпсіздікті қамтамасыз ете алмайды. Наоми Стэнфорд атап өткендей, «егер ұйым саналы түрде жобаланған болса, оның табысқа жету мүмкіндігі жоғары болады».

Spotify бағдарламалық қамтамасыз етуді жеткізу мен пайдаланудың тиімділігін арттыру үшін нақты ұйымдық дизайнның жақсы мысалын ұсынады. «Spotify моделі» ретінде белгілі Spotify техникалық қызметкерлері шағын, автономды, кросс-функционалды скводтарға (squads) бөлінген, олардың әрқайсысының ұзақ мерзімді миссиясы бар және шамамен бес-тоғыз адамнан тұрады. Ұқсас салаларда жұмыс істейтін бірнеше скводтар трайбқа (tribe) біріктірілген. Трайб ішіндегі скводтар басқа скводтардың жұмысымен таныс және трайб ішінде үйлестіріледі.

Трайб ішіндегі ұқсас дағдылары мен құзыреттері бар инженерлер өз тәжірибелерімен чаптер (chapter) арқылы бөліседі. Мысалы, трайбтағы алты скводтағы барлық тестерлер тестерлер чаптерінің мүшесі бола алады. Тікелей басқару да чаптерлер арқылы жүзеге асырылады, бірақ чаптер жетекшісі тек басқарушы емес, сонымен бірге скводтың күнделікті жұмысына да қатысады. Сондай-ақ, Spotify бірнеше трайбтарды, чаптерлерді және скводтарды біріктіретін тәжірибе қоғамдастығына ұқсас кеңірек гильдияны (guild) пайдаланады. «Чаптерлер мен гильдиялар... компанияны біріктіретін желім іспетті, автономияны тым көп құрбан етпестен ауқымды үнемдеуді қамтамасыз етеді».

Көптеген ұйымдар Spotify командалық келісімдерінің негізгі мақсатын, мәдениетін, динамикасын немесе даму жолын түсінбестен, осы модельді қате көшіріп алды. Книберг пен Иварссон өз мақалаларында анық айтқандай: «Біз бұл модельді ойлап тапқан жоқпыз. Spotify (кез келген жақсы Agile компаниясы сияқты) тез дамып келеді. Бұл мақала біздің қазіргі жұмыс істеу тәсіліміздің бір сәттік көрінісі ғана — бұл аяқталған сапар емес, жалғасып жатқан сапар».

Командалардың өзара әрекеттесу дизайнын қарастырған кезде ұйымдар адамдарды жай ғана статикалық орналастырудан гөрі көбірек нәрсені ескеруі өте маңызды.

Ағын мен сезуді қамтамасыз ету үшін командалық өзара байланысты қалыптастыру

Көптеген ұйымдарда бағдарламалық жүйелерді құру және іске қосу бөлігі ретінде командалардың өзара әрекеттесу тәсілінде айтарлықтай кемшіліктер бар. Атап айтқанда, мұндай ұйымдар бағдарламалық қамтамасыз етуді жеткізу — бұл сипаттамадан дизайнға, дизайндан кодтауға, кодтаудан тестілеуге және шығаруға, ал шығарудан күнделікті жұмысқа (BAU) апаратын бір жақты процесс деп есептейтін сияқты (4. 1-суретті қараңыз).

Image segment 446

4. 1-сурет: Өзгерістер ағыны үшін оңтайландырылмаған ұйым

Өзгерістердің дәстүрлі ағыны оңтайландырылмаған ұйымда: әртүрлі қызмет түрлеріне ие топтар жұмысты келесі командаға тапсырып отырады. Жұмыс істеп тұрған жүйелерден бағдарламалық жасақтаманы құратын командаларға ешқандай ақпарат кері қайтпайды.

Бұл өзгерістердің сызықтық, кезеңдік тізбегі — әдетте әр кезең үшін бөлек функционалды силостық бөлімдері бар (4. 1-суретте көрсетілгендей) — қазіргі заманғы бағдарламалық жүйелердің өзгеру жылдамдығы мен күрделілігіне мүлдем сәйкес келмейді. Бағдарламалық жасақтаманы әзірлеу процесі оның тірі ортада қалай жұмыс істейтінінен ештеңе үйренбейді деген болжам түбегейлі қате. Керісінше, әзірлеушілер командаларын бағдарламалық жасақтаманың тірі ортада жұмыс істеуіне қатыстыратын ұйымдар пайдаланушыларға көрінетін және операциялық мәселелерді оқшауланған бәсекелестеріне қарағанда әлдеқайда жылдам шешеді (65-беттегі 4. 2-суретті қараңыз).

Image segment 450

4. 2-сурет: Өзгерістер ағыны үшін оңтайландырылған ұйым

Жылдам ағын үшін құрылған ұйымдар жұмысты ағынға бағытталған (stream-aligned) команда ішінде сақтау арқылы жұмыс тапсырудан (hand-offs) аулақ болады және операциялық ақпараттың командаға кері қайтуын қамтамасыз етеді.

«Accelerate» кітабында Николь Форсгрен, Джез Хамбл және Джин Ким дүние жүзіндегі жүздеген ұйымдардың бағдарламалық қамтамасыз етуді әзірлеу тәжірибесі туралы деректер жинап, келесідей қорытындыға келді: «біз... жеткізу командаларының кросс-функционалды болуын, яғни жүйені жобалау, әзірлеу, тестілеу, орналастыру және пайдалану үшін қажетті барлық дағдылардың бір командада болуын қамтамасыз етуіміз керек». Жұмыс істеп тұрған (өндірістік) жүйелерден келетін ақпараттық кері байланысты бағалайтын ұйымдар бағдарламалық жасақтаманы тезірек жетілдіріп қана қоймай, сонымен қатар тұтынушылар мен пайдаланушыларға деген жоғары сезімталдықты дамыта алады.

Бұл жоғары «сезу» (нарық пен ортадағы сигналдарды қабылдау қабілеті) қабілеті алдыңғы қатардағы қызметкерлер мен командаларды ұйым жұмыс істейтін нарық пен орта туралы сигналдардың өте құнды көзі ретінде қарастырудан туындайды.

Біз мұндай сезуді тек ұйымның шетінде ғана емес, сонымен бірге ұйым ішінде — командалар арасында — қолданғанда, біз платформалардағы, қызметтердегі және интерфейстердегі кемшіліктерді жылдам анықтау үшін түбегейлі жақсартылған стратегиялық мүмкіндікті қамтамасыз ете аламыз. Бұл мәселелерді ерте шешуге және жалпы АТ тиімділігін арттыруға мүмкіндік береді. (Біз бұл ұйымдық сезуді III бөлімде толығырақ қарастырамыз. )

DevOps және DevOps топологиялары

Әзірлейтін, сынайтын және өз бағдарламалық жасақтамасын пайдаланатын кросс-функционалды командалары бар мұндай ұйымдық сезу «нирванасы» 2009 жылы көптеген ұйымдар үшін бейтаныс ұғым болды. Ол кезде әзірлеу және операциялық командалар (басқалармен қатар) арасындағы жауапкершілікті толығымен бөлудің классикалық анти-үлгісі басым болды: бағдарламалық өнімдер «қоршаудан» немесе «қабырғадан» асыра лақтырылатын және байланыс негізінен билеттер (tickets) арқылы жүзеге асырылатын. DevOps әлемінде бұл «түсініспеушілік қабырғасы» (wall of confusion) ретінде белгілі болды.

DevOps (бағдарламалық қамтамасыз етуді әзірлеу мен пайдалануды біріктіретін тәсілдер жиынтығы) қозғалысы 2009 жылы осы әзірлеу (Dev) мен операциялық (Ops) топтар арасындағы өсіп келе жатқан қайшылықтарға байланысты пайда болды. Мәселе мынада болды: Agile кеңінен таралған сайын, операциялық топтарға жиірек орналастыру туралы қысым күшейді. Бірақ Agile-ді қабылдаған көптеген ұйымдар бағдарламалық жасақтаманы жеткізу жылдамдығы мен операциялық топтардың ресурстармен қамтамасыз ету немесе жаңартуларды орналастыру мүмкіндігі арасындағы алшақтықты нақты шешпеді. Командалар арасындағы сәйкессіздік барған сайын айқын бола бастады, бұл дұрыс емес мінез-құлыққа және жұмыс ағынына назар аудармауға әкелді.

DevOps-тың басты үлесі — командалардың жеткізу тізбегінде қалай әрекеттесетініндегі (немесе әрекеттеспейтініндегі) кешігулерге, қайта өңдеулерге, сәтсіздіктерге және басқа командаларға деген түсіністік пен эмпатияның болмауына себеп болатын мәселелер туралы хабардарлықты арттыру болды. Сондай-ақ мұндай мәселелер тек қолданбаларды әзірлеу және операциялық топтар арасында ғана емес, сонымен қатар QA, InfoSec, желілік қызмет және т. б. сияқты бағдарламалық жасақтаманы жеткізуге қатысатын басқа да көптеген командалар арасында болатыны белгілі болды.

Көптеген адамдар DevOps-ты іргелі түрде автоматтандыру мен құрал-сайманның технологиялық аспектілері деп санаса да, тек командалар арасындағы іргелі сәйкессіздіктерді шешетін ұйымдар ғана DevOps-ты енгізуден толық әлеуетті пайда ала алады.

DevOps топологиялары

DevOps Topologies каталогы (бастапқыда 2013 жылы Мэттью Скелтон жасаған және кейінірек Мануэль Паис кеңейткен) — бұл технологиялық командалар арасындағы жауапкершіліктер, интерфейстер және ынтымақтастық туралы әңгімелерді бастау үшін жақсы жұмыс істейтін командалық дизайн мен өзара әрекеттесу үлгілері мен анти-үлгілерінің онлайн жинағы. Ең бастысы, сәтті үлгілер ұйым мен өнім көлемі, инженерлік жетілу және ортақ мақсаттар сияқты контекстік аспектілерге қатты тәуелді.

Топологиялар корпоративтік бағдарламалық жасақтаманы жеткізу үшін командалық құрылымдардың тиімді анықтамалығына айналды; дегенмен, олар ешқашан статикалық құрылымдар болуға арналмаған, керісінше жеткізілетін өнімдердің түрі, техникалық көшбасшылық және операциялық тәжірибе сияқты көптеген факторлардың әсерінен белгілі бір уақыт сәтінің бейнесі болды. Командалар уақыт өте келе дамып, өзгеруі керек деген астарлы идея болды.

Бұл тарауда ұйымдық контекст пен қажеттіліктерді ескере отырып, командалық құрылымдарды таңдау туралы ойлауды суреттеуге көмектесу үшін DevOps топологиялары каталогындағы кейбір үлгілер ұсынылған. Бұл онлайн режимінде қолжетімді DevOps топологияларын терең зерттеуге арналмаған; керісінше, бұл DevOps-қа қолданылатын технологиялық командаларға арналған командалық дизайнға пайдалы кіріспе. Кітаптың қалған бөлігі DevOps-тан тыс бизнес және технологиялық командалардың кеңірек контекстіне арналады.

DevOps топологиялары екі негізгі идеяны көрсетеді: (1) DevOps табысына жету үшін командаларды құрудың әмбебап тәсілі жоқ. Кез келген берілген топологияның жарамдылығы мен тиімділігі ұйымның контекстіне байланысты. (2) DevOps табысына зиян тигізетін бірнеше топологиялар (анти-үлгілер) бар, өйткені олар DevOps-тың негізгі қағидаларын ескермейді немесе оларға қайшы келеді. Қысқасы, «дұрыс» топология жоқ, бірақ кез келген ұйым үшін бірнеше «нашар» топология бар.

Сәтті командалық үлгілер

Топологияны жеткіліксіз таңдау міндетті түрде қажетті нәтижелер жақсы емес дегенді білдірмейді. Жиі кездесетін жағдай: белгілі бір топология нәтиже бермейді, өйткені жаңа командалық құрылымға назар аударылады, бірақ қоршаған командалар мен құрылымдар жеткілікті түрде ескерілмейді. Командалардың әртүрлі түрлерінің табыстылығы тек команда мүшелерінің дағдылары мен тәжірибесіне ғана емес; ол сондай-ақ (мүмкін ең маңыздысы) қоршаған ортаға, командаларға және өзара әрекеттесулерге байланысты.

Фича-командалар (Feature Teams) жоғары инженерлік жетілуді және сенімділікті талап етеді

Фича-команданың мысалын алайық. Біз фича-команданы тұтынушыға бағытталған функцияны идеядан өндіріске дейін жеткізе алатын, оны тұтынушыларға қолжетімді ететін және идеалды жағдайда оның қолданылуы мен өнімділігін қадағалай алатын кросс-функционалды, кросс-компонентті команда деп санаймыз. Бұл үлгі ме әлде анти-үлгі ме? Өзіңіз де түсінгендей, бұл жағдайға байланысты.

Кросс-функционалды фича-команда өз өзгерістерін жасап, оларды бір релизге синхрондайтын бірнеше компоненттік командаларға қарағанда, тұтынушыға бағытталған функцияларды әлдеқайда жылдам жеткізу арқылы ұйымға жоғары құндылық әкеле алады. Бірақ бұл фича-команда өзін-өзі қамтамасыз ете алатын болғанда, яғни басқа командаларды күтпестен функцияларды өндіріске жеткізе алғанда ғана мүмкін болады.

Фича-командаға әдетте әртүрлі компоненттік командаларға тиесілі бірнеше код базаларына тиісу керек болады. Егер команданың инженерлік жетілу деңгейі жоғары болмаса, олар жаңа пайдаланушы сценарийлері үшін тестілеуді автоматтандырмау немесе «бойскаут ережесін» (кодты тапқаннан да жақсырақ күйде қалдыру) сақтамау сияқты жеңіл жолдарды таңдауы мүмкін. Уақыт өте келе бұл техникалық қарыздың жиналуына және жеткізу жылдамдығының баяулауына байланысты командалар арасындағы сенімнің бұзылуына әкеледі.

Командалар арасындағы тәртіп жоғары болмаса, бірнеше команданың бір код базасында жұмыс істеуінің жиынтық әсерінен ортақ кодқа иелік ету сезімі жоғалуы мүмкін.

2015 жылдар шамасында Ericsson «Бағдарламалық-анықталатын желілер» (Software-Defined Networking) немесе «Желілік функцияларды виртуализациялау» (Network Functions Virtualization) сияқты жаңа телекоммуникациялық бизнес салалары үшін бағдарламалық жасақтаманы құру және іске қосуда DevOps тәсіліне көшті. Бұл саладағы командалар өз бағдарламалық жасақтамасын әзірлеуге және оны өндірісте қолдауға жауапты болды.

Ericsson-ның бірнеше қосалқы жүйелерден тұратын кейбір ауқымды жобалары бірнеше жерде жұмыс істейтін командаларды қажет етеді. Әр команда бес-тоғыз мүшеден тұрады және бір қосалқы жүйені бірнеше команда әзірлеуі мүмкін. Дегенмен, командалар өз функцияларын тәуелсіз түрде әзірлеу және қолдау үшін барлық негізгі мүмкіндіктерді/рөлдерді қамтуы керек. Кейде өте үлкен функцияларды бір жерде орналасқан бірнеше команда бірлесіп, бір үлкен фича-команда ретінде орындайды.

Алайда, қосалқы жүйе ішіндегі функциялармен жұмыс істейтін командалар арқасында командааралық байланыс пен тәуелділік айтарлықтай азайғанымен, біреу әлі де жүйені тұтастай қадағалап, қосалқы жүйелердің қажетті пайдаланушы тәжірибесіне, өнімділігіне және сенімділігіне сәйкес интеграциялануын және өзара әрекеттесуін қамтамасыз етуі керек болды. Сондықтан жүйелік архитекторлар, жүйе иелері немесе интеграция жетекшілері сияқты арнайы рөлдер құрылды. Ең бастысы, бұл рөлдердегі адамдар бүкіл жоба/ұйым бойынша «байланыс арналары» сияқты жұмыс істейді, фича-командалармен тікелей және жиі әрекеттеседі. Олар фичаларды жеткізудің тұрақты қарқынын сақтауға мүмкіндік беру үшін командаларға қосалқы жүйеаралық мәселелерде (интерфейстер мен интеграция сияқты) қолдау көрсетеді.

Өнім командаларына қолдау жүйесі қажет

Өнім командалары (мақсаты мен сипаттамасы бойынша фича-командаға ұқсас, бірақ бір немесе бірнеше өнімнің барлық функцияларына иелік етеді) өз жұмыстарының соңғы пайдаланушыларға қолжетімді болуы үшін әлі де инфрақұрылымға, платформаға, тестілеу орталарына, жинақтау жүйелеріне және жеткізу құбырларына (және т. б. ) тәуелді. Олар осы тәуелділіктердің кейбірін толық бақылай алады, бірақ команданың танымдық және тәжірибелік шектеулеріне байланысты (3-тарауда түсіндірілгендей) басқалары бойынша көмек қажет болуы мүмкін.

Команданың дербестігін сақтаудың кілті — сыртқы тәуелділіктердің non-blocking (бөгемейтін, яғни жұмысты тоқтатып қоймайтын) болуында. Бұл жаңа функциялардың команда бақылауынан тыс қандай да бір әрекетті күтіп, бос тұрып қалмауын білдіреді. Мысалы, өнім командасы жұмысты аяқтаған сәтте оны бағалау үшін бөлек QA (сапаны бақылау) командасының дайын болуын қамтамасыз ету өте қиын. Командалардың жұмыс жүктемесі, басымдықтары мен мәселелері әртүрлі болады; жалпы алғанда, бағдарламалық жүйелерді құру мен іске қосуда белгісіздік тым көп болғандықтан, алдын ала жасалған кесте бойынша бірнеше команданың жұмыс ағынын үйлестіру мүмкін емес. Бұл тәсілді талап ету міндетті түрде күту уақыты мен кешігулерге әкеледі.

Бөгемейтін тәуелділіктер көбінесе басқа командалар әзірлеген және қолдайтын self-service capabilities (өзіне-өзі қызмет көрсету мүмкіндіктері, мысалы, тесттік орталарды дайындау, орналастыру конвейерлерін құру, мониторинг және т. б. ) түрінде болады. Өнім командалары қажет кезінде бұл ресурстарды дербес тұтына алады.

Мысалы, Microsoft 1980-жылдардан бастап өнім командаларын қолданып келеді. Azure платформасының IaaS (Infrastructure as a Service — инфрақұрылым қызмет ретінде) және PaaS (Platform as a Service — платформа қызмет ретінде) шешімі ретінде қолжетімді болуымен, Microsoft ішіндегі командалар инфрақұрылым мен платформа функцияларын «қызмет ретінде» пайдалану мүмкіндігіне ие болды. Бұл командаларға жеткізу жылдамдығын айтарлықтай арттыруға мүмкіндік береді. Соның ішінде, Visual Studio өнімін жасаушы командалар «тек жұмыс үстеліне арналған, бірнеше айлық жеткізу циклінен» «бірінші кезекте бұлттық, күнделікті/апталық жеткізу цикліне» түбегейлі ауысты.

Тұтынуға оңай қызметтер мен командаға таныс емес тапсырмалар үшін дайын сараптамадан тұратын сәйкес қолдау жүйесінсіз өнім командаларын құру көбірек кедергілер тудырады. Өнім командалары жиі функционалдық командаларға (инфрақұрылым, желі, QA сияқты) «қатаң тәуелділік» салдарынан күтіп қалады. Өнім командаларына жылдам жеткізу үшін қысым жасалғанда, бірақ жүйе қажетті дербестік деңгейін қолдамағанда, үйкеліс күшейеді.

Бұлттық командалар қолданбалы инфрақұрылымды жасамайды

Cloud teams (бұлттық командалар) — бұл негізінен дәстүрлі инфрақұрылымдық командалардың атын өзгерткен түрі болса, олар бұлт ұсынатын жылдамдық пен масштабтау артықшылықтарын пайдалана алмайды. Егер бұлттық команда ескі мінез-құлық пен инфрақұрылымдық процестерді қайталаса, ұйым бағдарламалық қамтамасыз етуді жеткізуде бұрынғыдай кешігулер мен кедергілерге тап болады.

Өнім командаларына бұлтта өз орталары мен ресурстарын дайындау, қажет болған жағдайда жаңа кескіндер мен шаблондар жасау үшін дербестік қажет. Бұлттық команда ресурстармен қамтамасыз ету процесіне иелік ете алады — қажетті бақылау, саясат және аудиттің болуын қамтамасыз етеді (әсіресе қатаң реттелетін салаларда), бірақ олардың негізгі назары өнім командаларының қажеттіліктеріне де, тәуекелдер мен комплаенсты басқару талаптарына да сәйкес келетін жоғары сапалы өзіне-өзі қызмет көрсету мүмкіндіктерін ұсыну болуы керек.

Басқаша айтқанда, бұлттық инфрақұрылым процесін жобалау жауапкершілігі (бұлттық команда тарапынан) мен қолданба ресурстарын нақты дайындау және жаңарту (өнім командалары тарапынан) арасында бөлініс болуы керек.

SRE ауқымды жүйелерде тиімді

Site Reliability Engineering (SRE — сайттың сенімділігін қамтамасыз ету инженериясы) — бұл Google компаниясы миллиондаған пайдаланушысы бар жаһандық жүйелермен жұмыс істеу үшін енгізген бағдарламалық қолданбаларды пайдалану және жақсарту тәсілі. Егер толық енгізілсе, SRE error budget (қателіктер бюджеті — тоқтап қалудың қолайлы мөлшерін анықтау) және SRE командаларының сапасыз бағдарламалық жасақтамадан бас тарту мүмкіндігіне назар аударуымен бұрынғы IT операцияларынан айтарлықтай ерекшеленеді.

SRE командаларындағы адамдарға тамаша кодтау дағдылары және — ең бастысы — код арқылы қайталанатын операциялық тапсырмаларды автоматтандыруға, осылайша toil (автоматтандыруға болатын, бірақ қолмен орындалатын ауыр жұмыс) мөлшерін үнемі азайтуға деген күшті ұмтылыс қажет. Google инженерлік вице-президенті Бен Трейнор SRE-ді «бағдарламалық жасақтама инженеріне операциялық функцияны жобалауды тапсырғанда болатын нәрсе» деп сипаттады.

SRE моделі жаңа функциялардың жылдамдығы мен бағдарламаның сенімділігін теңгерімдеу үшін <span data-term="true">service-level objectives (SLO)</span> (қызмет көрсету деңгейінің мақсаттары) және қателіктер бюджетін пайдалану арқылы әзірлеу және SRE командалары арасында салауатты және өнімді өзара әрекеттестікті орнатады.

SRE командалары міндетті емес; олар таңдаулы болып табылады.

Иә, солай: Google-дағы әрбір әзірлеу командасы SRE-ді қолданбайды. «Егер жобаңыздың ауқымы кішірейсе, SRE қолдауын азайтыңыз, ал егер масштаб SRE қолдауын қажет етпесе, әзірлеу командасына SRE жұмысын өздеріне алуға мүмкіндік беріңіз», — дейді Яана Б. Доган, Google SRE маманы.

SRE тәсілі — бұл ауқымды бағдарламалық жүйелерді құру мен іске қосудың өте серпінді жолы. SRE командасы әртүрлі факторларға (пайдаланушылар саны, сенімділік деңгейі, қажетті қолжетімділік және т. б. ) байланысты әртүрлі уақытта қолданбаларды әзірлеу командаларымен бірнеше түрлі өзара әрекеттестікте болады. 4. 3-суретте бұл көрсетілген.

Image segment 493

4. 3-сурет: SRE командасы мен Қолданба командасы арасындағы байланыс

SRE командаларының бір немесе бірнеше қолданба әзірлеу командасымен тығыз байланысы, бір түрі affinity (ұқсастық немесе жақындық) болады. Осы тұрғыдан алғанда, біз SRE моделін stream-aligned (ағынға бағытталған) команданың ерекше түрі ретінде қарастыра аламыз.

SRE командасы мен қолданба әзірлеу командасы арасындағы қарым-қатынас бағдарламаның өмірлік циклінің әртүрлі кезеңдерінде және тіпті ай сайын өзгереді. Бастапқыда (4. 3-суретте №1), әзірлеу командасы масштаб SRE көмегін қажет еткенге дейін бағдарламаны өндірісте жалғыз құрады және іске қосады. Екінші кезеңде (4. 3-суретте №2), қолданбаны пайдалану артқан сайын, SRE әзірлеу командасына қолданбаны жаһандық ауқымда жақсырақ жұмыс істету туралы нұсқаулар береді (жасыл түспен көрсетілген). Кейінірек, масштаб сәйкес келгенде (4. 3-суретте №3), SRE қолданбаны іске қосуға және қолдауға толық қатысады (бірақ бәрібір қолданба командасымен ынтымақтасады). Бұл кезде қолданбаның өнім иесі тиісті қателіктер бюджеті бар қолайлы қызмет көрсету деңгейінің мақсатын (SLO) шешуі керек. Егер қандай да бір сәтте (4. 3-суретте №4) қолданбаны пайдалану қиындығына байланысты қолдау көрсету мүмкін болмаса немесе оны пайдалану азайса, қолданба командасы операциялық жауапкершілікті қайтадан өз мойнына алады. Егер қолданбаның жұмыс істеу қабілеті жақсарса және пайдалану көлемі артса, қарым-қатынас №3 кезеңге оралуы мүмкін.

SRE және әзірлеу командалары арасындағы серпінді өзара әрекеттестік — бұл SRE тәсілінің Google және ұқсас ұйымдар үшін жақсы жұмыс істеуінің бір себебі: ол бағдарламалық жүйелерді құру мен іске қосуды зауыттағы конвейер емес, <span data-term="true">sociotechnical</span> (әлеуметтік-техникалық — адамдар мен технологиялардың өзара байланысы) әрекет екенін мойындайды.

Алайда, SRE моделі оңай нұсқа емес. Дейв Ренсин, Google Cloud-тағы Тұтынушылардың сенімділігі жөніндегі инженерлік директоры: «Google деңгейіндегі операциялық қатаңдыққа қол жеткізу сізден тұрақты міндеттемені талап етеді» дейді. SRE — бұл әзірлеу командасының жұмысқа қабілеттілікке деген ұмтылысы мен SRE командасының сараптамасы арасындағы серпінді теңгерім. Инженерлік тәртіп пен басшылықтың қолдауынсыз бұл нәзік теңгерім дәстүрлі «біз және олар» деген silo (оқшауланған құрылым) түріне оңай айналып кетуі мүмкін, бұл қызметтің тоқтауына және командалар арасындағы сенімсіздікке әкеледі.

Топологияны таңдау кезіндегі ескертулер

Ұйымның контексті белгілі бір команда түрлерін сәтті құруға әсер етеді. Төменде топологияны таңдау кезінде ескеру қажет әртүрлі факторларды сипаттаймыз.

Техникалық және мәдени кемелдік

Техникалық және мәдени кемелдіктің (maturity) әртүрлі кезеңдеріндегі ұйымдар әртүрлі команда құрылымдарын тиімді деп табады. Мысалы, 2013 жылға қарай Amazon да, Netflix те ұйымның қалған бөлігіне ұсынатын қызметтері үшін толық жауапкершілігі бар кросс-функционалды командаларды қолданатын қалыптасқан стратегияға ие болды.

Сонымен қатар, Agile-ді қабылдайтын дәстүрлі ұйымдар көбінесе уақыт өте келе тұрақты қарқынды сақтау үшін қажетті кемелденген инженерлік тәжірибелерге (автоматтандырылған тестілеу, орналастыру немесе мониторинг сияқты) ие болмады. Олар сараптама әкелу үшін және, ең бастысы, ортақ тәжірибелер мен құралдар бойынша ынтымақтасу арқылы командаларды біріктіру үшін тәжірибелі инженерлері бар уақытша DevOps командасынан пайда көре алады.

Дегенмен, мұндай DevOps командасының нақты миссиясы мен аяқталу мерзімі болмаса, бұл үлгі мен сәйкес анти-үлгі арасындағы жіңішке шекарадан өтіп, ұйымда тағы бір оқшауланған білімі бар «силосқа» (DevOps командасы) айналуы оңай.

Екінші жағынан, DevOps-ты жаппай енгізу жоғарыдан төменге және төменнен жоғарыға сәйкестендіруді талап ететін ірі кәсіпорын үшін ұйымның басқа бөліктеріндегі алғашқы жетістіктерді насихаттайтын <span data-term="true">DevOps evangelists</span> (DevOps насихаттаушылары) командасына инвестиция салудың мағынасы бар.

Ұйым көлемі, бағдарламалық жасақтама масштабы және инженерлік кемелдік

Жақсы команда топологиясын таңдау ұйым мен ондағы командалардың жағдайына байланысты. Ең кем дегенде, ұйым көлемі (немесе бағдарлама масштабы) және инженерлік кемелдік DevOps контекстінде қай топологиялар таңдалатынына әсер етуі керек (4. 4-суретте көрсетілген).

Image segment 508

4. 4-сурет: Көлем мен инженерлік кемелдіктің топологияларды таңдауға әсері

Ұйым көлемі мен инженерлік тәртіп командалардың өзара әрекеттесу үлгілерінің тиімділігіне әсер етеді.

Кемелдігі төмен ұйымдарға дербес командалар үшін қажетті инженерлік және өнімді әзірлеу мүмкіндіктерін игеру үшін уақыт қажет. Осы арада мамандандырылған командалар (әзірлеу, операциялар, қауіпсіздік және басқалар) күту уақытын азайту және мәселелерді тез шешу үшін тығыз жұмыс істесе, бұл қолайлы ымыра болып табылады. Орташа масштабтағы ұйымдар үшін командалар арасындағы жедел ынтымақтастыққа баса назар аударатын үлгілер жақсы жұмыс істейді. Ұйым немесе бағдарлама масштабы артқан сайын, негізгі инфрақұрылымды немесе платформаны қызмет ретінде ұсынуға назар аудару сенімділік пен тұтынушылардың үміттерін қанағаттандыру тұрғысынан маңызды артықшылықтар әкеледі. Егер ұйымның инженерлік кемелдігі мен тәртібі жоғары болса, онда жоғарыда сипатталған SRE моделі ауқымды деңгейде тиімді болуы мүмкін.

Оқшауланған құрылымдарды (силостарды) жою үшін жауапкершілікті бөлу

Кейде біз белгілі бір командаларға тәуелділікті олардың жауапкершілігін бөлу және басқа командаларға солардың кейбірін орындауға мүмкіндік беру арқылы азайта аламыз. Мысалы, соңғы бірнеше жылда көптеген ұйымдарда деректер базасын әзірлеу (DB Dev) мен деректер базасын басқару (DBA) әрекеттерін бөлу үрдісі байқалады.

Бұрын бұл екі жұмыс деректер базасы командасының ішінде бірге болатын, бірақ өзгерістер ағынын жылдамдату қажеттілігі бұл рөлдерді бөлуді тиімдірек етеді. Іс жүзінде DBA рөлі ішкі немесе бұлттық провайдердің «деректер базасы қызмет ретінде» ұсынысының бөлігіне айналады.

Барлық мысалдар командалардың мүмкіндіктерін (немесе олардың жетіспеушілігін) және бұл командалар арасындағы тәуелділікке қалай әкелетінін ойлаудың маңыздылығын көрсетеді. Жұмыс жүктемесі артқанда жай ғана командаларды көбейте бермей, қай тәуелділіктерді жою керек және қайсысын ашық қабылдау керек екенін ойлану маңызды.

Командалар арасындағы тәуелділіктер мен күту уақыты

Нақты жауапкершілігі бар, дербес жұмыс істей алатын және ағын үшін оңтайландырылған командаларға қол жеткізу үшін командалар арасындағы тәуелділіктер мен күту уақытын анықтау және қадағалау өте маңызды. Making Work Visible кітабында Доминика ДеГрандис тәуелділіктерді анықтау үшін «Физикалық тәуелділік матрицасын» немесе канбан карталарындағы «тәуелділік белгілерін» пайдалануды ұсынады.

2012 жылғы «А Taxonomy of Dependencies in Agile Software Development» еңбегінде Даян Строд пен Сид Хафф тәуелділіктің үш санатын ұсынады: білім, тапсырма және ресурс тәуелділіктері. Мұндай жіктеу командалар арасындағы тәуелділіктер мен жұмыс ағынына ықтимал шектеулерді алдын ала анықтауға көмектеседі.

Қандай құрал қолданылса да, әр сала бойынша тәуелділіктер санын қадағалау және белгілі бір жағдай үшін маңызды шекті мәндер мен ескертулерді орнату маңызды. Тәуелділіктер санының бақылаусыз өсуіне жол бермеу керек. Керісінше, мұндай өсім команда дизайны мен тәуелділіктерге түзетулер енгізуге түрткі болуы тиіс.

Өзара тәуелділіктерді анықтаңыз және қадағалаңыз.

Spotify squads (скадтар — шағын дербес командалар) мен tribes (трайбтар — бірнеше скадтың бірлестігі) арасындағы тәуелділіктерді қадағалау үшін қарапайым кестені қолданады. Ол тәуелділіктің бір трайб ішіндегі (қолайлы) немесе басқа трайбтағы (команда дизайны немесе тапсырма бөлінісі дұрыс емес екендігі туралы ескерту) командаға қатысты екенін көрсетеді.

Ұйымды дамыту үшін DevOps топологияларын қолдану

Ұйымдар, командалар мен стратегиялар уақыт өте келе жоспарлы әрекеттер немесе нарық пен технологиядағы өзгерістерге байланысты өзгереді. Көптеген ұйымдар DevOps топологиялары каталогын команда құрылымдары бойынша «сәттік» кеңес ретінде қарастырса, кейбіреулері бұдан әріге барып, эволюциялық жолды жоспарлады.

Төменде жаңа контексттерге бейімделу үшін уақыт өте келе дамып отырған DevOps топологияларының мысалдары берілген.

Пулак Агравал мен Джонатан Хаммант Accenture кеңес беретін ұйымдарды, атап айтқанда 2017 жылдың сәуірінде DevOps командасынан бастаған денсаулық сақтау саласындағы клиентті қалай дамытқанын айтып берді. Олар көп ұзамай анти-үлгіге тап болғанын түсінді, өйткені DevOps командасы әкелген құрал-саймандық тәжірибе тағы да оқшауланған «силоста» қалып қойды.

2018 жылдың қаңтарында олар әзірлеу, операциялар және DevOps құралдар командасын жақындату үшін құрылымдарын өзгертті. Эволюцияның үшінші кезеңі DevOps командасын орындаушы рөлінен насихаттаушы (evangelizing) рөліне толық ауыстыруға бағытталды, осылайша әзірлеу және операциялық командалар өзін-өзі қамтамасыз ететін болды.

Case Study: TransUnion-дағы команда топологияларының эволюциясы (1-бөлім)

Ян Уотсон, DevOps бөлімінің басшысы, TransUnion

TransUnion (бұрынғы Callcredit) — Испания, АҚШ, Дубай және Литвада кеңселері бар Ұлыбританиядағы екінші ірі несиелік анықтамалық агенттік (CRA).

2014 жылы TransUnion-дағы біздің технологиялық топ бағдарламалық шешімдерге деген өсіп келе жатқан сұранысты қанағаттандыру үшін кеңейе бастады. Біз тиімді масштабтау үшін әртүрлі технологиялық командалар арасындағы өзара байланысты ескеру қажет екенін білдік. Біз цифрлық трансформацияны жоспарлау үшін DevOps топологияларының үлгілеріне жүгіндік. Біз әзірлеу (Dev) мен операцияларды (Ops) жақындатқымыз келді, бірақ бөлек «DevOps командасынан» аулақ болдық. Оның орнына біз гибридті модельді қабылдадық, онда екі уақытша DevOps командасы Dev және Ops-ты біріктіруге көмектесті.

Біздің TransUnion-дағы DevOps саяхатымыз статикалық қайта құруға емес, командалық қарым-қатынастардың эволюциясына негізделуі керек екенін түсіндік. Топология үлгілері бізге цифрлық трансформацияның қалай жүретінін түсінуге көмектесті және бұлттық технологиялар мен автоматтандыру тәсілдерін қабылдауымызды жеделдетті. Бұл үлгілер бөлек DevOps командасы сияқты кейбір қателіктерден аулақ болуға және команда жауапкершілігін тиімдірек анықтауға көмектесті.

Қазіргі контекстке сәйкес келетін команда топологияларын енгізіңіз және дамытыңыз

Өнімді масштабтау немесе жаңа технологияларды енгізу қажеттілігіне байланысты жаңа командалық құрылымдарды реактивті түрде құру қазіргі сәтте көмектесуі мүмкін, бірақ көбінесе жақсы ойластырылған топологиялардың жылдамдығы мен тиімділігіне жете алмайды.

Мұндай шешімдер көбінесе жеке команда негізінде қабылданатындықтан, оларда техникалық және мәдени кемелдік, ұйым көлемі немесе командааралық тәуелділіктер сияқты маңызды факторлар ескерілмейді. Нәтижесінде, команда құрылымдары уақыт өте келе жаңа мәселелерге бейімделудің орнына, уақытша немесе шектеулі мәселелер үшін оңтайландырылады.

«DevOps командасы» анти-үлгісі — бұған нақты мысал. Қағаз жүзінде автоматтандыру мамандарын тарту қисынды көрінеді. Дегенмен, бұл команда әр қолданбаны жеткізу жолындағы қадамдарды орындауды сұрағанда, қолданба командалары үшін «қатаң тәуелділікке» айналуы мүмкін. Оның орнына олар қолданба командалары дербес сүйенетін өзіне-өзі қызмет көрсету мүмкіндіктерін жобалауға көмектесуі керек.

Белгілі бір сәттегі мәселені шешетін құрылымдарды емес, ұйымдық контекстке (ол баяу дамиды) сәйкес келетін топологияларды қабылдау өте маңызды. Болашақты ойлайтын ұйымдар бүгінгі жұмыс істейтін нәрсе бірнеше жылдан немесе тіпті айдан кейін тиімді болмауы мүмкін екенін түсініп, команда дизайнына көп сатылы тәсілмен қарайды.

5 Командалардың төрт негізгі топологиясы

Жүйенің архитектурасы оны әзірлейтін командалардың формасында бекітіледі.

Рут Малан, «Конвей заңы»

Көптеген ұйымдарда командалардың түрлері сан алуан, тіпті бірнеше рөлді қатар атқаратын командалар да кездеседі (мысалы, инфрақұрылым және құрал-сайман командасы). Мұндай бытыраңқылық ұйымның толық бейнесін көруді қиындатады: Бізде дұрыс командалар жиқталған ба? Кейбір салаларда ешбір команда айналыспай жатқан құзыреттер жетіспей ме? Командалардың дербестігі мен басқа командалардың қолдауы арасында қажетті тепе-теңдік сақталған ба?

Егер біз команда нұсқаларының санын төрт негізгі команда топологиясына дейін азайтсақ, бұл сұрақтарға жауап беру оңайырақ болады:

Stream-aligned team (бизнес-процестің басынан аяғына дейінгі жұмыс ағынына жауапты ағынға бағытталған команда)

<span data-term="true">Enabling team</span> (басқа командаларға жаңа дағдыларды меңгеруге көмектесетін қолдаушы команда)

Complicated-subsystem team (ерекше математикалық немесе техникалық білімді қажет ететін бөліктермен айналысатын күрделі кіші жүйе командасы)

Platform team (басқа командалар қолданатын ішкі сервистер мен құралдарды әзірлейтін платформалық команда)

Мұқият қолданылған жағдайда, заманауи бағдарламалық жүйелерді құру және іске қосу үшін осы төрт команда топологиясы жеткілікті. Тиімді бағдарламалық шекаралармен (6-тарауда айтылғандай) және командалық өзара әрекеттесумен (7-тарауда айтылғандай) ұштасқанда, бұл төрт команда түрі ұйымды тиімді жобалау үшін қуатты үлгіге айналады (80-беттегі 5. 1-суретті қараңыз).

Image segment 547
  1. 1-сурет: Төрт негізгі команда топологиясы[FACT]

Төрт негізгі команда топологиясы — ағынға бағытталған, қолдаушы, күрделі кіші жүйе және платформалық — барлық команда түрлері үшін «магнит» рөлін атқаруы тиіс. Барлық командалар осы төрт магниттік полюстің біріне қарай жылжуы керек; яғни біз осы түрлерге басымдық беріп, ұйымдағы әрбір команда үшін осы негізгі түрлердің мақсатын, рөлін, жауапкершілігін және өзара әрекеттесу тәртібін қабылдауға ұмтылуымыз қажет. Команда түрлерін тек осы төртеуіне дейін азайту ұйым ішіндегі түсініксіздікті азайтуға көмектеседі. Цзяо Луо және оның әріптестері 2018 жылы жарияланған зерттеуде анықтағандай, ұйымдағы рөлдерге қатысты түсініксіздіктің азаюы — заманауи ұйымдық дизайнның сәтті болуының басты шарты. 1

Ірі немесе орташа ұйымда әрбір негізгі топологияның бір немесе бірнеше командасы болуы мүмкін; ағынға бағытталған бірнеше команда — бұл бастапқы нүкте (осы тарауда көретініміздей), бірақ ұйымда бірнеше платформалық команда, әртүрлі мақсаттарға арналған бірнеше қолдаушы команда (мүмкін, бірі CI/CD мәселелерін, екіншісі инфрақұрылым немесе архитектураны шешетін болар) және өте қажет болған жағдайда, бір немесе екі күрделі кіші жүйе командасы болуы мүмкін.

ЕСКЕРТУ

Операциялық (Ops) команда қайда? Қолдау көрсету командасы қайда?

Негізгі топологияларда «Операциялық» (Ops) немесе «Қолдау көрсету» командасы жоқ және бұл әдейі жасалған. Жүйелерді құратын тұрақты командалар өздері жасап жатқан жүйелердің нақты жұмыс істеу процесіне (live operation) өте жақын болады. Жұмысты бөлек Ops немесе қолдау көрсету командасына «өткізіп беру» (handover) деген жоқ; тіпті SRE моделінде де (4-тарауды қараңыз), командалар тығыз байланыста болады. Ағынға бағытталған командалар бағдарламалық жасақтаманы жеткізудің жақсы тәжірибелерін (үздіксіз жеткізу және пайдалануға жарамдылық сияқты) ұстанады және код өте аз жазылса да, жүйенің нақты жұмысына жауап береді. Шын мәнінде, операциялық жұмыстар мен қолдау көрсету негізінен ағындарға сәйкес келеді. (Осы тараудың соңында сәтті ұйымдардың өзгерістердің жылдам әрі қауіпсіз ағыны жағдайында қолдау көрсету әрекеттерін қалай басқаратынын егжей-тегжейлі қарастырамыз).

Енді төрт негізгі команда топологиясының әрқайсысына толығырақ тоқталайық.

Ағынға бағытталған командалар (Stream-Aligned Teams)[SUBHEADING]

«Ағын» — бұл бизнес доменіне немесе ұйымның мүмкіндіктеріне сәйкес келетін жұмыстың үздіксіз үрдісі. Үздіксіз ағын мақсат пен жауапкершіліктің нақты болуын талап етеді, сонда әрқайсысының өз жұмыс ағыны бар бірнеше команда қатар өмір сүре алады.

Ағынға бағытталған команда — бұл жұмыстың бір құнды ағынына бағытталған команда; бұл бір өнім немесе сервис, мүмкіндіктердің (features) бір жиынтығы, бір қолданушы жолы (user journey) немесе бір қолданушы персонасы болуы мүмкін. Сонымен қатар, командаға тұтынушы немесе қолданушы үшін құндылықты мүмкіндігінше тез, қауіпсіз және дербес түрде жасауға және жеткізуге өкілеттік беріледі, бұл ретте жұмыстың бір бөлігін орындау үшін басқа командаларға жүгінудің қажеті болмайды.

Ағынға бағытталған команда — ұйымдағы негізгі команда түрі, ал басқа негізгі команда топологияларының мақсаты — ағынға бағытталған командалардың жүктемесін азайту. Осы тарауда кейінірек көретініміздей, мысалы, қолдаушы команданың миссиясы — ағынға бағытталған командаларға жетіспейтін құзыреттерді иеленуге көмектесу, зерттеу және сынақтан өткізу жұмыстарын өз мойнына алу және сәтті тәжірибелерді енгізу. Платформалық команданың миссиясы — төмен деңгейдегі егжей-тегжейлі білімді (мысалы, ресурстарды бөлу, мониторинг немесе деплоймент) өз мойнына алу және олардың айналасында оңай тұтынылатын сервистерді ұсыну арқылы ағынға бағытталған командалардың когнитивтік жүктемесін (адамның бір уақытта есте сақтай алатын ақпарат көлемі мен ақыл-ой күшінің шегі) азайту.

Ағынға бағытталған команда жеткізудің барлық спектрімен жұмыс істейтіндіктен, олар табиғи түрде тұтынушыға жақын болады және бағдарламалық жасақтаманы өндірістік ортада (production) бақылай отырып, тұтынушылардың кері байланысын тез ескере алады. Мұндай команда жүйелік мәселелерге нақты уақыт режимінде жауап беріп, жұмысты қажетінше бағыттай алады. Дон Райнертсеннің сөзімен айтқанда: «Өнімді әзірлеуде біз үлкен командаға қарағанда, жоғары білікті адамдардан тұратын шағын команда болғанда бағытты тезірек өзгерте аламыз». 2

Ұйымда әртүрлі ағындар қатар өмір сүре алады: нақты тұтынушы ағындары, бизнес-сала ағындары, географиялық ағындар, өнім ағындары, қолданушы персонасының ағындары немесе тіпті комплаенс ағындары (қатаң реттелетін салаларда). Ағын тіпті ірі компания ішіндегі дербес фокусы мен мақсаты бар шағын кәсіпорын (мысалы, әлі жоқ өнімдерді инновациялау) түрінде де болуы мүмкін. Ағынға бағытталған команда қандай өзгерістер ағынына бағытталмасын, бұл команда өтпелі жоба ретінде емес, жұмыс портфолиосының немесе бағдарламасының бөлігі ретінде ұзақ мерзімді, тұрақты түрде қаржыландырылады.

Заманауи бағдарламалық қамтамасыз ету ұйымында біз командалардың көпшілігі ағынға бағытталған болады деп күтеміз. Жұмыс ағыны анық және әрбір ағынның ағынға бағытталған команда басымдық бере алатын тұрақты, болжамды жұмыс көлемі бар.

Бұл дәстүрлі жұмыс бөлу әдісіне мүлдем қайшы келеді, мұнда бір тұтынушының үлкен сұранысы немесе бірнеше тұтынушының кішігірім сұраныстары жиынтығы жобаға айналады. Жоба мақұлданып, қаржыландырылғаннан кейін, оған бірнеше команда (мысалы, фронтенд, бакенд және DBA командалары) тартылуы мүмкін және олар жаңа жұмысты өздерінің бұрыннан бар тапсырыстар тізіміне (backlog) сыйғызуы қажет болады.

Кейс: Amazon-дағы қатаң тәуелсіз сервис командалары

2002 жылдың өзінде Amazon өте тәуелсіз командаларды қолданатын командалық топологияны қабылдады. Бұл бас директор Джефф Безостың Amazon иелігіндегі әрбір сервис немесе қосымшаның шын мәнінде тәуелсіз болуын қамтамасыз ету үшін берген әдейі тапсырмасы болды — бұл Конвей заңын ескеру және командалардың да тәуелсіз болуын қамтамасыз ету еді. 3 Amazon сонымен қатар жауапкершілікті арттыру және жеткізу мен жаңаны ашу жылдамдығын арттыру үшін бағдарламалық командалардың көлемін «екі пиццамен тамақтандыруға болатын» адам санымен шектеуімен танымал. 4

2002 жыл шамасында Джефф Безос Amazon-ның инженерлік бөліміне командаларды ұйымдастырудың нақты ережелерін белгілейтін мандат жіберді:5

Әрбір команда өз сервисін әзірлеуге және пайдалануға толық жауапты (мұнда сервис Amazon.com немесе AWS өнімдерінің бір немесе бірнеше мүмкіндігі ретінде қарастырылуы мүмкін).

  1. Әрбір сервис ішкі немесе сыртқы тұтыну үшін API арқылы ұсынылады; командалар басқа командалардың сервистерінің архитектурасына немесе технологиясына араласпайды және ешқандай болжам жасамайды.

Amazon-ның техникалық директоры Вернер Фогельс танымал еткен «өзің құрсаң, өзің іске қос» (you build it, you run it) принципіне сәйкес, «сервис командалары» (іштей солай аталады) кросс-функционалды болуы тиіс және олардың құрамына өз сервистерін басқару, сипаттау, жобалау, әзірлеу, тестілеу және пайдалану (соның ішінде инфрақұрылымды дайындау және тұтынушыларды қолдау) үшін барлық қажетті мүмкіндіктер кіруі керек. Бұл құзыреттер міндетті түрде жеке тұлғаларға бекітілмейді; команда тұтастай алғанда оларды қамтамасыз етуі тиіс. Әрбір адамның негізгі сараптама саласы бар, бірақ олардың үлесі онымен шектелмейді.

Сервис командалары арасында өте аз үйлестіру қажет, бұл микросервистердің жоғары деңгейде бөлінген және әртүрлі стекіне әкеледі. Қызығы, тестілеуге қатысты ерекшелік бар, өйткені тестілеу бойынша бағдарламалық қамтамасыз ету инженерлері (SDETs) бүкіл ұйым бойынша жұмыс істейді, командалар арасында жақсы тестілеу тәжірибелері мен құралдарын насихаттауға тырысады (бірақ әр команданың құрамында күнделікті тестілеу рөлі бар). Олар сондай-ақ сервистер арасында, құрылғылар арасында және географиялық аймақтар арасында қолданушының үздіксіз тәжірибесін қамтамасыз етеді. SDET рөлі өнімділік немесе құрал-сайман командасындағы адамдар беретін құнды ақпаратты ұсынады, бұл командалар арасында жақсы тәжірибелерді енгізуге ықпал етеді және көмектеседі.

Amazon-ның «екі пиццалық команда» моделі — ағынға бағытталған командалардың мысалы: командалар айтарлықтай тәуелсіз, өз сервистеріне иелік етеді және өздері жазған бағдарламалық жасақтаманың жұмыс уақытындағы сәттілігіне жауап береді. Amazon-ның бұл модельді он жеті жылдан астам уақыт бойы қолданып келе жатқандығы командаларды өзгерістердің тәуелсіз ағындарына бағыттау қаншалықты тиімді болатынын көрсетеді.

Ағынға бағытталған команда ішіндегі құзыреттер[SUBHEADING]

Жалпы айтқанда, әрбір ағынға бағытталған команда жұмысты бастапқы (талаптарды) зерттеу кезеңдерінен өндіріске дейін жеткізу үшін белгілі бір құзыреттер жиынтығын қажет етеді. Бұл құзыреттерге мыналар кіреді (бірақ олармен шектелмейді):

Қосымша қауіпсіздігі (Application security)

Коммерциялық және операциялық өміршеңдік талдауы

Дизайн және архитектура

Әзірлеу және код жазу

Инфрақұрылым және пайдалануға жарамдылық (operability)

Метрикалар мен мониторинг

Өнімді басқару және иелік ету

Тестілеу және сапаны қамтамасыз ету

Қолданушы тәжірибесі (UX)

Әрбір құзыретті командадағы жеке рөлге теңестірмеу өте маңызды; бұл жоғарыдағы тізімге сәйкес келу үшін командалар кем дегенде тоғыз мүшеден тұруы керек дегенді білдірер еді. Керісінше, біз команда ретінде жоғарыда аталған құзыреттерді түсіну және соған сәйкес әрекет ету қабілеті туралы айтып отырмыз. Бұл әмбебап мамандар (generalists) мен бірнеше тар шеңберлі мамандардың (specialists) қоспасы болуы мүмкін дегенді білдіреді. Тек тар шеңберлі рөлдердин болуы, жұмыстың бір бөлігі дәл қазір бос болмауы мүмкін маманға тәуелді болған сайын «тар бұғазға» (bottleneck) әкеледі.

ЕСКЕРТУ

Google компаниясы алғаш енгізген Сайт сенімділігі инженерлері (SRE) командалары шын мәнінде ағынға бағытталған команданың ерекше түрі болып табылады, өйткені олар өндірісте жұмыс істейтін ірі қосымшалардың сенімділігіне жауап береді. SRE командалары негізінен қосымшаларды әзірлеуге жауапты бір немесе бірнеше ағынға бағытталған командалармен өзара әрекеттеседі және бағдарламалық жасақтаманы өзгерту ағыны көбінесе ағынға сәйкес келеді.

Неліктен «Өнім» немесе «Мүмкіндік» командасы емес, «Ағынға бағытталған» команда?[SUBHEADING]

Бұрын бағдарламалық жасақтаманы жеткізудің көптеген әдістемелері құнды бағдарламалық нәтижелерді басынан аяғына дейін жеткізуге өкілеттігі бар командаларды атау үшін «өнім командасы» немесе «мүмкіндік командасы» терминдерін қолданған, бірақ қазіргі уақытта өнімдер немесе мүмкіндіктер туралы емес, ағындар туралы айтудың мағынасы зор болуының көптеген себептері бар. Команданың мақсатын ағынмен сәйкестендіру ұйым деңгейінде ағынға назар аударуды күшейтуге көмектеседі — ағын кедергісіз жүруі тиіс.

IoT (Заттар интернеті), барлық жерде орнатылған құрылғылар және сервисті басқаруға кешенді көзқарастардың пайда болуымен қолданушының басынан аяғына дейінгі тәжірибесі басқаша көрінеді. Тұтынушылар тек жеке бағдарламалық бөлікпен ғана емес, мобильді құрылғылардан бастап орнатылған жүйелер мен дауыспен басқарылатын құралдарға дейінгі әртүрлі бағдарламалық жасақтамамен жұмыс істейтін бірқатар өнімдер мен құрылғылармен әрекеттеседі. Тұтынушылар сонымен қатар брендтермен бірнеше арналар (жеке, әлеуметтік желілер, веб-сайт, телефон) арқылы байланысады және жүйелі жауаптар мен интерфейстерді күтеді. Джефф Суссна «Designing Delivery» кітабында осы қиындықтарды жеңу үшін командаларға «үздіксіз дизайн» (continuous design) мүмкіндіктерін қосу қажеттілігі туралы айтады: үздіксіз дизайн арқылы біз «сервис, кері байланыс, сәтсіздік және оқу сияқты идеяларды бірінші дәрежелі ұғымдар ретінде қарастырамыз», және бұған қол жеткізудің ең жақсы жолы — ағынға баса назар аударатын өзгерістерге бағытталған көзқарас. 6

Осы көп арналы, жоғары деңгейде байланысқан контексте «өнім» өте әртүрлі мағынаны білдіруі мүмкін, бұл «өнім командасының» жауапкершілігі қандай екенін түсінуді қиындатады. Мысалы, өндірістік компанияларда өнім бірнеше жыл бойы инженерлік команда құрастыратын, содан кейін өнім ескірген соң команда таратылатын, қызмет ету мерзімі бекітілген физикалық құрылғы болуы мүмкін.

«Ағынға бағытталған» термині «өнім» немесе «мүмкіндік» терминдеріне қарағанда кең ауқымды жағдайларға қолайлы болып қана қоймайды, сонымен қатар «ағынға бағытталған» термині ағын сезімін (өйткені ағын ағады) біріктіруге және баса көрсетуге көмектеседі. Соңында, бағдарламалық жасақтаманың барлық жағдайлары өнімдерді немесе мүмкіндіктерді қажет етпейді (әсіресе мемлекеттік қызметтерді ұсынуға бағытталғандар), бірақ барлық бағдарламалық жағдайлар ағынмен үйлесуден пайда көреді.

Күтілетін іс-әрекеттер[SUBHEADING]

Көріп отырғанымыздай, ағынға бағытталған командалардың миссиясы — көбінесе бизнес саласына қатысты, бірақ әрдайым емес, белгілі бір ағын үшін жұмыстың кедергісіз жүруін қамтамасыз ету.

Тиімді ағынға бағытталған командада қандай іс-әрекеттер мен нәтижелерді көреміз деп күтеміз?

Ағынға бағытталған команда мүмкіндіктерді (features) тұрақты түрде жеткізуге ұмтылады.

Ағынға бағытталған команда соңғы өзгерістерден алынған кері байланыс негізінде бағытты тез түзете алады.

Ағынға бағытталған команда өнімнің дамуына эксперименттік көзқараспен қарайды, үнемі үйренуді және бейімделуді күтеді.

Ағынға бағытталған команда жұмысты басқа командаларға барынша аз (ең дұрысы нөл) өткізеді.

Ағынға бағытталған команда ол өндіретін өзгерістердің тұрақты ағыны бойынша бағаланады (кейбір қосымша техникалық және команданың саулығы метрикаларымен бірге).

Ағынға бағытталған командада кодты өзгерту қауіпсіз әрі оңай болып қалуын қамтамасыз ету үшін код сапасына қатысты өзгерістерді (кейде «техникалық қарыз» деп аталады) шешуге уақыт пен орын болуы керек.

Ағынға бағытталған команда қолдау көрсететін негізгі топологиялық командалармен (күрделі кіші жүйе, қолдаушы және платформалық) белсенді және жүйелі түрде байланысады.

Ағынға бағытталған команда мүшелері Даниэль Пинк бойынша білім қызметкерлерінің үш негізгі құрамдас бөлігі — «автономия, шеберлік және мақсатқа» қол жеткізгенін немесе оған жету жолында екенін сезінеді. 7

(Ағынға бағытталған командалардың платформамен байланысы туралы толығырақ 8-тарауда қарастырамыз).

Қолдаушы командалар (Enabling Teams)[SUBHEADING]

«Accelerate» кітабында Форсгрен, Хамбл және Ким алда болу үшін жоғары өнімді командалар өз мүмкіндіктерін үнемі жетілдіріп отыратынын айтады. Бірақ басынан аяғына дейін иелік ететін ағынға бағытталған команда зерттеуге, оқуға, білім алуға және жаңа дағдыларды үйренуге қалай уақыт таба алады? Ағынға бағытталған командалар сонымен қатар өзгерістерді жылдам жеткізуге және оларға жауап беруге үнемі қысым көреді.

Қолдаушы команда белгілі бір техникалық (немесе өнім) саласындағы мамандардан тұрады және олар осы құзыреттілік алшақтығын жоюға көмектеседі. Мұндай командалар ағынға бағытталған командалармен қиылысады және зерттеуге, нұсқаларды сынап көруге және қосымша стегіне қатысты сәйкес құралдар, тәжірибелер, фреймворктер және экожүйе таңдаулары бойынша негізделген ұсыныстар жасауға қажетті мүмкіндікке ие. Бұл ағынға бағытталған командаға тиісті күш жұмсамай-ақ (біздің тәжірибемізде мұндай күш-жігер мен олардың команданың қалған бөлігіне тигізетін әсері он-он бес есеге дейін төмен бағаланады) құзыреттерді иеленуге және дамытуға уақыт береді.

Қолдаушы командалардың табиғаты өте ұжымдық болып келеді; олар тиімді нұсқаулар беру үшін ағынға бағытталған командалардың мәселелері мен кемшіліктерін түсінуге тырысады. Ютта Экштейн оларды «Техникалық кеңес беру командалары»8 деп атайды, бұл анықтама ұйымның ішінде немесе сыртында болсын, консалтингтік команда ұсынуы керек нәрсеге (орындау емес, нұсқау беру) жақсы сәйкес келеді.

Қолдаушы командалар басқа командалар орындауы тиіс техникалық таңдауларды бұйыратын «піл сүйегінен жасалған мұнараларға» (ivory towers — өмірден алшақ, оқшауланған білім ортасы) айналудан аулақ болады, сонымен бірге командаларға ұйым бойынша техникалық шектеулерді түсінуге және сақтауға көмектеседі. Бұл «қызмет етуші көшбасшылық» (servant leadership) идеясына ұқсас, бірақ жеке тұлғаларға емес, командалық өзара әрекеттесуге қолданылады. Қолдаушы команданың түпкі мақсаты — шешімдердің өзіне емес, ең алдымен мәселелерге назар аудара отырып, ағынға бағытталған командалардың құзыреттерін арттыру арқылы олардың автономиясын арттыру. Егер қолдаушы команда өз жұмысын жақсы атқарса, ол көмектесіп жатқан командаға бірнеше апта немесе айдан кейін қолдаушы команданың көмегі қажет болмауы керек; қолдаушы командаға тұрақты тәуелділік болмауы тиіс.

Роберт Гринлифтің мына эвристикасын қолдаушы команданың іс-әрекеті мен ынтасын бағыттау үшін қолданыңыз: «Қызмет көрсетіліп жатқандар тұлға ретінде өсіп жатыр ма? Олар қызмет көрсету барысында сау, дана, еркін және дербес бола бастады ма? »9

Бір қолдаушы команда біз алдыңғы бөлімде тізімдеген ағынға бағытталған команда құзыреттерінің кез келгеніне сәйкес келуі мүмкін (қолданушы тәжірибесі, архитектура, тестілеу және т. б. ), бірақ көбінесе олар құрастыру инженериясы, үздіксіз жеткізу, деплоймент немесе нақты клиенттік технология үшін (мысалы, десктоп, мобильді, веб) тестілеуді автоматтандыру сияқты нақты салаларға шоғырланады. Мысалы, қолдаушы команда деплоймент пайплайнының негізгі қаңқасын (walking skeleton) немесе автоматтандыру құралдары мен кейбір бастапқы сценарийлер мен мысалдарды біріктіретін негізгі тестілеу фреймворкін құра алады.

Қолдаушы және ағынға бағытталған команда арасындағы білім беру уақытша негізде (мысалы, ағынға бағытталған команда контейнерлеу сияқты жаңа технологияны қабылдағанда) немесе ұзақ мерзімді негізде (тезірек жинақтау немесе тезірек тест орындау сияқты үнемі жетілдіріліп отыратын аспектілер үшін) болуы мүмкін. Жұптық жұмыс (Pairing) «Инфрақұрылым код ретінде» (Infrastructure-as-Code) сияқты тәжірибелердің кейбір түрлері үшін өте тиімді болуы мүмкін.

Күтілетін іс-әрекеттер[SUBHEADING]

Көріп отырғанымыздай, қолдаушы командалардың миссиясы — ағынға бағытталған командаларға, әдетте белгілі бір техникалық немесе өнімді басқару саласында жетіспейтін құзыреттерді иеленуге көмектесу.

Тиімді қолдаушы командада қандай іс-әрекеттер мен нәтижелерді көреміз деп күтеміз?

Қолдаушы команда ағынға бағытталған командалардың қажеттіліктерін түсінуге белсенді түрде ұмтылады, жүйелі тексерулер орнатады және қосымша ынтымақтастық қажет болған кезде бірлесіп келіседі.

Қолдаушы команда ағынға бағытталған командалардың нақты қажеттілігі туындағанға дейін өз сараптама саласындағы жаңа тәсілдерді, құралдарды және тәжірибелерді зерттеп, оқиғалардан озып жүреді. Бұрын бұл архитектура немесе инновациялық командалардың миссиясы болған, бірақ басқа командаларға мүмкіндік беруге назар аудару жақсырақ динамика жасайды.

Қолдаушы команда жақсы жаңалықтардың да (мысалы, «Біздің тестілеу кодымызды 50%-ға азайтатын жаңа UI автоматтандыру фреймворкі бар. ») жаман жаңалықтардың да (мысалы, «Біз кеңінен қолданып жүрген X Javascript фреймворкі енді қолдау көрсетілмейді. ») хабаршысы ретінде әрекет етеді. Бұл технологиялық өмірлік циклді басқаруға көмектеседі.

Кейде қолдаушы команда ағынға бағытталған командалар тікелей пайдалануы қазіргі уақытта тым қиын сыртқы (немесе ішкі) сервистер үшін делдал рөлін атқаруы мүмкін.

Қолдаушы команда тек өз ішінде ғана емес, ағынға бағытталған командалар арасында да оқуды насихаттайды, ұйым ішінде білімді тиісінше бөлісуге ықпал ететін куратор ретінде әрекет етеді (Том ДеМарко мен Тим Листер «оқудың негізгі функциясы» деп атайтын нәрсені қолдайды). 10

Кейс: Ірі заң ұйымындағы инженерлік қолдау көрсету командасы

Робин Уэстон, BCG Digital Ventures инженерлік көшбасшысы

2017 жылы мен ірі заң ұйымында жаңадан құрылған инженерлік қолдау көрсету командасымен бір жылдық консалтингтік жобаны басқардым. Ұйымның бағдарламалық қамтамасыз етуді әзірлеу мүмкіндігі бірнеше жаһандық командалар арасында бөлінген болатын.

Инженерлік қолдау көрсету командасы ұйым бойынша сезіліп жүрген бірқатар ауыр белгілерге жауап ретінде құрылды, олар: мүмкіндіктерді (features) жеткізу уақытының ұзақтығы, бөлек жүйелер үшін байланысқан релиз циклдері, команданың төмен рухы, оқшауланған техникалық білім және (ең бастысы) өзгерістердің инновациялық қарқынын сақтай алмау салдарынан ұйымның бәсекелестерден қалып қоюы еді.

Мүмкіндік беруші команда бағдарламалық инженерия саласында (қосымшаларды әзірлеу, жинау және шығару, тестілеу және т. б. ) терең дағдылары мен білімі бар адамдардан құралды. Маңыздысы, біз жай ғана жаңа технологиялар мен құралдарды әкелудің орнына, озық тәжірибелермен бөлісуге және командаларды оқытуға назар аудардық. Мәдениетті және әзірлеушілер тобының дағдыларын өзгертпестен, тек жаңа жинақтау және деплоймент (бағдарламалық жасақтаманы серверге орналастыру) құралдарын енгізу пайдадан гөрі зиян тигізуі мүмкін. Біз ұйым бойынша ашық бөліскен «командалық хартияны» әзірледік:

Біздің басты мақсатымыз — командаларға мүмкіндік беріп, функцияларды тезірек және жоғары сапамен жеткізуге жағдай жасау. Келесі көрсеткіштерді жақсарту үшін бізде алғашқы сегіз апта бар:

Әрбір сәтті деплойментке кететін уақыт

Күніне орындалатын сәтті деплойменттердің абсолюттік саны

Сәтсіз деплойментті түзетуге кететін уақыт

Кодты енгізуден бастап деплойментке дейінгі уақыт (цикл уақыты)

Инженерлік мәселелерді жоғарыдан бұйрық беру арқылы шешуге тырысу сәтсіздікке ұшырайды, себебі сізге тікелей «көмір қабатында» (жұмыс істеп жатқан жерде) жүрген адамдардың қолдауы қажет. Мүмкіндік беруші команданың өзі әдейі сыртқы кеңесшілер мен жұмыс істеп тұрған командалардың әзірлеушілерінен құралды. Команданың миссиясын бастау үшін біз барлық жаһандық әзірлеу топтарының өкілдерін шақырып, ұйым деңгейінде воркшоп өткіздік.

Мен инженерлік мүмкіндік беруші команда басқа командалар оған тәуелді болып қалмауы үшін, алғашқы күннен бастап өзінің «жойылуын» жоспарлауы керек деп есептедім. Біз басқа командалардың өз бетінше жұмыс істей алуы үшін жасап жатқан барлық ісімізді көрсетіп отырдық. Осы мақсатта біз моб-бағдарламалау (бүкіл команда бір кодпен жұмыс істеуі) сессияларын өткіздік, демо-нұсқаларды жаздық және әр команданы өзіміздің көрсетілімдерімізге шақырдық. Біз команда уақытының төрттен бірін ғана шешімдерді іске асыруға, ал қалған бөлігін білім бөлісуге жұмсадық деп есептейміз.

Алғашқы сегіз аптадан кейін біз келесі нәтижелерді көрдік:

Деплоймент уақыты 72%-ға қысқарды

Күніне деплоймент конвейерін іске қосу саны 700%-ға артты

Деплоймент конвейерінің жұмыс істеу ұзақтығы 98%-ға қысқарды (он сағаттан он бес минутқа дейін! )

Сәтсіз жинақтар орта есеппен жиырма үш сағат ішінде түзетілді (бұрын бірде-бір сәтті жинақ болмаған! )

Абсолютті сандардың өзі соншалықты әсерлі болмаса да, нақты ілгерілеуді көрсете алуымыз командаға сенімділік берді. Бұл бізге ұйым ішінде басқа да түйткілді мәселелерді шешу үшін ауқымды өзгерістер жасауға мүмкіндік берді.

Мүмкіндік беруші команданың басты мақсаты — ағынға бағытталған командаларға (негізгі бизнес құндылығын жеткізуші командалар) жұмыс істейтін бағдарламалық жасақтаманы тұрақты әрі жауапты түрде жеткізуге көмектесу. Олар ағынға бағытталған командалардың нашар тәжірибелерінен, қате басымдықтарынан немесе сапасыз кодынан туындаған мәселелерді шешу үшін қызмет етпейді. Ағынға бағытталған командалар мүмкіндік беруші командалармен жаңа технологияны, тұжырымдаманы немесе тәсілді меңгеру үшін ғана қысқа мерзімде (апталар немесе айлар) жұмыс істеуі керек. Жаңа дағдылар мен түсініктер командаға сіңгеннен кейін, мүмкіндік беруші команда күнделікті өзара әрекеттесуді тоқтатып, назарын басқа командаға аударады.

Мүмкіндік беруші команда мен Тәжірибелік қауымдастықтар (CoP)

Мүмкіндік беруші командалар да, тәжірибелік қауымдастықтар (бір қызығушылығы бар адамдар тобы) да басқа командалардың білімі мен мүмкіндіктерін арттыруға көмектесе алады. Мүмкіндік беруші команда мүшелері бұл жұмыспен толық уақыт айналысады, ал тәжірибелік қауымдастық — бұл әртүрлі командалардан жиналған, апта сайын (немесе ай сайын) тәжірибе алмасуды мақсат ететін адамдар тобы. Эмили Веббер өзінің «Building Successful Communities of Practice» атты кітабында былай дейді: «Тәжірибелік қауымдастықтар әлеуметтік оқу, тәжірибе арқылы үйрену және жан-жақты білім алу үшін қолайлы орта жасап, мүшелердің жедел оқуына ықпал етеді».

Мүмкіндік беруші командалар мен тәжірибелік қауымдастықтар қатар өмір сүре алады, өйткені олардың мақсаттары мен динамикасы сәл өзгеше: мүмкіндік беруші команда — бұл бір немесе бірнеше командаға нақты уақытта білім беруге бағытталған мамандардың шағын тобы, ал тәжірибелік қауымдастық білімді көптеген командаларға таратуға тырысады. Әрине, бірнеше мүмкіндік беруші командалардың өздерінің «мүмкіндік беруші командалар қауымдастығы» болуы мүмкін!

Күрделі ішкі жүйе командалары

Күрделі ішкі жүйе командасы жүйенің арнайы мамандандырылған білімді талап ететін бөлігін құруға және қолдауға жауапты. Оның күрделілігі соншалық, команда мүшелерінің көпшілігі сол салада маман болуы керек.

Бұл команданың мақсаты — күрделі ішкі жүйені пайдаланатын ағынға бағытталған командалардың когнитивті жүктемесін (ақпаратты өңдеуге кететін ақыл-ой күші) азайту. Команда ішкі жүйенің күрделілігін сирек кездесетін арнайы білім арқылы шешеді. Біз мұндай мамандарды барлық ағынға бағытталған командаларға қоса алмаймыз; бұл тиімсіз әрі қымбат болар еді.

Күрделі ішкі жүйелерге бейне өңдеу кодегін, математикалық модельді, нақты уақыттағы сауданы салыстыру алгоритмін немесе бет-әлпетті тану жүйесін жатқызуға болады.

Дәстүрлі компоненттік команда мен күрделі ішкі жүйе командасының басты айырмашылығы мынада: соңғысы ішкі жүйе тек арнайы мамандандырылған білімді қажет еткенде ғана құрылады. Шешім компонентті бөлісу мүмкіндігіне емес, команданың когнитивті жүктемесіне негізделеді.

Соның салдарынан, Team Topologies бойынша жұмыс істейтін ұйымда дәстүрлі құрылыммен салыстырғанда күрделі ішкі жүйе командалары аз болады. (Осы тараудың соңында біз дәстүрлі компоненттік командаларды ағынға бағытталған командаларды қолдайтын негізгі топологияларға қалай көшіру керектігін қарастырамыз. )

Күтілетін іс-әрекеттер

Күрделі ішкі жүйе командаларының миссиясы — ағынға бағытталған командаларды мамандар тобы әзірлеуі тиіс өте күрделі бөліктерден босату.

Тиімді күрделі ішкі жүйе командасынан қандай іс-әрекеттер мен нәтижелер күтеміз?

Команда ішкі жүйенің даму кезеңін ескереді: ерте кезеңде ағынға бағытталған командалармен тығыз жұмыс істейді; ішкі жүйе тұрақталған кезде интерфейс пен функцияларды дамытуға көбірек көңіл бөліп, өзара әрекетті азайтады.

Ішкі жүйені жеткізу жылдамдығы мен сапасы оны ағынға бағытталған команда әзірлеген кезден (бөлу туралы шешім қабылданғанға дейін) айтарлықтай жоғары болады.

Команда ағынға бағытталған командалардың қажеттіліктерін ескере отырып, алдағы жұмыстарды дұрыс басымдыққа қояды және орындайды.

Платформалық командалар

Платформалық команданың мақсаты — ағынға бағытталған командаларға жұмысты айтарлықтай автономиямен орындауға мүмкіндік беру. Ағынға бағытталған команда өз қосымшасын құруға, іске қосуға және түзетуге толық жауапты болады. Платформалық команда осы қосымшаларды әзірлеуге қажетті ішкі қызметтерді ұсынып, ағынға бағытталған командалардың когнитивті жүктемесін азайтады.

«Платформа» терминінің бұл анықтамасы Эван Боттчердің цифрлық платформа туралы анықтамасына сәйкес келеді:

«Цифрлық платформа — бұл өзіне-өзі қызмет көрсететін API-лер, құралдар, қызметтер, білім мен қолдаудың негізі, олар тартымды ішкі өнім ретінде жинақталған. Автономиялы командалар өнім функцияларын жылдамырақ және үйлестіруді аз қажет ететіндей жеткізу үшін осы платформаны пайдалана алады». 12

Бұл тәсіл көптеген интернет-дәуір ұйымдарында сәтті қолданылды. Платформалық команданың білімі ұзақ нұсқаулықтардың орнына веб-портал немесе бағдарламаланатын API арқылы өзіне-өзі қызмет көрсету мүмкіндігі ретінде қолжетімді болуы керек. Платформаны қабылдау үшін «пайдалану жеңілдігі» өте маңызды. Платформалық командалар өз қызметтерін ішкі немесе сыртқы тұтынушыларға арналған сенімді әрі ыңғайлы өнім ретінде қарастыруы керек. Ютта Экштейн былай деп кеңес береді: «Техникалық қызмет көрсету топтары әрқашан өздерін домендік командаларға қызмет көрсетуші ретінде сезінуі тиіс». 13

Prezi-дің бұрынғы платформа инженері Петер Ноймaрк платформалық команда мен олар қолдайтын ағынға бағытталған командалар арасындағы мақсаттардың сәйкестігін баса айтады: «Платформалық команданың құндылығы олардың өнім командаларына ұсынатын қызметтерінің құндылығымен өлшенеді». 14

Іс жүзінде, платформалық командалар көптеген сапасыз қызметтердің орнына, жоғары сапалы бірнеше негізгі қызметтерді ұсынуға назар аударуы керек. Жұмсалған күш пен сапа арасындағы тепе-теңдікті сақтау әрқашан қажет. Коммерциялық өнімдер сияқты, платформа әртүрлі қызмет деңгейлерін ұсына алады. Егер барлық командалар «премиум деңгейдегі» қызметтерді (мысалы, тоқтаусыз жұмыс, автоматты масштабтау) талап етсе, платформалық команда сұранысты өтей алмауы мүмкін.

Дон Райнертсен сұранысты реттеу үшін ішкі баға белгілеуді (инфрақұрылым мен қызметтер үшін) қолдануды ұсынады. 15 Мысалы, бұлттық инфрақұрылым шығындарын командалар немесе қызметтер бойынша қадағалауға болады.

Платформаның шекаралары әртүрлі болуы мүмкін. «Қалың» платформа көптеген қызметтерді ұсынатын бірнеше ішкі командалардан тұруы мүмкін. «Жұқа» платформа дайын шешімнің үстіндегі қабат қана болуы мүмкін.

Көптеген платформалар инфрақұрылымды, желіні және басқа да техникалық деңгейдегі мүмкіндіктерді абстракциялайды. Бұл жақсы бастама, бірақ платформа жоғарырақ деңгейдегі функцияларды да қамтуы мүмкін.

Күтілетін іс-әрекеттер

Платформалық команданың миссиясы — ағынға бағытталған командаларға қажетті ішкі қызметтерді ұсыну, осылайша олардың когнитивті жүктемесін азайту.

Тиімді платформалық командадан қандай іс-әрекеттер мен нәтижелер күтеміз?

Платформалық команда ағынға бағытталған командалардың қажеттіліктерін түсіну үшін олармен тығыз жұмыс істейді.

Команда жылдам прототиптеу әдістерін қолданады және кері байланыс алу үшін ағынға бағытталған команда мүшелерін тартады.

Платформалық команда қызметтердің ыңғайлылығы мен сенімділігіне баса назар аударады (платформаны өнім ретінде қарастырады) және олардың әлі де тиімді екенін үнемі тексеріп отырады.

Платформалық команда үлгі көрсетеді: өздері ұсынатын қызметтерді іштей қолданады, басқа командалармен серіктес болады және мүмкіндігінше төмен деңгейлі платформаларды пайдаланады.

Команда жаңа қызметтердің бірден емес, уақыт өте келе қабылданатынын түсінеді.

Кейс-стади: Sky Betting &amp; Gaming — Платформалық функционалдық командалар (1-бөлім)

Майкл Майбаум, Sky Betting &amp; Gaming бас сәулетшісі

Sky Betting & Gaming — Leeds қаласында орналасқан британдық құмар ойындар компаниясы. 1999 жылы негізі қаланған компания онлайн бәс тігу индустриясында инновациялардың көшбасшысы болды. 2009 жылдан бастап компания жылдам инновациялар мен 24/7 жұмыс режимін қамтамасыз ету үшін ішкі техникалық тәжірибеге көп қаражат бөле бастады.

Мен 2012 жылы қосылғаннан бері SB&G тұрақты әрі жылдам өзгерістер орнына айналды. Басында технологиялық бөлім тек сыртқы әзірлеушілер жасаған қосымшаларды хостингпен қамтамасыз етуге бағытталған инфрақұрылымдық функция болды. 2009 жылы бизнес тезірек қозғалып, көбірек бақылауға ие болу керек деген шешім қабылдады.

Біздің бағдарламалық жасақтаманы жеткізуіміз әрқашан Agile тәсілін қолданды. Уақыт өте келе біз бірнеше ұйымдық өзгерістерді бастан өткердік. Осы процестің басында біз жұмыс тәсілімізге DevOps-ты енгізе бастадық. Біз нақты мақсаттардан және арнайы «бастапқы» командадан бастадық. Мысалы, жинақтау және шығару құралдарын жақсартуды қолға алдық, өйткені бағдарламалық жасақтаманы әзірлеуде Agile болғанымызбен, оны тікелей қолданысқа енгізуде қиындықтар туындады. Кейінірек біз DevOps тәжірибелерін командалардың негізгі бөлігіне айналдырдық.

Осы жылдам өсу кезеңінде біз конфигурацияны басқару мәселесін шешуіміз керек болды. Біз бағдарламалық және инфрақұрылымдық мамандардан тұратын платформаны дамыту командасын құрдық. Бұл команданың басты басымдығы Chef құралын пайдаланып конфигурацияны басқару жүйесін енгізу болды.

Көп ұзамай біз маңызды сабақ алдық. Chef-тің алғашқы енгізілуі орталықтандырылған функцияның өнімі болды және ол жылдам өзгеру кезеңінде үлкен кедергіге айналды. Дизайн тәсілі шектеуші фактор болды. Бізде үлкен Chef ортасы және оның айналасында көптеген адамдар қолданатын құралдар жиынтығы болды. Көп ұзамай командалар бір-біріне кедергі келтіре бастады — ортақ тәуелділіктер, әртүрлі басымдықтар, жаңартудағы қиындықтар сияқты көптеген командалар арасындағы ортақ жүйелердің барлық әдеттегі мәселелері туындады.

(8-тарауда жалғасады)

Платформаны басқа іргелі командалар топтарынан құрастыру

Ірі ұйымдарда платформаны құру және іске қосу үшін бірнеше команда қажет болуы мүмкін. Мұндай жағдайларда платформа басқа іргелі команда түрлерінен құралады: ағынға бағытталған, мүмкіндік беруші, күрделі ішкі жүйе және платформалық. Иә, платформаның өзі платформаның үстінде құрылады. Алайда, платформалық командалардың бағытталған ағындары негізгі өнімдерді жасайтын командалардан өзгеше. Платформадағы ағындар логтау, мониторинг, тест орталарын құруға арналған API-лер сияқты қызметтерге қатысты болады. Біз бұл ішкі топологияларды 96-беттегі 5. 2-суреттен көре аламыз.

Image segment 680
  1. 2-сурет: Бірнеше іргелі команда топологияларынан тұратын платформа

Ірі ұйымда платформа бірнеше басқа іргелі команда топологияларынан тұрады: ағынға бағытталған Dev командалары, күрделі ішкі жүйе командалары және төмен деңгейлі платформа.

Бұл платформа ішіндегі «фракталдық» немесе кірістірілген командаларды жасайды. Джеймс Уомак пен Даниэль Джонс айтқандай, «бүкіл өнім желісін қадағалайтын менеджер құндылық ағынының әртүрлі бөліктеріне жауапты бірнеше менеджерлермен жұмыс істей алады». 16 Біз жай ғана платформа шекарасында әртүрлі команда топологияларына арналған нұсқаулықтарды қолданамыз.

Dev командалары үшін платформа — бұл API арқылы қызмет көрсететін біртұтас құрылым. Алайда платформаның ішінде желімен, орталармен, метрикалармен айналысатын бірнеше жеке командалар бар, олар өз кезегінде басқа платформалық командалармен ынтымақтасады немесе оларға қызмет көрсетеді.

Бұл тәсіл Джеймс Уркхарт сипаттаған «көпқабатты Ops» тәсіліне ұқсас. Бұл жерде бір команда негізгі инфрақұрылымды (физикалық және виртуалды) қамтамасыз етсе, екінші команда сол инфрақұрылымның үстіндегі қызметтерді іске қосуға назар аударады. 17 (Бұл туралы толығырақ 8-тарауда).

Кейс-стади: Auto Trader-дегі жоғары деңгейлі IT-операциялардың дамуы

Дэйв Уайт, операциялық инженерия жетекшісі, Auto Trader Энди Хамфри, тұтынушылармен жұмыс бөлімінің басшысы, Auto Trader

Auto Trader — Ұлыбританиядағы ең ірі цифрлық автокөлік нарығы. Ол Ұлыбританиядағы көлік сатып алу және сату процесін үнемі жақсартуды мақсат етеді. Auto Trader — 100% цифрлық бизнес. 1977 жылы жергілікті журнал ретінде жұмысын бастап, ол өз тұтынушыларымен бірге дамыды. 2013 жылы баспа өнімінен толық цифрлық нарыққа көшуді сәтті аяқтады. Қазіргі уақытта ол FTSE 250 индексінің мүшесі болып табылады.

Баспа ұйымынан толық цифрлық бизнеске көшу үлкен өзгерістерді талап етті. 2013 жылы ұйым өте оқшауланған болатын, Лондонда «бизнес», ал екі жүз миль қашықтықтағы Манчестерде «IT» бөлімі болды. IT жұмысы үлкен жобалар арқылы жүзеге асырылды және бұл сенімсіздік тудырды. Әзірлеушілер жобаны іске қосылған күні тастап кететін, бұл жүйеге деген жауапкершілік сезімін жойды.

Жағдайды қиындатқан тағы бір мәселе: 2013 жылға дейін жаңа жобалар капиталдық шығындар (CapEx) есебінен қаржыландырылды, ал IT-операциялар операциялық шығындар (OpEx) ретінде қарастырылды. Бұл нәрсе жасаушылар мен оны іске қосушылар арасында үлкен алшақтық тудырды. Әзірлеушілерге «тек жаңа нәрселер жасау керек» деген тапсырма берілді, сондықтан олар қателерді түзетумен немесе тұтынушыға пайдалы нәрселермен айналыса алмады. Олар пайдаланушыларға емес, менеджментке қызмет етті. Біз мұны өзгерту керек екенін білдік.

Сондықтан 2013 жылы біз бәрін <span data-term="true">OpEx-ке</span> (операциялық шығындар — компанияның күнделікті жұмысына жұмсалатын қаражат) көшірдік. Қазір әркім компанияға табыс әкелу үшін қажетті жұмысты орындап жатыр. Біздің тек OpEx-ке негізделген моделіміздің арқасында әрбір қызметкер тұтынушыға жақындай түсті, өйткені біз «өнім менеджері үшін жаңа дүниелер жасауды» емес, пайдаланушылардың қажеттіліктерін өтеуді ойлаймыз. Шын мәнінде, OpEx біз үшін әдейі жасалған мүмкіндік беруші шектеу болып табылады: бізде сегіз жүз адамға жуық тұрақты жұмыс күші бар және біз оны қатты ұлғайтуды жоспарлап отырған жоқпыз. Бұл тұрақты адамдар тобы бағдарламалық қосымшаларымыз бен қызметтерімізге үздіксіз қолдау көрсетуге көмектеседі.

100% цифрлық жүйеге көшудің бір бөлігі ретінде біз тұтынушының бастан-аяқ жолына жауап беретін ұзақ мерзімді, көпфункционалды сквадтарға (шағын, автономды командалар) ауыстық. Біз бұл модельді Spotify идеяларына негіздеп, бірақ оны өз контекстімізге икемдеп алдық. Сондай-ақ, біз басқа командаларға CD (үздіксіз жеткізу — бағдарламалық жасақтаманы автоматты түрде жиі шығару процесі) тәжірибелерін, мысалы, автоматтандырылған орналастыру құбырларын, тесттерді автоматтандыруды, жан-жақты мониторингті және ортаны автоматты түрде дайындауды енгізуге көмектесетін арнайы команда құрдық. Үш ай ішінде біз бірінші қосымшаны орналастыруды толық автоматтандырдық, содан кейін келесі қосымшаға көштік. Бұл мүмкіндік беруші команда не істеу керектігін тереңірек түсінген сайын, біз оны платформалық әзірлеу командасына (біз оны Инфрақұрылымдық инженерия деп атадық) айналдырудың қисынды екенін түсіндік.

2018 жылға қарай Инфрақұрылымдық инженерияның міндеті — Dev (әзірлеу) командаларының қиындықтарын жеңілдететін, оларға өз өнімдері мен қызметтерін, соның ішінде пайдалану аспектілерін бақылауға мүмкіндік беретін платформаны құру және дамыту болды. Платформа аясында бізде бірнеше түрлі сквадтар бар: кейбіреулері платформа мүмкіндіктері үшін жаңа өнімдерді әзірлеуге бағытталған (олар TDD [тест арқылы әзірлеу — алдымен тест жазып, сосын код жазу әдісі], ретроспективалар және өнім иелері сияқты стандартты Agile әдістерін қолданады), ал кейбіреулері күнделікті операциялық жұмыстарға бағытталған. Бізде «DevOps» мамандары жоқ; оның орнына тірі қызмет көрсету мәселелерін терең талдайтын тәжірибелі операциялық инженерлер бар. Бұл біздің инфрақұрылым саласындағы назарымыз Dev командаларының жұмыс ағынына және қосымша мен инфрақұрылымдағы өзгерістердің тұтынушыларға қалай әсер ететініне бағытталғанын білдіреді.

Платформа сквадтарға тек өнімнің көрінетін мүмкіндіктеріне ғана емес, сонымен қатар Auto Trader сияқты заманауи цифрлық ұсыныстар үшін маңызды болып табылатын көзге көрінбейтін операциялық мәселелерге де назар аударуға мүмкіндік береді. Платформа өнім сквадтарына жұмысқа қабілеттілік туралы қамқорлық жасауға уақыт береді. Қызығы, басқа ұйымдардан айырмашылығы, біз ешқашан Ops (пайдалану) мамандарын Dev сквадтарына қоспадық. Оның орнына бізде әрбір Dev сквад үшін Ops «сквад досы» (squad buddy) бар — бұл нақты Dev сквадтарымен үнемі жұмыс істейтін, олардың жиналыстарына қатысатын және Dev пен Ops арасындағы «байланыстырушы» рөлін атқаратын Ops маманы.

2013 жылдан бастап Auto Trader-де «IT департаменті» деген түсінік жоқ: өнім мен технология — бұл бір департамент, бір үлкен команда. Біз Lean (үнемді — шығындарды азайтуға бағытталған басқару тәсілі) ойлау тәсілдерін ұйымның басқа салаларына да енгіздік, сондықтан қазір бізде WIP шектеулері (бір уақытта орындалатын жұмыс көлемін шектеу) бар канбан тақталарын қолданатын есепке алу және сату бөлімдері бар. Тіпті сату бөлімі жіберіп алған сату мүмкіндіктері бойынша «кінәсіз» оқиғадан кейінгі талдаулар (post-incident reviews) жүргізеді!

Өзгерістер ағынындағы командалық оқшауланудан қашу

Жалпы айтқанда, егер біз бағдарламалық жасақтаманы жылдам әрі қауіпсіз жеткізгіміз келсе, тек бір функционалдық мамандығы бар адамдардан тұратын командалардан аулақ болуымыз керек. Дәстүрлі түрде көптеген ұйымдар қызметкерлерді келесідей топтастыру арқылы функционалдық сараптаманың «аралдарын» немесе «оқшауланған бағаналарын» (silos) құрды:

Тестілеу немесе «сапаны қамтамасыз ету» (QA)

Деректер базасын басқару (DBA)

Пайдаланушы тәжірибесі (UX)

Архитектура

Деректерді өңдеу (мысалы, ETL)

Көптеген жылдар бойы көптеген ұйымдар тірі немесе өндірістік жүйелердің барлық аспектілерін басқару үшін арнайы «операциялық» команданы қолданды, бұл бағдарламалық жасақтаманы жасаушы командалардан жұмысты ресми тапсыру және өзгерістерді қабылдаудың кешігуі салдарынан өзгерістер ағынына кедергі келтірді. Бұл модель де өзгерістердің қауіпсіз және жылдам ағыны үшін тиімсіз; оның орнына біз өндірістегі бағдарламалық жасақтаманы бірге қолдайтын және пайдаланатын ағынға бағытталған командаларды (жұмыс ағынына сәйкес құрылған топтар) және осы командалар үшін негізгі «субстратты» қамтамасыз ететін платформалық командаларды біріктіреміз.

Өзгерістердің қауіпсіз және жылдам ағыны үшін оңтайландырылған ұйымдар жұмыс ағынына сәйкес келетін әртүрлі пәндік немесе кросс-функционалды командаларды қолдануға бейім — біз оларды ағынға бағытталған командалар деп атаймыз. Кейде белгілі бір сала өте күрделі болғандықтан, арнайы күрделі ішкі жүйе командасы қажет болуы мүмкін (осы тараудың алдыңғы бөлімін қараңыз). Бірақ мұндай командалар ешқашан өзгерістер ағынының ортасында тұрмайды; оның орнына олар ағынға бағытталған командаларға қызмет көрсетеді. Жұмыс ешқашан кейінгі кезең үшін басқа командаға тапсырылмайды.

Кросс-функционалды командалармен жұмысты қарапайым ұстау.

Кросс-функционалды, ағынға бағытталған командаларды пайдаланудың өте пайдалы жанама әсері бар. Дәл осы командалар әртүрлі дағдылары бар адамдардан тұратындықтан, кез келген жағдайда ең қарапайым, пайдаланушыға ыңғайлы шешімді табуға деген күшті ұмтылыс болады. Бір салада терең білімді қажет ететін шешімдер, ағынға бағытталған команданың барлық мүшелеріне түсінікті қарапайым шешімдерден жеңіліп қалуы мүмкін.

Жақсы платформа «жеткілікті көлемде» болады

Хенрик Книберг «тұтынушыға бағытталған платформалық командалар» деп атайтын жақсы жобаланған және жақсы басқарылатын платформа ұйымдар ішінде бағдарламалық жасақтаманы жеткізу үшін маңызды «күш еселеуші» бола алады, бірақ платформаның әрқашан оны қолданатын қосымшалар мен қызметтердің қажеттіліктеріне қызмет етуін қадағалау керек, керісінше емес.

Жақсы платформа Dev командаларына тез және тиімді жаңалықтар енгізу үшін стандарттарды, шаблондарды, API-лерді және жақсы тексерілген озық тәжірибелерді ұсынады. Жақсы платформа Dev командаларына ұйым үшін дұрыс нәрселерді дұрыс жолмен жасауды жеңілдетуі керек; бұл тек бағдарламалық жасақтамаға ғана емес, өнімді әзірлеудің барлық түрлеріне қатысты. Көбінесе платформа бұрынғы жүйелік әкімшілерге бағдарламалық жасақтаманы әзірлеудің жақсы анықталған әдістерін (Agile тәжірибелері, TDD, үздіксіз жеткізу, өнімді басқару және т. б. ) қолданбай құруға және басқаруға қалдырылады; немесе ұйым тарапынан соншалықты аз қаржыландыру мен назарға ие болады, сондықтан ол басқа командаларға көмектесудің орнына, тек кедергі келтіреді.

Ең жұқа өміршең платформа (TVP)

Ең қарапайым платформа — бұл жай ғана вики-беттегі бағдарламалық жасақтама қолданатын негізгі компоненттердің немесе қызметтердің тізімі. Егер бұл компоненттер мен қызметтер әрқашан сенімді жұмыс істесе, онда толық уақытты платформалық команданың қажеті жоқ. Дегенмен, негізгі субстрат күрделене түскен сайын — тіпті барлық компоненттер мен қызметтер сырттан алынса да — платформалық команда жаңа және ескірген API-лер мен компоненттерді үйлестірумен айналыса отырып, платформаның егжей-тегжейлеріне құнды басқару абстракциясын ұсына алады. Егер ұйымға Dev командаларының қажеттіліктерін қанағаттандыру үшін платформаға арнайы шешімдер мен интеграциялар құру қажет болса, онда платформалық команданың қызмет аясы одан әрі кеңейеді.

Барлық жағдайларда біз ең жұқа өміршең платформаға (TVP — қажеттілікті өтейтін ең қарапайым платформа) ұмтылуымыз керек және платформаның негізгі талқылау тақырыбына айналуына жол бермеуіміз керек. Аллан Келли айтқандай: «Бағдарламалық жасақтама әзірлеушілері платформа құруды жақсы көреді және өнімді басқарудың қатаң бақылауынсыз қажеттіктен үлкенірек платформа жасайды». TVP — бұл платформаны шағын ұстау және оның платформада жұмыс істейтін командалар үшін бағдарламалық жасақтаманы жеткізуді жеделдету мен жеңілдетуге көмектесуін қамтамасыз ету арасындағы мұқият теңгерім.

Когнитивтік жүктемені азайту және өнімді әзірлеуді жеделдету

Соңғы бірнеше онжылдықтағы сәтті, танымал бағдарламалық технологиялық платформаларды қарастырайық: IBM 8086 процессоры, Linux және Windows операциялық жүйелері, Borland Delphi, Java Virtual Machine, . Net Framework, Pivotal Cloud Foundry, Microsoft Azure және (жақында) IoT платформасы balena. io мен контейнерлік платформа Kubernetes. Бұл платформалардың барлығы негізгі жүйелердің күрделілігін азайтып, платформада жұмыс істейтін командаларға пайдалы болу үшін жеткілікті функционалдылықты ашты. «Әзірлеушінің өмірін жеңілдетуге» (Конвей айтқандай) және когнитивтік жүктемені (ақпаратты өңдеуге кететін ақыл-ой күші) азайтуға ұмтылу — жақсы платформаның маңызды аспектісі.

Dev командаларының когнитивтік жүктемесін азайтуға ұмтыла отырып, жақсы платформа оларға мәселенің маңызды (ерекшеленетін) аспектілеріне назар аударуға көмектеседі, жеке және командалық деңгейдегі жұмыс қарқынын арттырады және бүкіл команданың тиімдірек болуына мүмкіндік береді. Жаһандық Conde Nast International баспа компаниясының қызметкері Кеничи Шибата айтқандай: «Платформаның ең маңызды бөлігі — оның әзірлеушілер үшін жасалғандығында».

Тартымды, жүйелі және дұрыс таңдалған шектеулер

Платформаның командалардың қажеттіліктерінен алшақтап кетуі сияқты жиі кездесетін қателіктен аулақ болу үшін, платформалық командалардың пайдаланушы тәжірибесіне (UX) және әсіресе әзірлеуші тәжірибесіне (DevEx) назар аударуын қамтамасыз ету маңызды. Бұл платформа ұлғайған сайын платформалық командаларға UX мүмкіндіктерін қосу қажет дегенді білдіреді. Шибата былай дейді: «Әзірлеушілер кейде ренжуі мүмкін... Платформа әзірлеушілеріне кері байланыс берудің және платформаның жалпы жағдайы туралы айтудың жолы болуы керек. Онсыз платформа компанияның қалған бөлігінен оқшауланып қалады. Оны енгізу өте қиын болады».

Жақсы UX/DevEx-ке назар аудару платформаны пайдалануға тартымды етеді және платформа API-лері мен мүмкіндіктерінің жұмыс істеу тәсілінде жүйелілік сезіледі. Нұсқаулықтар мен басқа құжаттамалар жан-жақты (бірақ артық сөзсіз), өзекті болады және платформаның әрбір бұрышын сипаттауға емес, нақты тапсырмаларды орындауға бағытталады.

Платформа Dev командаларына «кедергі жасамауға» тырысады, бұл оларға командалардың қалай жұмыс істеуі керектігі туралы ешқандай алдын ала түсініксіз қажетті нәрсені құруға мүмкіндік береді. DevEx үшін жақсы тест — жаңа әзірлеушіні платформаға қосудың қаншалықты оңай екендігі.

Негізгі платформада құрылған

Әрбір бағдарламалық қосымша және әрбір бағдарламалық қызмет платформада құрылады. Көбінесе платформа жасырын немесе байқалмайды, бірақ ол бәрібір бар. Философиялық сөзбен айтқанда: бұл «тасбақалардың үстіндегі тасбақалар» (төмен қарай шексіз кете беретін қабаттар).

Бағдарламалық жасақтама контекстінде бұл метафора әрбір платформаның өзі басқа платформада құрылғанын білдіреді. Егер негізгі немесе төменгі деңгейдегі платформа жақсы анықталмаған немесе тұрақсыз болса, жоғарғы платформа да тұрақсыз болады және ұйымның қалған бөлігінде бағдарламалық жасақтаманы жеткізуді жеделдету үшін қажетті берік негіз бола алмайды. Егер негізгі платформада операциялық қиындықтар немесе өнімділік мәселелері болса, платформалық команда операциялық мәселелер үшін оқшаулау абстракциялары мен уақытша шешімдер құруы керек және Dev командаларына бұл мәселелерден қалай аулақ болу керектігін түсіндіруі қажет. Бұл Стаффорд Бирдің классикалық «Brain of the Firm» кітабында сипатталған көп деңгейлі өміршең жүйелер моделіне (VSM) сәйкес келеді.

Ұйымыңызда қолданылатын платформа қабаттарын нақтылау үшін үлкен диаграмма салыңыз. Бұл ішкі платформалық командаларға және сол платформаны пайдаланатын командаларға платформаның нені қамтамасыз ететінін және оның неге тәуелді екенін түсіндіруге көмектеседі.

Тірі өнім немесе қызмет ретінде басқару

Платформаның пайдаланушылары (Dev командалары) және нақты анықталған белсенді жұмыс сағаттары бар (Dev командалары оны пайдаланған кез келген уақытта). Пайдаланушылар платформаның сенімділігіне тәуелді болады және жаңа мүмкіндіктердің қашан пайда болатынын, ал ескілерінің қашан тоқтатылатынын түсінуі керек. Сондықтан Dev командаларының барынша тиімді болуына көмектесу үшін бізге: (1) платформаға тірі/өндірістік жүйе ретінде қарау, кез келген тоқтап қалуды жоспарлау және басқару, және (2) бағдарламалық өнімді басқару және қызметті басқару әдістерін қолдану қажет.

Платформаға тірі немесе өндірістік жүйе ретінде қараған кезде, біз кез келген басқа тірі жүйе сияқты барлық қалыпты әрекеттерді орындауымыз керек: жұмыс сағаттарын анықтау, оқиғалар мен қолдау көрсетуге жауап беру уақытын анықтау, платформаны қолдау үшін кезекшілік кестесін қамтамасыз ету, оқиғалар мен жоспарланбаған тоқтауларды тиісті байланыс арналары (мысалы, қызмет күйі беттері) арқылы басқару және т. б. Әрине, платформа ұлғайған сайын, ұйымдағы командаларға нақты не қажет екенін және сырттан не алуға болатынын қайта қарастыру пайдалы болуы мүмкін, осылайша платформалық командалардың операциялық қолдау жүктемесін азайтуға болады.

Сонымен, нақты пайдаланушылары мен жұмыс сағаттары бар тірі бағдарламалық жүйені қалай басқарамыз? Бағдарламалық өнімді басқару әдістерін қолдану арқылы. Сондықтан платформаның өнімді басқару мамандары жасаған, пайдаланушылардың (Dev командаларының) қажеттіліктеріне негізделген даму жоспары (roadmap) болуы керек. Платформалық команда пайдаланушылардың кейіпкерлерімен (мысалы, веб-әзірлеуші Самир, тестілеуші Дженнифер, өнім иесі Мани, қызмет көрсету инженері Джек және т. б. ) жұмыс істейтіні сөзсіз. Пайдаланушы кейіпкерлері платформалық командаға платформаның типтік пайдаланушыларының қажеттіліктерін, кедергілерін және мақсаттарын түсінуге көмектеседі. Платформалық команда мүшелері тұтынушыларға не қажет екенін түсіну үшін олармен үнемі байланыста болады.

Ең бастысы, платформалық «өнімнің» эволюциясы жай ғана Dev командаларының сұраныстарымен ғана жүрмейді; керісінше, ол ұзақ мерзімді перспективада олардың қажеттіліктерін қанағаттандыру үшін мұқият қалыптастырылады. Мүмкіндіктердің қолданылуы метрикалармен бақыланады және басымдықтарды анықтау үшін қолданылады. Платформа — бұл тек Dev командаларының бұрын сұраған мүмкіндіктерінің жиынтығы емес, ол саладағы технологиялық өзгерістер мен ұйымның өзгеретін қажеттіліктерін ескеретін тұтас, жақсы жасалған дүние. Жақсы платформа сонымен қатар қауіпсіздік және аудит командаларының Dev командаларымен өткізетін уақытын азайтуға қызмет етеді.

Жалпы команда түрлерін негізгі команда топологияларына түрлендіру

Көптеген ұйымдар өз командаларының анықтамасы мен мақсатын нақтылаудан пайда көрер еді. Шын мәнінде, біздің ойымызша, көптеген ұйымдар әр командасын төрт негізгі топологияның біріне сәйкестендіру арқылы тиімділікті айтарлықтай арттыра алады; яғни, әр команда үшін төрт негізгі топологияның қайсысы ең жақсы жұмыс тәсілі болатынын анықтап, содан кейін сол команданың өкілеттігін сол топологияның мақсаты мен мінез-құлық үлгілерін қабылдау үшін өзгерту керек.

Ұзақ мерзімділік пен икемділік үшін негізінен ағынға бағытталған командаларға көшу

Ағынға оңтайландырылған ұйымдағы командалардың көпшілігі ұзақ мерзімді, көпфункционалды, ағынға бағытталған командалар болуы керек. Бұл командалар функционалдықтың жекелеген бөліктеріне немесе пайдаланушы нәтижелеріне иелік етеді, бизнес өкілдерімен және басқа жеткізу командаларымен берік және тұрақты қарым-қатынас орнатады. Ағынға бағытталған командалар мүмкіндік беруші командалардың, платформалық командалардың және күрделі ішкі жүйе командаларының қолдауының арқасында өз мүмкіндіктеріне сәйкес келетін когнитивтік жүктемені күте алады.

Инфрақұрылымдық командалардан платформалық командаларға

Дәстүрлі түрде көптеген инфрақұрылымдық командалар тірі/өндірістік инфрақұрылымның барлық аспектілеріне, соның ішінде сол инфрақұрылымда орналасқан қосымшаларға енгізілетін кез келген өзгерістерге жауапты болды (5. 3-суретте көрсетілгендей):

Image segment 735
  1. 3-сурет: Дәстүрлі инфрақұрылымдық команда ұйымы

Көптеген дәстүрлі инфрақұрылымдық командалар (оң жақта) өндірістік инфрақұрылымдағы барлық өзгерістерге, соның ішінде қосымшалардағы өзгерістерге жауапты бола отырып, жұмыс ағынын бөгеді. Dev командаларының жұмысы (сол жақта) орналастыру үшін инфрақұрылымдық немесе Ops командаларына тапсырылатын, бұл ағынға кедергі келтіретін.

Инфрақұрылымдық команданы платформалық командаға айналдыру платформа ішінде де, ең бастысы, ағынға бағытталған командалар ішінде де өзгерістердің жылдам әрі қауіпсіз ағынына мүмкіндік береді.

Инфрақұрылымдық командадан платформалық командаға ауысу оңай емес, өйткені платформа инфрақұрылым мамандарына бейтаныс болуы мүмкін бағдарламалық жасақтаманы әзірлеудің тексерілген әдістерін қолдана отырып, өнім ретінде басқарылады. Бірақ осы тараудың басқа жерлеріндегі мысалдар көрсеткендей, бұл — өте тиімді тәсіл.

Компоненттік командалардан платформалық немесе басқа команда түрлеріне

Технологиялық компонентке негізделген қолданыстағы командалар не таратылып, жұмыс ағынға бағытталған командаларға берілуі керек, не басқа команда түріне айналуы керек: платформаның бір бөлігі ретінде (егер компонент төменгі деңгейдегі «платформалық» компонент болса), мүмкіндік беруші командаға (егер компонентпен ағынға бағытталған командалардың жұмыс істеуі оңай болса) немесе күрделі ішкі жүйе командасына (егер ішкі жүйе шынымен қажет болса және ағынға бағытталған командалар үшін тым күрделі болса). Кез келген жағдайда команда сәйкес командалық мінез-құлық пен өзара әрекеттесу режимдерін қабылдауы керек.

Бағдарламалық жасақтаманы жылдам әрі қауіпсіз жеткізетін сәтті ұйымдарда командалардың көпшілігі ағынға бағытталған болады, тек жеті команданың біреуі немесе он команданың біреуі ғана ағынға бағытталмаған. Яғни, ағынға бағытталған командалардың басқа командаларға қатынасы шамамен 6:1-ден 9:1-ге дейін болуы керек.

Мысалы, деректер базасының әкімшілері (DBA) командалары, егер олар бағдарламалық қосымша деңгейінде жұмыс істеуді тоқтатып, ағынға бағытталған командаларға деректер базасының өнімділігі, мониторингі және т. б. туралы білімді таратуға назар аударса, мүмкіндік беруші командаларға айнала алады. Кейбір ұйымдар DBA командасын платформаның бір бөлігіне айналдырып, деректер базасының өнімділігі, конфигурациясы, қолжетімділігі және т. б. бойынша мамандандырылған қызмет көрсете бастады, бірақ DBA командасы енді схема өзгерістеріне немесе қосымша деңгейіндегі деректер базасының мәселелеріне жауапты емес.

Сол сияқты, «ортаңғы деңгей» (middleware) командалары да, егер олар жүйенің сол бөліктерін ағынға бағытталған командалар үшін пайдалануды жеңілдетсе, платформалық командаларға айнала алады. Олар ортаңғы деңгейді ұйымның негізгі мақсаттарына сәйкес келетін, өздігінен қызмет көрсететін қарапайым қызметтерге айналдыру арқылы әзірлеушілердің когнитивтік жүктемесін азайтады.

Құрал-сайман командаларынан мүмкіндік беруші командаларға немесе платформаның бөлігіне

Егер команданың бастапқы өкілеттігі нақты немесе уақытпен шектелмеген болса, құрал-сайман командасы уақыт өте келе оқшауланған құралдарға техникалық қызмет көрсету командасына оңай айналып кетуі мүмкін. Құралдар тізбегіне эмоционалды түрде байланудан бөлек, команда мүшелерінің техникалық дағдылары ескіруі мүмкін және олардың күш-жігері нақты қажеттіліктерге емес, инерцияға негізделген шағын жақсартуларға босқа жұмсалуы мүмкін.

Құрал-сайман командалары әдетте не қысқа мерзімді және жоғары фокусталған өкілеттігі бар мүмкіндік беруші командалар ретінде, не платформаның бір бөлігі ретінде (нақты, жақсы негізделген даму жоспарымен) жақсырақ жұмыс істейді.

Қолдау көрсету командаларын түрлендіру

Дәстүрлі түрде көптеген ұйымдар тірі/өндірістік ортадағы қосымшалар мен қызметтерді қолдау үшін бір кросс-сервистік команданы қолданды. Өзгерістер жылдамдығы мен жүйенің күрделілігі төмен болған кезде, бұл модель ұйымдарға қолдау көрсету командасындағы адамдардың саны мен дағдылары бойынша шығындарды оңтайландыруға мүмкіндік берді.

Дегенмен, бағдарламалық жүйелердегі жылдам және тұрақты өзгерістерге байланысты сәтті ұйымдар қазір өзгерістер ағынына жылдам әрі қауіпсіз көмектесу үшін қолдау көрсету командаларының құрамы мен орналасуын қайта қарастыруда. IT қолдауының ең жақсы жұмыс істейтін моделі екі аспектіден тұрады: (1) өзгерістер ағынына сәйкес келетін қолдау көрсету командалары және (2) тірі қызмет оқиғаларын шешуге арналған динамикалық кросс-командалық әрекеттер.

Бұл модельде, егер арнайы қолдау көрсету командалары қажет болса, олар бағдарламалық жүйелерді құратын командамен немесе «сквадпен» (кішігірім автономды топ) бірге өзгерістер ағынына сәйкестендіріледі. Қолдау көрсетуге бағытталған команда сол бір өзгерістер ағынына жауап беретін командалар тобының немесе «трайбтың» (бірнеше команданың бірлестігі) құрамында болады. Мұндай жағдайда қолдау көрсетуші команда бүкіл сервисті пайдаланушының тәжірибесіне көбірек көңіл бөле бастайды; олар тіпті АТ және бағдарламалық қамтамасыз ету екінші кезектегі мәселе болған жағдайда да, ұшы-қиырсыз синтетикалық транзакциялық мониторингті (пайдаланушы әрекеттерін имитациялау арқылы жүйені автоматты тексеру) енгізеді. Кейбір ұйымдар пайдаланушының толық тәжірибесі тек АТ жүйелерімен ғана шектелмейтінін ескеріп, мұндай топтарды «сервис-тәжірибе командалары» деп қайта атайды. Бұл 5. 4-суретте көрсетілген (107-бетті қараңыз).

Image segment 752

5.4-сурет: Өзгерістер ағынына сәйкестендірілген қолдау көрсету командалары

Қолдау көрсету командаларының жаңа моделі: өзгерістер ағынына сәйкестендірілген, әдетте бір немесе бірнеше стримге бағытталған (жұмыс ағынына тікелей жауап беретін) әзірлеушілер командаларымен жұптастырылған. Инциденттер динамикалық сворминг (мәселені шешу үшін мамандардың шұғыл жиналуы) әдісімен шешіледі.

Жұмыс істеп тұрған өндірістік жүйелерде инцидент орын алғанда, қолдау көрсету командалары алдымен мәселені тек өз ағынының шеңберінде шешуге тырысады. Егер мәселе толығымен бір ағын ішінде болса, басқа командаларды тартудың қажеті жоқ. Қажет болса, диагноз қоюға көмектесу үшін басқа стримге бағытталған қолдау топтары шақырылады; ал егер инцидент көптеген командаларға әсер етсе, мәселені триаждау (басымдылығын анықтап сұрыптау) және сервисті тез арада қалпына келтіру үшін әртүрлі қолдау топтарынан динамикалық «сворм» немесе «инцидент сквады» құрылады. Сервисті басқару маманы Джон Холл түсіндіргендей, мұның қосымша пайдасы да бар: «Тәжірибесі аз бастапқы деңгейдегі мамандардың бұл свормдарға қатысуы оларға тек мамандандырылған командаларға ауысқанда ғана қол жеткізуге болатын білімді ерте игеруге мүмкіндік береді».

Қолдауға деген бұл екі түрлі көзқарас екі маңызды нәтиже береді: (1) Қолдау топтарын ағындарға сәйкестендіру арқылы біз әр ағынның жүйесін орындалу кезінде (runtime) тәуелсіз етіп жобалауға ынталандырамыз, бұл ағындардың барынша дербес болуына көмектеседі. Осылайша, біз өндірістік ортада барлық жүйеге бір ғана команда жауапты болғанда орын алатын Конвей заңының (жүйе құрылымы ұйымның коммуникация құрылымын қайталайды деген қағида) «монолиттену» әсерінен аулақ боламыз. (2) Сондай-ақ, бағдарламалық жүйелердегі жаңадан анықталған кемшіліктер мен шектеулер туралы біліммен жылдам бөлісеміз, бұл әр ағындағы қолдау топтарына жүйені құрушы командаларға кері байланысты жедел жеткізуге мүмкіндік береді.

Пайдаланушылармен телефон немесе бетпе-бет байланысу қажеттілігі бар ұйымдар әлі де колл-орталықты немесе сервис-дескіні сақтайды, бірақ концептуалды түрде сервис-деск жүйелердің бір жағында (өзгерістер ағынынан және тірі жүйелерден келетін ақпарат ағынынан тыс) орналасады. Бұл нақты уақытта жұмыс істеп тұрған жүйелер туралы ақпараттың стримге бағытталған командаларға кері ағуына жағдай жасайды.

Архитектураны және архитекторларды өзгерту

Архитектуралық команда үшін ең тиімді үлгі — толық емес жұмыс күніндегі көмекші команда (басқа командаларға жаңа технологияларды игеруге көмектесетін топ) ретінде жұмыс істеу (егер мұндай команда мүлдем қажет болса). Команданың «толық емес жұмыс күнінде» болуы маңызды: бұл көптеген шешімдерді архитектуралық командаға қалдырмай, оны іске асырушы командалардың өздері қабылдауы керек екенін көрсетеді. Кейбір ұйымдар басқа команда мүшелерінен «виртуалды команда» құрады. Бұл виртуалды команда жүйенің архитектуралық аспектілерін талқылау және дамыту үшін жүйелі түрде жиналып тұрады. Бұл Spotify компаниясы қолданатын «чаптер» немесе «гильдия» терминологиясына ұқсас (4-тарауды қараңыз).

Қазіргі заманғы тиімді бағдарламалық жасақтаманы әзірлеу үшін архитектуралық команда басқа командаларға дизайнды немесе технологиялық таңдауларды таңудың орнына, олардың барынша тиімді жұмыс істеуіне қолдау көрсетуі керек. Forsgren, Humble және Kim «Accelerate» кітабында айтқандай: «Архитекторлар өз пайдаланушыларымен — жүйелерді құратын және басқаратын инженерлермен — тығыз жұмыс істеуі керек, бұл оларға жақсы нәтижелерге қол жеткізуге көмектесіп, соған қажетті құралдар мен технологияларды ұсынуы тиіс».

Толық емес жұмыс күніндегі архитектураға бағытталған көмекші команданың маңызды рөлі — командалар арасындағы тиімді API-лерді (бағдарламалық интерфейстер) анықтау және Конвей заңын ескере отырып, командалар арасындағы өзара әрекеттесуді қалыптастыру. (Біз архитектураның бұл аспектісін 7-тарауда толығырақ қарастырамыз. )

Түйін: Төрт нақты команда түрінен тұратын бос байланысқан, модульдік топтарды қолданыңыз

Бағдарламалық жасақтаманы жылдам әрі тұрақты жеткізуде қиындық көріп жүрген көптеген ұйымдарда командалардың түрлері өте көп және олардың міндеттері көбіне нашар анықталған. Бұл мәселені болдырмау үшін командаларды тек төрт негізгі түрмен шектеңіз: стримге бағытталған (stream-aligned), көмекші (enabling), күрделі ішкі жүйе (complicated subsystem) және платформалық (platform). Бұл ұйымның назарын жеке және ұйымдық деңгейде жұмыс ағынын (flow) жақсартатын өзара әрекеттесу үлгілеріне аударады.

Бүгінгі таңда күрделі бағдарламалық жүйелерді әзірлейтін және басқаратын ұйымдар өз командаларын өндірістік жүйелердің қалай жұмыс істейтініне (немесе істен шығатынына) негізделген қауіпсіз және жылдам өзгерістер ағынына оңтайландыруы қажет. Бұл дегеніміз, командалардың көпшілігі бос байланысқан (loosely coupled), өзгерістер ағынына («стримге») сәйкестендірілген және өздері жауапты өнімге немесе қызметке құндылық қоса алатын қабілетті болуы тиіс.

Стримге бағытталған командаларға бұл жоғары жылдамдыққа қол жеткізуге көмектесетіндер: көмекші командалар (кедергілерді анықтайды және жаңа тәсілдерді енгізуді жеңілдетеді), күрделі ішкі жүйе командалары (қажет болған жағдайда жүйенің нақты бөліктеріне терең мамандандырылған сараптама әкеледі) және платформалық командалар (стримге бағытталған командалар өнімдерді минималды кедергімен құрып, қолдай алатын негізгі «субстратты» қамтамасыз етеді).

Команда түрлері мен міндеттерін осылайша стандарттау командалардың көпшілігінің стримге бағытталғанын және оларға көмекші, күрделі ішкі жүйе және платформалық командалар тарапынан қолдау көрсетілетінін қамтамасыз ету арқылы жұмыс ағынын арттыруға көмектеседі.

Өз кезегінде, платформаның өзі өнім немесе сервис ретінде басқарылады. Жұмысты басымдыққа қою үшін бағдарламалық өнімді басқарудың жақсы қалыптасқан әдістері қолданылады, платформа тұтынушыларымен (негізінен стримге бағытталған командалармен) тұрақты байланыс орнатылады және UX (пайдаланушы тәжірибесі) мен DevEx (әзірлеуші тәжірибесі) мәселелеріне баса назар аударылады. Платформаның өзі де платформаны тұтынатын командалар қолданатын команда түрлері мен өзара әрекеттесу әдістерін пайдалана отырып, ішкі стримге бағытталған, көмекші, күрделі ішкі жүйе және тіпті төменгі деңгейдегі платформалық командалардан құралуы мүмкін.

Стримге бағытталған командалардың жылдам жұмыс істеуіне мүмкіндік беруге назар аудару ұйымның барлық деңгейінде шешім қабылдауға көмектеседі және барлық командалар үшін ортақ миссияны қамтамасыз етеді.

6. Командаға басымдық беретін шекараларды таңдаңыз

Код жұмыс істемесе... мәселе командалардың қалай ұйымдастырылғанынан және адамдардың өзара қалай әрекеттесетінінен басталады. — Эрик Эванс, «Доменге негізделген дизайн»

Әрбір команда басқа көптеген командалармен өзара әрекеттесудің күрделі торына тәуелді болғанда, жұмыс ағынына қол жеткізу қиын. Бағдарламалық жүйелердегі өзгерістер ағыны жылдам болуы үшін біз жұмысты бір-біріне беру (hand-offs) процестерін алып тастап, командалардың көпшілігін ұйымдағы негізгі өзгерістер ағындарына сәйкестендіруіміз керек. Алайда, көптеген ұйымдар командаларға жүктелген жауапкершілік шекараларына қатысты үлкен мәселелерге тап болады. Әдетте, шекаралардың команда үшін қолайлылығына аз көңіл бөлінеді, бұл иелік ету сезімінің жоқтығына, жұмысқа ынтаның төмендеуіне және жеткізу жылдамдығының тым баяулауына әкеп соғады.

Бұл тарауда біз командаларға өз жүйесін тиімді және тұрақты түрде басқаруға мүмкіндік беретін қолайлы шекараларды анықтау жолдарын қарастырамыз. Бұл әдістер монолитті бағдарламалық жасақтамаға да, еркін байланысқан жүйелерге де бірдей тиімді. Ең бастысы, бұл шекаралар «команда өлшемінде» болады: біз бағдарламалық қамтамасыз ету мен жүйе шекараларын бір команданың мүмкіндіктеріне сәйкестендіреміз, бұл жауапкершілікті өз мойнына алуды және бағдарламаны тұрақты дамытуды әлдеқайда жеңілдетеді.

Командалар арасындағы жауапкершілік шекараларын мұқият зерттеп, доменге негізделген дизайн (DDD) және сызат жазықтықтары (жүйенің табиғи бөліну нүктелері) сияқты әдістерді қолдана отырып, біз бағдарламалық архитектураны проблемалық салаға (доменге) сәйкестендіреміз. Бұл өзгерістер ағынын арттырып, ұйымның әлеуметтік-техникалық жүйені тезірек және тиімдірек дамытуына мүмкіндік береді.

Бағдарламалық міндеттер мен шекараларға командалық тұрғыдан келу

Бағдарламалық жасақтаманы жеткізудегі көптеген мәселелер командалар арасындағы шекаралар мен олардың міндеттерінің анық болмауынан туындайды. Конвей заңы айтқандай, бұл көбінесе әртүрлі бөліктер арасындағы жоғары байланысы бар (тіпті қағаз жүзінде архитектура модульдік болып көрінсе де) бағдарламалық архитектураның көлеңкесінде қалады. Мұндай жүйе әдетте «монолит» деп аталады.

«Accelerate» кітабында жарияланған зерттеулер тығыз байланысқан архитектуралардың нақты жауапкершілігі бар автономды командалардың жұмысына теріс әсер ететінін дәлелдейді. Авторлар мұндай архитектураларды бөлуге көмектесетін тәсілдерді де атайды: «Командаларға дизайннан бастап енгізуге дейінгі толық иелік етуді қолдайтын архитектуралық тәсілдерге үлкен домендерді кішірек, еркін байланысқан бөліктерге бөлу жолы ретінде шектелген контекстер мен API-лерді қолдану жатады».

Бірақ біз монолитті жүйеден еркін байланысқан сервистерге ауысқымыз келгенде, жаңа архитектураның командаларға қалай әсер ететінін де ескеруіміз керек. Біз олардың когнитивтік сыйымдылығын (ақпаратты өңдеу қабілеті), орналасқан жерін және жаңа сервистерге деген қызығушылығын есепке алуымыз қажет.

Командалық аспектіні ескермей, біз монолитті қате жерлерден бөліп алу немесе тіпті бір-біріне тәуелді сервистердің күрделі жүйесін жасап алу қаупін тудырамыз. Бұл «таратылған монолит» (distributed monolith) деп аталады және командалардың өз сервистері бойынша автономиясын жоғалтуына әкеледі, өйткені кез келген өзгеріс басқа сервистерді де жаңартуды талап етеді. Amazon-ның сервис командалары сияқты мысалдар (4-тарау) сервистің қажетті тәуелсіздігіне қол жеткізу үшін командалық өзара әрекеттесуді ойластыру және бағыттау қажеттігін көрсетеді.

Жасырын монолиттер және байланыстар

Монолитті бағдарламалық жасақтаманың көптеген түрлері бар, олардың кейбіреуін бірден анықтау қиын. Мысалы, көптеген ұйымдар қолданбалы монолитті кішірек сервистерге бөлуге көп уақыт пен күш жұмсайды, бірақ соңында жеткізу құбырында (deployment pipeline) монолитті релиз жасап, жылдамырақ және қауіпсіз қозғалу мүмкіндігін жоғалтады. Өзгерістер жасамас бұрын біз қандай монолиттермен жұмыс істеп жатқанымызды толық түсінуіміз керек.

Қолданбалы монолит (Application Monolith): Көптеген тәуелділіктері мен міндеттері бар, бірнеше сервистерді немесе пайдаланушы жолдарын қамтитын біртұтас үлкен қолданба. Мұндай қолданбалар әдетте бір бүтін ретінде орналастырылады, бұл пайдаланушыларға (орналастыру кезінде қолданба қолжетімсіз болады) және операторларға (өндірістік орта үнемі өзгеріп отыратындықтан, күтпеген мәселелер туындайды) қиындық туғызады. Деректер қоры арқылы біріккен монолит (Joined-at-the-Database Monolith): Бірдей деректер қорының схемасына байланған бірнеше қолданбалардан немесе сервистерден тұрады, бұл оларды бөлек өзгертуді, тексеруді және орналастыруды қиындатады. Бұл ұйым негізгі бизнес-қозғалтқыш ретінде сервистерді емес, деректер қорын көргенде туындайды. Монолитті жинақтар (Бәрін қайта жинау): Компоненттің жаңа нұсқасын алу үшін бір алып үздіксіз интеграция (CI) жинағын қолдану. Қолданбалы монолиттер монолитті жинақтарға әкеледі, бірақ тіпті кішігірім сервистерде де стандартты тәуелділіктерді басқару механизмдерін қолданудың орнына, бүкіл кодты бірден жинауға тырысатын сценарийлер кездеседі. Монолитті (байланысқан) релиздер: «Релизге» біріктірілген кішігірім компоненттер жиынтығы. Компоненттер CI-де дербес жиналғанымен, оларды тек ортақ статикалық ортада тексеру мүмкін болғанда, адамдар тексерген нәрсесінің өндірісте жұмыс істейтініне сенімді болу үшін барлық нұсқаларды бірге орналастырады. Монолитті модель (Әлемге бір ғана көзқарас): Көптеген әртүрлі контекстерде бір ғана домендік тіл мен форматты қолдануға тырысатын бағдарламалық жасақтама. Бұл шағын ұйымдарда тиімді болуы мүмкін, бірақ ұйым өскен сайын бұл тәсіл архитектура мен іске асыруға шектеулер қоя бастайды. Монолитті ойлау (Стандарттау): Командалар үшін «барлығына бірдей» тәсілін қолдану, бұл технология мен әдістерге қажетсіз шектеулер қояды. Бәрін стандарттау басқаруды жеңілдеткенімен, инженерлердің ең жақсы құралдарды таңдау мүмкіндігін шектейді және олардың мотивациясын төмендетеді. Монолитті жұмыс орны (Open-plan кеңсе): Бір географиялық жердегі барлық командалар мен жеке тұлғалар үшін бірдей кеңсе үлгісі — әдетте жеке кабиналар немесе арасында ешқандай кедергісі жоқ ашық жоспарлы кеңселер. Зерттеулер көрсеткендей, open-plan кеңселер бетпе-бет байланысты 70%-ға азайтып, электрондық байланысты арттыруы мүмкін.

Бағдарламалық шекаралар немесе «сызат жазықтықтары»

Монолиттің әр түрінің өз кемшіліктері бар, бірақ бағдарламалық жасақтаманы бөлу кезінде де сақ болу керек қауіптер бар. Бөлу бағдарлама бөліктері арасындағы сәйкестікті азайтып, деректердің кездейсоқ қайталануына әкелуі мүмкін. Егер біз біртұтас UX-ке қол жеткізбесек, пайдаланушы тәжірибесі нашарлауы мүмкін.

Біріншіден, сызат жазықтығы (fracture plane) дегеннің не екенін түсінуіміз керек. Сызат жазықтығы — бұл бағдарламалық жүйені екі немесе одан да көп бөлікке оңай бөлуге мүмкіндік беретін табиғи жік. «Монолит» сөзі грек тілінен аударғанда «біртұтас тас» дегенді білдіреді. Дәстүрлі тас қалаушылар тастарды табиғи сызаттары бойынша таза бөліктерге бөлу үшін оларды белгілі бір бұрыштармен ұрады. Біз де бағдарламалық жасақтамадағы шекараларды табу үшін ұқсас сызат жазықтықтарын іздей аламыз.

Әдетте, бағдарламалық шекараларды әртүрлі бизнес-домен салаларына сәйкестендіру ең дұрыс жол болып табылады. Егер монолит бірнеше бизнес саласына қызмет етсе, бұл жұмыс ағынына және пайдаланушы тәжірибесіне теріс әсер етеді. Алайда, тек бизнес-домендер ғана емес, басқа да мүмкін болатын сызат жазықтықтары бар.

Сызат жазықтығы: Бизнес-доменнің шектелген контексті Сызат жазықтықтарының көпшілігі бизнес-доменнің шектелген контекстеріне (bounded context — модель қолданылатын және мағыналық тұтастығы сақталатын шекара) сәйкес келуі керек. Шектелген контекст — бұл үлкен домендік модельді ішкі үйлесімділігі бар кішірек бөліктерге бөлуге арналған бірлік.

Мартин Фаулер шектелген контекстің домендік аймақтың ішкі үйлесімді моделі болуы керек екенін түсіндіреді:

DDD [доменге негізделген дизайн] — бұл негізгі доменнің модельдеріне негізделген бағдарламалық жасақтаманы жобалау. Модель әзірлеушілер мен домен мамандары арасындағы байланысқа көмектесетін ортақ тіл (ubiquitous language) ретінде қызмет етеді. Тиімді болу үшін модель біртұтас болуы керек, яғни оның ішінде ешқандай қайшылықтар болмауы тиіс.

Шектелген контекстерді анықтау бизнес білімін және техникалық тәжірибені талап етеді, сондықтан бастапқыда қателіктер жіберу қалыпты жағдай. Бірақ бұл сізді жақсартудан және бейімделуден тежемеуі керек.

DDD-ні қолданудың басқа артықшылықтарына негізгі күрделілікке назар аудару, бизнес сарапшыларымен ынтымақтастық арқылы модельдерді зерттеу және бизнес иелері мен техниктердің бір тілде сөйлесуі жатады.

Қорытындылай келе, бизнес-доменнің сызат жазықтығы технологияны бизнеспен сәйкестендіреді, терминологиядағы алшақтықтарды азайтады және өзгерістер ағынын жақсартады.

Сызат жазықтығы: Нормативтік сәйкестік (Regulatory Compliance) Қаржы немесе денсаулық сақтау сияқты қатаң реттелетін салаларда нормативтік талаптар бағдарламалық жасақтама үшін нақты шекараларды қамтамасыз ете алады. Олар көбінесе ұйымдардан аудит жүргізу, құжаттау, тексеру және орналастыру үшін арнайы механизмдерді қабылдауды талап етеді.

Бір жағынан, әртүрлі жүйелердегі бұл процестердің өзара айырмашылығын азайту — жақсы идея. Мысалы, жүйенің түріне немесе енгізіліп жатқан өзгерістерге байланысты релиз/жеткізу процестерінің әртүрлі болуынан қашқан жөн. Бірақ мұндай процестердің (соның ішінде қолмен мақұлдау немесе басқа да әрекеттердің) жеткізу құбырында (<span data-term="true">delivery pipeline</span> — бағдарламалық жасақтаманы автоматты түрде жинау және тексеру жолы) әрқашан бейнеленуін қамтамасыз ету және оған тиісті қолжетімділікті бақылау барлық жүйелердегі өзгерістердің қадағалануын (traceability) қамтамасыз етеді және көптеген аудит талаптарын орындайды.

Екінші жағынан, қатаң талаптарды жүйенің маңызды емес бөліктеріне таңудың қажеті жоқ. Монолит ішіндегі нормативтік реттеуге жататын ішкі жүйелерді немесе ағындарды бөліп алу — табиғи <span data-term="true">fracture plane</span> (жүйені логикалық түрде бөлшектеуге болатын сызат жазықтығы) болып табылады.

Мысалы, Төлем карталары индустриясының деректер қауіпсіздігі стандарты (PCI DSS — төлем карталарының деректерін қорғауға қойылатын талаптар жиынтығы) несие карталарының деректерін сұрау және сақтау бойынша ережелерді белгілейді. PCI DSS талаптарына сәйкестік тек карта деректерін басқаруға арналған ішкі жүйеге жүктелуі керек, бірақ бұл талаптар төлем функциясы бар бүкіл монолитке қолданылмауы тиіс. Нормативтік сәйкестік бойынша бөлу аудит пен сәйкестікті тексеруді жеңілдетеді, сонымен қатар реттеуші органдардың тексеру аймағын азайтады.

Сонымен қатар, бұл жерде команданың құрамы мен өзара әрекеттесу аспектісі де маңызды, әсіресе ірі ұйымдарда. Монолитке жауапты бір үлкен команда болғанда, сәйкестік немесе заң бөлімінің мамандары жоспарлау мен басымдықтарды белгілеуге тек ара-тұра қатысады, өйткені жұмыс көлемі олардың командада тұрақты болуын қажет етпейді. Ал ішкі жүйе бөлініп шыққанда, сәйкестікке бағытталған шағын команда құру қисынды болады, оған сәйкестік немесе заң саласындағы бизнес иелері де кіре алады.

Сызат жазықтығы: Өзгерістер қарқыны

Тағы бір табиғи сызат жазықтығы — жүйенің әртүрлі бөліктерінің әртүрлі жиілікпен өзгеру қажеттілігі. Монолит жағдайында әрбір бөлшек ең баяу бөліктің жылдамдығымен қозғалады.

Егер жаңа есеп беру функциялары тек тоқсан сайын қажет болса және шығарылса, онда басқа функцияларды жиірек шығару қиынға соғады немесе мүмкін болмайды, өйткені код базасы үнемі өзгеріс үстінде болып, өндіріске дайын болмайды. Өзгерістер бір жерге жиналып, жеткізу жылдамдығына айтарлықтай әсер етеді.

Жүйенің әртүрлі жылдамдықпен өзгеретін бөліктерін бөліп алу олардың тезірек өзгеруіне мүмкіндік береді. Енді монолиттің бекітілген жылдамдығы емес, бизнес қажеттіліктері өзгеріс қарқынын айқындайды.

Сызат жазықтығы: Команданың орналасуы

Географиялық тұрғыдан және әртүрлі уақыт белдеулерінде орналасқан командалар бір жерде шоғырланбаған болып саналады. Тіпті бір ғимараттың әртүрлі қабаттарында немесе әртүрлі бөлмелерінде жұмыс істейтін мүшелері бар командаларды да географиялық бөлек деп қарастыруға болады.

Бөлінген командаларда байланыс шектеулі, өйткені олар сөйлесу үшін арнайы физикалық немесе виртуалды кеңістік пен уақытты талап етуі керек. Команда ішіндегі қалған (жоспарланбаған) байланыс (ол 80%-ға дейін жетуі мүмкін) команданың әрбір бөлігі орналасқан физикалық шекаралар ішінде ғана орын алады.

Әртүрлі уақыт белдеулерінде жұмыс істеу бұл байланыстың кешігуін ушықтырады. Әсіресе, жұмыс уақыты аз түйісетін әртүрлі белдеулердегі адамдардың қолмен мақұлдауы немесе кодты тексеруі (code review) қажет болғанда кедергілер пайда болады. Хайди Хелфанд өзінің «Dynamic Reteaming» кітабында бұл мәселені былай түсіндіреді:

Егер сізде қашықтан жұмыс істейтін қызметкерлер болса, команда ішіндегі және командалар арасындағы ынтымақтастықты дамыту үшін қосымша күш жұмсауыңыз керек. Әртүрлі уақыт белдеулеріне қарағанда, бір уақыт белдеуінде болуға тырысыңыз; әйтпесе адамдар бір-бірімен кездескісі келмейді, өйткені бұл олардың үйдегі жеке уақытын алады.

Команданың тиімді байланысуы үшін біз екі нұсқаны ұсынамыз: толық колокация (барлық мүшелер бір физикалық кеңістікте) немесе шынайы remote-first тәсілі (байланысты тек барлық мүшелер қол жеткізе алатын арнайы арналармен шектеу). Егер бұл екі нұсқа да мүмкін болмаса, монолитті әртүрлі орындардағы командалар үшін бөлек ішкі жүйелерге бөлген дұрыс. Осылайша, ұйым Конвей заңын қолданып, жүйе архитектурасын өмірдегі байланыс шектеулеріне сәйкестендіре алады.

Сызат жазықтығы: Тәуекел (Risk)

Үлкен монолиттің ішінде әртүрлі тәуекел деңгейлері болуы мүмкін. Тәуекелге бел буу — өзгерістерді тұтынушыларға тезірек жеткізу үшін жүйенің немесе нәтиженің сәтсіз болу ықтималдығын қабылдауды білдіреді.

Бос байланысқан жүйе архитектурасы (монолит емес) және <span data-term="true">continuous delivery</span> (өзгерістерді үздіксіз жеткізу) мүмкіндіктері кішігірім өзгерістерді жиі енгізу тәуекелін іс жүзінде азайтады.

Тәуекелдердің бірнеше түрі бар (әдетте бизнестің өзгерістерге дайындығымен байланысты). Мысалы, жаңа тұтынушыларды тартуға бағытталған маркетингтік өзгерістердің тәуекелі жоғары болса, табыс әкелетін транзакциялық функциялардың тәуекелі төмен болады.

Пайдаланушылар саны да тәуекелге әсер етуі мүмкін. Мысалы, көп деңгейлі SaaS (бағдарламалық жасақтаманы қызмет ретінде ұсыну моделі) өнімінің тегін нұсқасында миллиондаған, ал ақылы нұсқасында жүздеген ғана қолданушы болуы мүмкін. Тегін нұсқадағы танымал функциялардың өзгерісі жоғары тәуекелге ие, өйткені кез келген үлкен қателік миллиондаған әлеуетті ақылы тұтынушыдан айырылуды білдіреді. Ал ақылы функциялардағы қателіктер жеке қолдау көрсету арқылы шешілсе, тәуекел азырақ болуы мүмкін.

Сызат жазықтығы: Өнімділікті оқшаулау

Кейбір жүйелерде өнімділіктің әртүрлі деңгейлерін ажырату тиімді. Әрине, өнімділік кез келген жүйе үшін маңызды, бірақ кейбір бөліктерге ерекше талаптар қойылады.

Сұраныс күрт артатын бөліктер (мысалы, салық декларациясын тапсырудың соңғы күні) жүйенің қалған бөлігіне қажет емес масштабтау мен ақауларға төзімділікті талап етеді.

Мұндай ішкі жүйені өнімділік талаптарына қарай бөліп алу оның дербес масштабталуына мүмкіндік береді, бұл өнімділікті арттырып, шығынды азайтады. Мысалы, салық декларациясын қабылдау және тексеру бөлігін бөлек шығарып, оның миллиондаған сұранысты қысқа уақытта өңдеуін қамтамасыз етуге болады. Ал салықты есептеу немесе төлеу бөліктері төменірек өнімділікпен де жұмыс істей береді.

Сызат жазықтығы: Технология

Технология (тарихи тұрғыдан) командаларды бөлудің ең көп таралған шекарасы болып келді. Мысалы: фронтенд, бакенд, деректер базасы командалары.

Алайда, мұндай технологиялық бөліністер жұмыс ағынын жақсартудың орнына, көбінесе шектеулер енгізеді. Бөлек командалардың дербестігі азаяды, өйткені өнімге тәуелділік сақталады, ал командалар арасындағы байланыс команда ішіндегі байланысқа қарағанда баяу болады.

Технология бойынша бөлудің тиімді болатын кезі — ескі немесе автоматтандыруы қиын технологияларды біріктірген жағдай. Ескі технологияларда жұмыс баяу жүреді, өйткені қолмен тексеру көп немесе құжаттама нашар. Сонымен қатар, ескі технологиялардың құрал-саймандары (IDE, тестілеу құралдары) заманауи экожүйеден өзгеше болады, бұл команда мүшелерінің cognitive load-ын (ақпаратты өңдеуге қажетті ақыл-ой жүктемесі) арттырады.

Технология бойынша бөлуді шешпес бұрын, ескі технологиядағы жұмыс жылдамдығын арттырудың балама жолдарын қарастырыңыз. Мирко Херинг өзінің «DevOps for the Modern Enterprise» кітабында меншікті COTS өнімдерімен жұмыс істегенде жақсы кодтау және нұсқаларды басқару тәжірибелерін қалай қолдану керектігін түсіндіреді.

Сызат жазықтығы: Пайдаланушы тұлғалары (User Personas)

Жүйе өскен сайын оның тұтынушылар базасы да әртүрлі болады. Пайдаланушылардың бір тобы бір функцияларды қолданса, басқа тобына басқа мүмкіндіктер керек.

Ақылы деңгейлері бар өнімдерде бұл бөлініс дизайн бойынша қарастырылған. Сонымен қатар, администраторларда қарапайым пайдаланушыларға қарағанда көбірек бақылау құралдары болады. Тәжірибелі пайдаланушылар ыстық пернелерді жиі қолданса, жаңадан бастағандарға ол қажет емес болуы мүмкін. Мұндай жағдайларда пайдаланушы тұлғаларына қарай ішкі жүйелерді бөлу қисынды.

Тәуелділіктерді жоюға жұмсалған күш тұтынушылардың қажеттіліктеріне тереңірек үңілумен өтеледі, бұл тұтынушылардың қанағаттануын арттырып, ұйымның табысын жақсартады. Бұл сонымен қатар тұтынушыларды қолдау сапасын арттырады — мәселенің қай жүйеде екенін анықтау оңайырақ болады.

Сіздің ұйымыңыз немесе технологияларыңыз үшін табиғи «Сызат жазықтықтары»

Сызат жазықтығының қолданылуын тексеру үшін мына сұраққа жауап беріңіз: Нәтижесінде пайда болған архитектура когнитивті жүктемесі азайған дербес командалардың жұмысын қолдай ма?

Жүйе мен команда шекараларын бағалауға көмектесетін қарапайым әдіс: «Біз команда ретінде бұл ішкі жүйені сервис ретінде ұсына аламыз ба немесе тұтына аламыз ба? » деген сұрақ қою. Егер жауап «иә» болса, онда бұл ішкі жүйені бөліп алуға болады.

Poppulo-да жақсы бағдарламалық шекараларды табу

Стефани Шихан, Poppulo-ның операциялық жөніндегі вице-президенті Дэмиен Дэли, Poppulo-ның инженерлік директоры

Poppulo ұйымдарға бір жерден бірнеше цифрлық арналар арқылы байланыс орнатуға, жоспарлауға және оның әсерін өлшеуге мүмкіндік береді. 2012 жылдан бастап төрт жыл ішінде біз үш есе өстік, АҚШ-та кеңселер аштық және Nestlé, LinkedIn, Honda сияқты ірі брендтерді қамтитын тұтынушылар базасын қалыптастырдық. 2019 жылға қарай Poppulo платформасын жүзден астам елде 15 миллионнан астам қызметкер пайдаланады. Осы деңгейге жету үшін біз үш жыл ішінде бір әзірлеу тобынан сегіз өнім командасына, бір SRE тобына және инфрақұрылым тобына дейін өстік.

2015 жылы біз тұтынушылар базасының және инженерлер санының айтарлықтай өсуін күттік, сондықтан монолитті жаңа командалардың тәуелсіз және дербес болуына көмектесетіндей етіп бөлуді қаладық. Біз DevOps және continuous delivery тәжірибелерін таңдауымыздың орталығына қойып, монолитті жүйеден микросервистік архитектураға ауыса бастадық.

Біз жұмысты орындау құралы ретінде «командаға» көбірек көңіл бөлдік. Бұрын кейбір жеке адамдарда жұмыс жиналып қалатын (кедергілер туындайтын), бірақ жұптасып жұмыс істеу (pairing) сияқты әдістерді қолдану арқылы жұмыс ағыны жақсарғанын байқадық. Кейін кодтың өндірісте қалай жұмыс істейтінін көру үшін телеметрия мен логтарды қостық.

Біз домендерді (бизнес салаларын) нақты бөлу арқылы командаларға дербестік беру маңызды екенін білдік. Сондықтан әр доменнің қаншалықты тәуелсіз екенін бағалап, ақ тақталарда сценарийлерді талдап, бағдарламаны осы домендік шекаралар бойынша бөлдік. Біз Конвей заңының теріс әсеріне ұшырамау үшін домендердің тиімді бөлінуін қамтамасыз етуге тырыстық.

Біз өзімізді «матрицалық өнім командалары» ретінде ұйымдастырдық. Бұл өнімнің белгілі бір саласына толық жауап беретін кросс-функционалды командалар. Команда мүшелері тұтынушылармен тікелей сөйлеседі, шешімдерді жобалайды, құрастырады және олардың сапасына жауап береді.

Біздің жеткізу командаларымыздың көбі электрондық пошта, күнтізбе, адамдар, сауалнамалар сияқты бизнес-домендерге сәйкес бөлінген. Сондай-ақ нормативтік шекараларға (ақпараттық қауіпсіздік бойынша ISO 27001) жауап беретін бөліктер де бар.

Бизнес домендерін түсінуге және монолитті бағдарламаны соған сәйкес бөлуге уақыт бөлу бізге инженерлік бөлімімізді 2015 жылдан бері 16 адамнан 70 адамға дейін өсіруге көмектесті. «Үйлестірілген дербестік» (aligned autonomy) арқылы біз командалардың өз сервистеріне иелік етуі жақсарғанын көрдік, бұл өз кезегінде өзгерістерді жылдам енгізуге мүмкіндік берді.

Нақты мысал: Өндіріс

Технологияны сызат жазықтығы ретінде қарастырғанда, біз мұны тек заманауи стектерден айтарлықтай ерекшеленетін ескі технологиялар үшін қолдану керектігін айттық. Бірақ әрқашан ерекшеліктер болады.

Бір ірі өндірістік клиентіміздің сценарийін қарастырайық. Бұл компания тұтынушылар үшін физикалық құрылғылар шығарады. Барлық құрылғылар IoT (Заттар интернеті — желіге қосылған құрылғылар) мүмкіндіктерімен, соның ішінде мобильді қолданба арқылы қашықтан басқару және бұлт арқылы бағдарламаны жаңарту функцияларымен жабдықталған.

Бір команда үшін бүкіл процесті — мобильді қолданбаны, бұлттық өңдеуді және құрылғыға орнатылған бағдарламаны (embedded software) қатар алып жүру өте қиын болар еді. Бұл үш түрлі технологиялық стекте жұмыс істеу үшін қажетті дағдыларды табу қиын, ал когнитивті жүктеме мен контекстті ауыстыру (context switching) төзгісіз болар еді.

Оның орнына технологиялық шекаралар бойынша командаларды ұйымдастыруға болады (орнатылған бағдарлама тобы, бұлттық топ және мобильді қолданба тобы). Бұл технологиялар арасындағы айырмашылық (дағдылар мен жеткізу жылдамдығы тұрғысынан) әрқайсысы үшін бөлек команда болуының негізгі себебі болып табылады.

Бұл жағдайда екі негізгі нұсқа бар (124-беттегі 6. 1-суретті қараңыз): (1) Бұлттық бағдарламаны платформа ретінде, ал мобильді және IoT бағдарламаларын платформаның тұтынушылары ретінде қарастыру. (2) IoT құрылғыларын платформа ретінде қарастырып, бұлт пен мобильді қолданбаларды соның тұтынушылары ету.

Image segment 843

6. 1-сурет: Мобильді, бұлттық және IoT технологияларының сызат жазықтығы сценарийі

Бұл тәсіл екі немесе одан да көп технологиялық саланы қамтитын функциялар үшін командалар арасында тұрақты үйлестіруді талап етеді. Бірақ бұл үйлестіру сонымен қатар командалар арасында ортақ жұмыс әдістерін (мысалы, семантикалық нұсқалау, лог жүргізу тәсілдері) қалыптастыруға қызмет етуі керек.

Уақыт өте келе, бұл ортақ тәжірибелер мен білім технологиялар арасындағы өзгеріс қарқыны теңелген сайын команда шекараларын болашақта қайта құруға мүмкіндік беруі мүмкін.

Түйін: Команданың когнитивті жүктемесіне сәйкес бағдарламалық шекараларды таңдаңыз

Ешқандай сөзді блоктама Html tag керек емес

Жұмыс ағынын оңтайландыру кезінде ағынға бағытталған командалар (stream-aligned teams — бизнес құндылығының үздіксіз ағынын жеткізуге жауапты негізгі команда типі) бір ғана доменге жауапты болуы керек. Егер домендер көптеген әртүрлі жауапкершіліктерді қамтитын және негізінен технологиялық таңдауларға негізделген, бизнестің бірнеше салалары бойынша функцияларды қамтамасыз ететін монолитті жүйелерде (monolith — барлық функциялары бір біртұтас жүйеге біріктірілген архитектура) жасырылған болса, бұл үлкен қиындық тудырады.

Біз жүйені бөлшектеудің табиғи жолдарын — жарықшақ жазықтықтарын (fracture planes — жүйені дербес бөліктерге бөлуге болатын табиғи шекаралар) іздеуіміз керек, бұл нәтижесінде алынған бөліктердің мүмкіндігінше тәуелсіз дамуына жол ашуы тиіс. Осыған сәйкес, сол бөліктерге бекітілген командалар оларға көбірек автономия мен иелік ету құқығын сезінеді.

Ішкі жүйе шекараларын бизнестің (негізінен тәуелсіз) сегменттерімен сәйкестендіруге тырысу — тамаша тәсіл және доменге негізделген жобалау (domain-driven design — күрделі бағдарламалық қамтамасыз етуді бизнес саласының құрылымына сәйкес құрастыру әдісі) әдістемесі бұл тәсілді жақсы қолдайды. Бірақ біз өзгерістер қарқыны, тәуекел, нормативтік сәйкестік және т. б. сияқты басқа да жарықшақ жазықтықтарын байқап, ескеруіміз қажет. Көбінесе жарықшақ жазықтықтарының комбинациясы талап етіледі.

Сонымен қатар, біз жұмыс ағынына кедергі келтіретін және командалар арасында қажетсіз тәуелділіктерді тудыратын монолиттердің әртүрлі түрлерін білуіміз керек. Біз әдетте жүйелік архитектураны монолит деп ойлағанымызбен, жүйелік архитектура модульдік болған күннің өзінде де байланыстың (coupling) еніп кетуінің басқа да жасырын жолдары бар (мысалы, ортақ дерекқорлар, байланысқан жинақтар және/немесе релиздер және т. б. ). Эми Филлипс айтқандай: «Егер сізде микросервистер болса, бірақ релиз алдында олардың комбинациясын бастан-аяқ тестілеуді (end-to-end testing) күтсеңіз, онда сіздегі нәрсе — бөлінген монолит». 10

Ішкі жүйе шекараларын қарастырған кезде, негізгі мақсат — бизнес-доменнің шектелген контекстеріне (bounded context — нақты терминдер мен ережелер қолданылатын логикалық шекара) сәйкес келетін бағдарламалық жарықшақ жазықтықтарын табу болуы керек, өйткені бұл шектелген контекстердің көпшілігі ұйым үшін табиғи болып табылатын өзгерістер ағындарымен сәйкес келеді. Бұл, өз кезегінде, бизнес-домен шекараларын ағынға бағытталған командалармен сәйкестендіруге болатындығын білдіреді, бұл бүкіл ұйым бойынша жұмыс ағынына назар аударуға көмектеседі.

Жарықшақ жазықтықтары командалар арасында жұмысты бір-біріне тапсырудан (hand-offs) аулақ болу және ағынды ілгерілету үшін нақты мәселелердің (мысалы, технология, реттеу, өнімділік, қызметкерлердің географиялық орналасуы, пайдаланушы персонаждары) айналасында таңдалуы мүмкін.

Барлық жағдайда бағдарламалық жасақтама сегменттерін команда өлшеміне сәйкес жасау өте маңызды, сонда командалар өздерінің бағдарламалық жасақтамасына тиімді иелік ете алады және оны тұрақты түрде дамыта алады.

III БӨЛІМ Инновациялар мен жылдам жеткізу үшін командалық өзара әрекеттесуді дамыту

НЕГІЗГІ ТҰЖЫРЫМДАР

7-ТАРАУ Бағдарламалық жасақтаманы жеткізуді жақсарту үшін арнайы командалық өзара әрекеттесу режимдерін таңдаңыз.

Командаларға басқа командаларға қызметтер ұсынуға және оларды дамытуға көмектесу үшін өзара әрекеттесудің үш режимінің бірін таңдаңыз: коллаборация, X-қызмет ретінде және фасилитация.

Коллаборация инновацияның қуатты қозғаушы күші болуы мүмкін, бірақ ол жұмыс ағынын баяулатуы да мүмкін.

X-қызмет ретінде режимі басқа командаларға жылдам жеткізуге көмектесе алады, бірақ тек шекарасы сәйкес келген жағдайда ғана.

Фасилитация командалар арасындағы қиындықтардан аулақ болуға көмектеседі және мәселелерді анықтайды.

8-ТАРАУ Стратегиялық артықшылық үшін бір уақытта әртүрлі командалық топологияларды пайдаланыңыз.

Жаңа тәсілдерді енгізуді жеделдету үшін командалық топологиялар мен командалық өзара әрекеттесулерді өзгертіңіз.

Командалық топологияларды пайдалана отырып, зерттеу (explore), пайдалану (exploit), қолдау (sustain) және жою (retire) фазаларын ажыратыңыз.

Әртүрлі қажеттіліктерді қанағаттандыру үшін бір уақытта бірнеше командалық топологиялардың болуын күтіңіз.

Ұйымдағы өзгерістердің триггерлерін (себептерін) танып біліңіз.

Операциялық қызметті өзін-өзі басқаруға арналған жоғары дәлдіктегі сенсорлық ақпарат ретінде қарастырыңыз.

ҚОРЫТЫНДЫ «Алдымен команда» (team-first) тәсілін Конвей заңымен, төрт негізгі топологиямен, командалық өзара әрекеттесу режимдерімен, топология эволюциясымен және ұйымдық сезінумен (organizational sensing) біріктіріңіз.

Жұмысты бастаңыз: командадан бастаңыз, ағындарды анықтаңыз, ең кіші өміршең платформаны (thinnest viable platform) анықтаңыз, құзыреттілік алшақтықтарын анықтаңыз және командалық өзара әрекеттесулерді іс жүзінде қолданыңыз.

7 Командалық өзара әрекеттесу режимдері

Технологиялар мен ұйымдар күрделі мәселелерді шешудегі ұжымдық өнімділікті арттыру үшін адамдарды бір-бірінің жұмысынан ара-тұра оқшаулайтындай етіп қайта жобалануы керек. — Итан Бернштейн, Джесси Шор және Дэвид Лейзер, «Өзара әрекеттесудегі үзілістер ұжымдық интеллектті қалай жақсартады»

II бөлімде біз төрт негізгі командалық топологияның комбинациясы — ағынға бағытталған, қолдаушы (enabling), күрделі ішкі жүйе және платформа — жылдам ағынмен бағдарламалық жасақтаманы жеткізудің нақты үлгісін қалай қамтамасыз ететінін көрдік. Дегенмен, командаларды жай ғана үлгілерге бөлу жоғары тиімділік үшін жеткіліксіз; сонымен қатар бұл командалардың қалай өзара әрекеттесетінін және командалар мен олардың әрекеттесулерін қашан өзгерту керектігін анықтау қажет.

III бөлімде командалық өзара әрекеттесулердің эволюциясы бағдарламалық жүйелерді құратын ұйымдар үшін қалай стратегиялық артықшылыққа айналатыны қарастырылады. Жақсы анықталған командалық өзара әрекеттесу үлгілері мен командалық топологияларды дамытудың нақты эвристикаларын біріктіру арқылы ұйымдар командалық өзара әрекеттесулерді инновацияларды сезіну механизмі ретінде және тұтынушы немесе пайдаланушы үшін жақсырақ нәтижелерге бағытталған өзін-өзі басқару құралы ретінде пайдалана алады.

Осы уақытқа дейін біз әртүрлі сценарийлер үшін жақсы жұмыс істейтін бірнеше статикалық (уақыттың белгілі бір сәтіндегі) командалық топологияларды, сондай-ақ қолайлы командалық шекараларды таңдау бойынша кейбір нұсқаулықтарды көрдік. Дегенмен, командалық шекараны бір рет таңдап, бұдан былай ешқандай өзгеріс болмайды деп күту жеткіліксіз; керісінше, ұйымдар бизнес, ұйымдық, нарықтық, технологиялық және кадрлық қажеттіліктерді қанағаттандыру үшін командалық үлгілердің эволюция қажеттілігін алдын ала болжауы керек.

Командалар бір салада көбірек тәжірибе жинақтаған сайын, жаңа технологиялар пайда болған сайын немесе ұйым көлемі ұлғайып-кішірейген сайын, командалар арасындағы динамика мен экономика (әсіресе ауқымды үнемдеу) өзгереді және командалық топологияларды таңдау бұл өзгерісті жеңілдетуге көмектеседі. Кейбір жағдайларда, ең тиімді бағдарламалық жасақтаманы жеткізу нәтижелеріне қол жеткізу үшін бір уақытта екі команда тығыз жұмыс істеуі керек болса, алты немесе тоғыз айдан кейін олар тәуелсіз болуы мүмкін. Қолданылатын командалық топологиялар І бөлімде кездесетін негізгі командаға бағытталған және архитектуралық ойларды сақтай отырып, туындайтын қиындықтарға бейімделуі және дамуы керек.

Бұл тарауда біз бағдарламалық жүйелерді құратын командалар арасындағы қажетті өзара әрекеттесуді жеңілдететін және түсіндіретін үш негізгі командалық өзара әрекеттесу режимін қарастырамыз: коллаборация, X-қызмет ретінде және фасилитация. Бұл командалық өзара әрекеттесу режимдері ұйымдағы барлық командалар үшін күтілетін нәтижелер мен мінез-құлық үлгілерін анықтайды, командалық өзара әрекеттесулерді қарапайым етеді және сәйкес келмейтін шекараларды анықтау тәсілі ретінде қызмет етеді.

Біз сондай-ақ командалық топологиялардың эволюциясын таңдауға бағыт беретін кейбір маңызды командалық өзара әрекеттесу режимдерін зерттейміз. Командалық өзара әрекеттесу режимдерінің артындағы динамика командалық топологияларды тиімді таңдаудың негізі болып табылады. Ең бастысы, жақсы анықталған командалық өзара әрекеттесу үлгілерінің жиынтығын пайдалану көптеген команда-бағдарламалық жасақтама қатынастарындағы түсініксіздіктен аулақ болуға көмектеседі, осылайша неғұрлым үйлесімді ішкі жүйе шекаралары мен API-лерді жасайды.

Жақсы анықталған өзара әрекеттесулер — тиімді командалардың кілті

Көптеген ұйымдарда нашар анықталған командалық өзара әрекеттесулер мен жауапкершіліктер үйкеліс пен тиімсіздіктің көзі болып табылады. Командаға оның автономды және өзін-өзі ұйымдастырушы екендігі айтылуы мүмкін, бірақ команда мүшелері өз жұмыстарын аяқтау үшін басқа көптеген командалармен өзара әрекеттесуге мәжбүр екенін түсінеді; және бұл көңіл қалдырады. Басқа бір команда API немесе қызмет көрсетуге жауапты болуы мүмкін, бірақ оларда мұны тиімді жасау үшін тәжірибе жеткіліксіз болуы мүмкін.

Кез келген командалар арасындағы қарым-қатынасты қарастырған кезде, негізгі шешім — мақсатқа жету үшін басқа командамен бірлесе жұмыс істеу (коллаборация) немесе басқа команданы қызмет көрсетуші ретінде қарастыру (133-беттегі 7. 1-суретті қараңыз). Коллаборация немесе қызметті тұтыну арасындағы бұл таңдау ұйымның көптеген әртүрлі деңгейлерінде жасалуы мүмкін: инфрақұрылымды қызмет ретінде тұтыну (мысалы, AWS, Azure немесе Google Cloud-тан), логтау және метрикалар бойынша бірлесе жұмыс істеу, күрделі аудио өңдеу кодегін жасау үшін күрделі ішкі жүйе командасына сену немесе қосымшаны орналастыру (deployment) бойынша бірге жұмыс істеу. Біз аулақ болуымыз керек нәрсе — барлық командалардың өз мақсаттарына жету үшін барлық басқа командалармен байланысу қажеттілігі; джаз-бенд өзі ойнайтын музыканы үйлестіретіні сияқты, біз де ұйым ішінде болатын коммуникацияны мұқият реттеуіміз керек.

Image segment 883
  1. 1-сурет: Коллаборация және X-қызмет ретінде

Коллаборация белгіленген салаларда нақты бірлесіп жұмыс істеуді білдіреді. X-қызмет ретінде бір команданың басқа командадан бір нәрсені «қызмет ретінде» тұтынуын білдіреді.

Жазба: Ара-тұра болатын коллаборация ең жақсы нәтижелер береді.

Жақында зерттеушілер күрделі мәселелерді командалық шешудің тиімділігін бағалау үшін тапқыр эксперимент ойлап тапты. Бернштейн мен оның әріптестері: «Мүшелері тек ара-тұра өзара әрекеттесетін топтардың... шешімдерінің орташа сапасы үнемі өзара әрекеттесетін топтармен бірдей болды, бірақ олар кейбір ең жақсы шешімдерді табу үшін жеткілікті түрлендіруді сақтап қалды» деген қорытындыға келді. 1 Ара-тұра болатын коллаборация тұрақты өзара әрекеттесуге қарағанда жақсырақ шешімдер тапты.

Үш маңызды командалық өзара әрекеттесу режимі

Бағдарламалық жүйелер үшін «Командалық топологиялар» моделін қалай және қашан бейімдеу керектігін түсіну үшін біз командалардың өзара әрекеттесуінің үш маңызды жолын анықтап, түсінуіміз керек, бұл ретте «алдымен команда» динамикасы мен Конвей заңын ескеру қажет:

Коллаборация (Collaboration): басқа командамен тығыз бірлесе жұмыс істеу.

X-қызмет ретінде (X-as-a-Service — бір команданың өнімін басқа командаларға дайын қызмет ретінде ұсынуы): минималды коллаборациямен бір нәрсені тұтыну немесе ұсыну.

Фасилитация (Facilitating — көмектесу немесе жеңілдету): басқа командаға кедергілерді жоюға көмектесу (немесе одан көмек алу).

Орта және ірі кәсіпорындардың көпшілігі үшін осы үш командалық өзара әрекеттесу режимінің комбинациясы қажет болуы мүмкін (және бұл режимдерді шағын ұйымдарға көптеген адамдар күткеннен ертерек енгізу пайдалы). Сонымен қатар, бір команда өзі жұмыс істейтін екі әртүрлі команда үшін екі әртүрлі өзара әрекеттесу режимін пайдалануы мүмкін. Біз бұл әртүрлі өзара әрекеттесу режимдерін 7. 2-суреттегі үлгілерді пайдаланып графикалық түрде көрсетеміз:

Image segment 894
  1. 2-сурет: Үш командалық өзара әрекеттесу режимі

Коллаборация режимі диагональды штрихтаумен, X-қызмет ретінде режимі жақшалармен, ал фасилитация нүктелермен көрсетілген.

Мысалы, А командасы жеке қаржыны басқаруға арналған бағдарламалық жасақтамамен жұмыс істейтін ағынға бағытталған команда болсын. Олар жаңа бұлттық мониторинг құралдары бойынша В командасымен өзара әрекеттесу үшін коллаборация режимін пайдалануы мүмкін және бағдарламалық жасақтама жұмыс істейтін платформаны қамтамасыз ететін С командасымен өзара әрекеттесу үшін X-қызмет ретінде режимін пайдалануы мүмкін (135-беттегі 7. 3-суретті қараңыз).

Image segment 898
  1. 3-сурет: Командалық өзара әрекеттесу режимдерінің сценарийі

Ағынға бағытталған А командасы күрделі ішкі жүйе В командасымен коллаборация жасайды (штрихтаумен көрсетілген), сонымен бірге X-қызмет ретінде режимін пайдаланып (жақшалармен көрсетілген) С командасы ұсынатын платформаны тұтынады.

Бағдарламалық жүйелерді құру кезінде командалардың өзара әрекеттесу тәсілдерін ресімдеу командалар арасындағы интерфейстерді нақтырақ анықтау арқылы бағдарламалық жасақтаманы жеткізудің көптеген аспектілерінің тиімділігін оңайырақ бағалауға көмектеседі; өз кезегінде (Конвей заңы бойынша) бұл интерфейстер құрылып жатқан бағдарламалық жүйелерде көрініс табады деп күтіледі. Жапондық өндіруші Toyota-ның зор табысын қарастыра отырып, Майк Ротер былай деп жазды: «Toyota табысының тамыры оның ұйымдық құрылымында емес, оның адамдарының қабілеттері мен дағдыларын дамытуда жатыр». 2

Өзара әрекеттесу режимдері командалық әдетке айналуы керек. Осындай командалық өзара әрекеттесулерді күту және оларға қол жеткізуге көмектесу арқылы командалар мақсаттың анықтығын сезінеді, командалық белсенділік артады және басқа командалармен туындайтын түсініспеушіліктер азаяды. Командалық өзара әрекеттесуді осылайша шектеу Конвей заңынан туындайтын жүйелерді құрудың гомоморфтық (құрылымдық ұқсастық) аспектілерін де саналы түрде қарастырады (2-тарауды қараңыз). Командалар мынаны сұрауы керек: «Біз бұл басқа командамен қандай өзара әрекеттесуде болуымыз керек? Біз басқа командамен тығыз коллаборация жасауымыз керек пе? Біз қызметті күтуіміз немесе ұсынуымыз керек пе? Әлде біз фасилитацияны күтуіміз немесе ұсынуымыз керек пе? »

«Командалық топологиялар» тәсілінің негізгі бөлігі — екі команданың коллаборация жасауы немесе бір команданың басқа командадан бір нәрсені «қызмет ретінде» тұтынуы арасындағы таңдауда.

Коллаборация: Инновацияның қозғаушы күші және жылдам ізденіс, бірақ шекаралардың бұлдырауы

<span data-term="true">Коллаборация</span>: басқа командамен тығыз бірлесе жұмыс істеу

Коллаборация режимі жоғары дәрежедегі бейімделу немесе жаңалық ашу қажет болғанда, әсіресе жаңа технологиялар мен әдістерді зерттеу кезінде қолайлы. Коллаборация режимі жаңа нәрселерді жылдам табу үшін жақсы, өйткені ол командалар арасындағы қымбат жұмыс тапсыру процестерінен аулақ болуға көмектеседі. Мысалы, екі қолданыстағы команданың, А командасы мен В командасының сараптамасын қамтитын кеңістікте маңызды инновация болуы мүмкін, мысалы, бұлттық сенсорларды басқару (бұлттық технологиялар мен сенсорлық технологияларды біріктіру) немесе киілетін құрылғылармен қауіпсіз жергілікті желі құру (желілік білім мен киім өнеркәсібінің тәжірибесін біріктіру). Коллаборация режимі командалар арасында жақсы үйлесімділікті және бірге жұмыс істеуге деген үлкен ынта мен қабілетті талап етеді.

Жаңа жүйелерді әзірлеудің алғашқы кезеңдерінде және жаңа ақпаратты, технологиялық шектеулерді және қолайлы тәжірибелерді жылдам табу қажет болатын кезеңдерде коллаборация режимі өте құнды. Себебі коллаборацияны пайдаланатын командалық топологиялар жұмыстың жаңа тәсілдерін және технологиялардың күтпеген мінез-құлқын жылдам анықтай алады.

Бұл коллаборация күрделі мәселелерді шешу үшін көптеген адамдардың біріккен білімі мен тәжірибесін біріктіру мақсатында әртүрлі дағдылар жиынтығы бар топтар арасында орын алады. Коллаборация технологиялардың қалай жұмыс істейтіні туралы жаңа түсініктерге әкеледі, ал алынған білім басқа командаларға қайтарылады (бұл доктор Кюнг Хи Ким мен Роберт А. Пирстің «дивергентті ойлау» тәсілдеріне сәйкес келеді3).

Коллаборация режимін пайдаланатын командалардың өзара әрекеттесуін визуализациялаудың екі пайдалы жолы бар. Біріншісі — әртүрлі сараптамасы мен жауапкершілігі бар екі команданың шағын мәселелер жиынтығында бірге жұмыс істеуін елестету. Бұл жағдайда екі команда өздерінің табиғи назар аудару саласы бойынша жауапкершілігі мен сараптамасын негізінен сақтайды және іс-әрекеттер мен бөлшектердің белгілі бір кіші жиынтығында бірге жұмыс істейді.

Коллаборация режимінің екінші визуализациясы командалар арасындағы бірлескен жұмыстың сипаты толық дерлік болуы мүмкін екенін көрсетеді: бастапқыда әртүрлі дағдылары мен сараптамасы бар екі команда болса, енді іс жүзінде сараптама мен жауапкершілікті біріктіретін біртұтас команда бар. (Адамдар саны Данбардың он бес санынан аспауы үшін мұқият болу керек).

Екі жағдайда да — шағын анықталған сәйкестік болса да және назар мен жауапкершіліктің толық сәйкестігі болса да — екі команда өздерінің коллаборациясының жалпы нәтижелері үшін бірлескен жауапкершілікті алуы керек, өйткені коллаборация актісі жауапкершілік шекараларының бұлдырауын тудырады. Бірлескен жауапкершілік болмаса, бір нәрсе дұрыс болмай қалған жағдайда сенімнің жоғалу қаупі туындайды.

Команда бір команданың сараптамасынан асып түсетін ізденіс немесе жылдам оқу контекстінде болғанда, сол команданың басқа дағдылары бар басқа командамен тығыз коллаборация жасауы күтілуі керек. Дегенмен, үздіксіз коллаборацияның когнитивті жүктемесі (cognitive load — адамның немесе команданың бір уақытта өңдей алатын ақпарат көлемі) команданың «табиғи» саласында ғана жұмыс істеуден әлдеқайда жоғары болуы мүмкін. Бұл коммуникация шығындары жоғары болатынын білдіреді, бұл команданы бір команда ретінде қарастырған кезде оның тиімділігінің төмендеуіне әкелуі мүмкін. Керісінше, жоғары тиімділікке бағытталған инвестиция жаңа тәжірибелерді жылдам табу арқылы екі команданың ансамблінде жасалады. Бұл, өз кезегінде, екі команда коллаборация режимін пайдаланып өзара әрекеттескенде, коллаборацияның жоғары құнына байланысты бірге жұмыс істеуден үлкен құндылық алынуы керек дегенді білдіреді; сыйақы нақты болуы тиіс. Сондай-ақ командалар арасында үйкеліс аз болуы немесе мүлдем болмауы керек, өйткені кез келген үйкеліс коллаборацияны қиындатады.

Сонымен қатар, Конвей заңы коллаборация режимінен туындайтын ізденіс пен жылдам оқу кезінде бағдарламалық жасақтаманың жауапкершіліктері мен архитектурасы бір-бірімен көбірек араласатынын айтады. Егер екі команда арасындағы қызметтердің немесе жүйелердің нақты, жақсы анықталған интерфейстері қажет болса, онда коллаборация режимін ұзақ уақыт пайдалану ең жақсы таңдау болмауы мүмкін. Интерфейстерді орнату немесе жетілдіру үшін қысқа мерзімді немесе жеңіл-желпі ара-тұра коллаборация жасау қалыпты жағдай, бірақ үздіксіз коллаборацияның қажеттілігі домен шекараларының және/немесе команда жауапкершіліктерінің дұрыс емес екенін немесе команда ішіндегі дағдылардың дұрыс үйлеспегенін көрсетеді.

  1. 1-кесте: Коллаборация режимінің артықшылықтары мен кемшіліктері

Артықшылықтары | Кемшіліктері :--- | :--- Жылдам инновация және ізденіс | Жұмыс тапсыру (hand-offs) кезеңдерінің аздығы Әр команда үшін кең, ортақ жауапкершілік | Командалар арасында көбірек бөлшектер/контекст қажет, бұл жоғары когнитивті жүктемеге әкеледі Коллаборация кезіндегі өнімділіктің бұрынғымен салыстырғанда төмендеу мүмкіндігі

Шектеу: Команда бір уақытта ең көп дегенде бір ғана басқа командамен коллаборация режимін пайдалануы керек. Команда бір уақытта бірнеше командамен коллаборация жасамауы тиіс.

Типтік қолданылуы: Күрделі ішкі жүйе командаларымен жұмыс істейтін ағынға бағытталған командалар; платформалық командалармен жұмыс істейтін ағынға бағытталған командалар; платформалық командалармен жұмыс істейтін күрделі ішкі жүйе командалары.

X-қызмет ретінде: Нақты жауапкершілік және болжамды жеткізу, бірақ сапалы өнім менеджментін талап етеді

X-қызмет ретінде (X-as-a-Service) командалық өзара әрекеттесу режимі бір немесе бірнеше командаға көп күш жұмсамай-ақ «жай ғана жұмыс істейтін» код кітапханасын, компонентті, API-ді немесе платформаны пайдалану қажет болған жағдайларға қолайлы, мұнда жүйенің компоненті немесе аспектісі бөлек команда немесе командалар тобымен «қызмет ретінде» тиімді қамтамасыз етіле алады.

<span data-term="true">X-қызмет ретінде</span>: минималды коллаборациямен бір нәрсені тұтыну немесе ұсыну

Жүйені әзірлеудің кейінгі кезеңдерінде және ізденістен гөрі болжамды жеткізу қажет болатын кезеңдерде X-қызмет ретінде моделі жақсы жұмыс істейді. Бұл модельде командалар өздерінің технологиялық ландшафтының белгілі бір аспектілері басқа командалармен (ішкі немесе сыртқы) қызмет ретінде ұсынылатынына сене алады, бұл командаға өз жұмысын жеткізуге назар аударуға мүмкіндік береді.

Қызметтің күрделі аспектілері тығыз коллаборацияны пайдаланатын алдыңғы «дивергентті» тәсілмен анықталып қойған болады, бұл ең тиімді шешімді қызмет ретінде іске қосуға мүмкіндік береді. Бір нәрсеге «қызмет ретінде» сену XaaS командасынан (командаларынан) тамаша жұмысты талап етеді — бұған қол жеткізу оңай емес — бірақ бұл жеткізу командасының өз жұмысының негізгі емес аспектілерін азырақ түсінуіне мүмкіндік береді, бұл оларға жылдам жеткізуге жағдай жасайды (бұл доктор Кюнг Хи Ким мен Роберт А. Пирстің «дивергентті ойлау» тәсілдеріне сәйкес келеді).

X-қызмет ретінде режимінде кімнің неге иелік ететіні туралы толық айқындық бар: бір команда екінші команда ұсынатын нәрсені тұтынады. Коллаборация режиміндегі жұмыспен салыстырғанда әр командаға азырақ контекст қажет, сондықтан әр тараптағы когнитивті жүктеме төменірек болуы мүмкін. Жоспар бойынша, шекара арқылы инновация коллаборацияға қарағанда баяуырақ жүреді, өйткені X-қызмет ретінде режимінде қызметті жақсы анықтаған жақсы, таза API бар. Біз бұл қарым-қатынасты 7. 4-суреттен көре аламыз.

Image segment 924
  1. 4-сурет: X-қызмет ретінде командалық өзара әрекеттесу режимі

Бұл жағдайда оң жақтағы команда сол жақтағы командаға бір нәрсені «қызмет ретінде» ұсынып отыр (мүмкін бұл API, әзірлеуші құралдары немесе тіпті бүтін бір платформа болуы мүмкін).

Компонентті немесе жүйенің аспектісін қызмет ретінде тиімді ұсыну үшін жауапкершілік шекарасы бизнес немесе технологиялық домен контекстінде мағыналы болуы ғана емес, сонымен қатар қызметті ұсынатын команда өз қызметін тұтынатын командалардың қажеттіліктерін түсінуге және жүйенің өз аспектісін қызметті басқару принциптерін (нұсқалауды пайдалану, өнім менеджменті және т. б. арқылы) қолдана отырып басқаруға шебер болуы керек.

X-as-a-Service («X қызмет ретінде») командалық өзара әрекеттесу режимінде екі команда компонентті, API (бағдарламалық интерфейс) немесе функцияны қызмет ретінде пайдалану немесе ұсыну үшін күнделікті тығыз ынтымақтастықты қажет етпейді. Бұл X-as-a-Service моделінің айқын артықшылығы: егер ұсынылатын қызмет тұтынушы команда тарапынан аз ғана әрекеттесуді қажет етсе, онда ол өз мақсатына толық сәйкес келеді және тұтынушы командаға жұмысын тиімді істеуге көмектеседі деген сөз. Бұл X-as-a-Service моделі үшін кейбір командалардың басқа команда ұсынатын қызметтің төменгі деңгейдегі егжей-тегжейлерін ескермеуінен үлкен пайда келетінін білдіреді; бұл оларға іске асыру детальдарына алаңдамай, жылдам алға жылжуға мүмкіндік береді.

X-as-a-Service моделі қызмет көрсетуші команда тарапынан қызметті басқарудың жақсы практикасы болғанда және қызмет шекарасы дұрыс таңдалып, сапалы іске асырылғанда ғана жақсы жұмыс істейді.

Кез келген нәрсені қызмет ретінде ұсыну үшін — ол компонент, API, тестілеу құралы немесе тұтас жеткізу платформасы болсын — жауапты команда тұтынушылар алдында да, ұсынып отырған өнімінің өміршеңдігі үшін де жоғары жауапкершілікті сезінуі тиіс. Олар DevEx (әзірлеушінің өніммен жұмыс істеу тәжірибесі) көрсеткішін барынша тартымды етуі керек. Олар ұсынатын қызметті пайдалану, тестілеу, орналастыру және қателерді жөндеу оңай болуы тиіс; ал оны қалай пайдалану керектігі туралы құжаттама түсінікті, сапалы жазылған және өзекті болуы керек. Сонымен қатар, ұсынылатын қызмет уақыт өте келе өміршеңдігін сақтайтындай етіп басқарылуы тиіс: тұтынушы командалардың жаңа функциялар туралы сұраныстары ескеріледі, бірақ олар тек біреу сұрағаны үшін ғана жасала салмайды. Оның орнына, өнімнің мақсаты мен өкілеттігі барлық тұтынушылардың мүддесін ескере отырып дамиды, ал жақсартулар басқа командалармен кеңесе отырып, мұқият жоспарланады.

Тіпті төменгі деңгейдегі XML түрлендірулеріне арналған қарапайым код кітапханасының өзі өнімді басқару және DevEx принциптерін қолданудан ұтады. XML кітапханасын жасайтын және қолдайтын команда нұсқалау (versioning) және кері үйлесімділік, кітапхананың ескі нұсқаларын қолданыстан шығарудың жарияланған жол картасы (roadmap), тұтынушыларға жаңа нұсқаларға өтуге көмектесу және т. б. туралы ойлануы керек. Код кітапханасынан үлкенірек кез келген нәрсе үшін X-as-a-Service тәсілдеріне деген қажеттілік бұдан да жоғары болады.

Кесте 7.2: X-as-a-Service режимінің артықшылықтары мен кемшіліктері

Артықшылықтары | Кемшіліктері --- | --- Жауапкершілік шекаралары нақты белгіленген иелік ету айқындылығы | Шекара немесе API тиімсіз болса, жұмыс ағынының баяулау қаупі Командалар арасында қажетті детальдар мен контекст азаяды, сондықтан когнитивтік жүктеме шектеледі | Шекара немесе API инновациясының баяулауы

Шектеу: Команда бір уақытта көптеген басқа командалармен X-as-a-Service режимінде әрекеттесуді (қызметті тұтынушы немесе ұсынушы ретінде) күтуі керек.

Әдеттегі қолданыс: Ағынға бағытталған командалар мен күрделі ішкі жүйе командаларының платформалық командадан Platform-as-a-Service тұтынуы; ағынға бағытталған және күрделі ішкі жүйе командаларының басқа күрделі ішкі жүйе командасынан компонентті немесе кітапхананы қызмет ретінде тұтынуы.

Фасилитация: Мүмкіндіктердегі олқылықтарды анықтау және азайту

Фасилитациялық (жәрдемдесу) командалық әрекеттесу режимі бір немесе бірнеше команда өз жұмысының қандай да бір аспектісінде басқа команданың белсенді көмегіне (немесе коучингіне) мұқтаж болған жағдайларға қолайлы. Фасилитациялық режим қолдаушы команданың (5-тарауды қараңыз) негізгі жұмыс режимі болып табылады және ол көптеген басқа командаларға қолдау көрсетіп, мүмкіндіктер бере отырып, осы командалардың өнімділігі мен тиімділігін арттыруға көмектеседі. Фасилитацияны жүзеге асыратын команданың міндеті — басқа команда(лар)ға тиімдірек болуға, тезірек үйренуге, жаңа технологияны жақсырақ түсінуге және командалар арасындағы ортақ мәселелер мен кедергілерді анықтап, жоюға мүмкіндік беру. Фасилитациялық команда сондай-ақ басқа командалар қолданатын қолданыстағы компоненттер мен қызметтердегі олқылықтарды немесе сәйкессіздіктерді анықтауға көмектесе алады.

Фасилитация режимін қолданатын командалар әдетте көптеген басқа командалармен жұмыс істейді, командааралық мәселелерді анықтап, азайтады және басқа командалар немесе ұйымдар қызмет ретінде ұсынатын код кітапханаларының, API-лердің және платформалардың бағыты мен мүмкіндіктерін қалыптастыруға көмектеседі.

Фасилитация: кедергілерді жою үшін басқа командаға көмектесу (немесе басқа командадан көмек алу).

Фасилитациялық міндеті бар команда негізгі бағдарламалық жүйелерді, қолдаушы компоненттерді немесе платформаны құруға қатыспайды, керісінше бағдарламалық жасақтаманы жасайтын және басқаратын басқа командалар арасындағы өзара әрекеттесу сапасына назар аударады. Мысалы, үш ағынға бағытталған команданың тиімділігіне жәрдемдесетін команда платформа ұсынатын лог жүргізу (logging) қызметін теңшеу өте қиын екенін анықтауы мүмкін: үш команда да оны пайдалануда қиындыққа тап болады. Сонда осы үш командаға көмектесетін команда платформа тарапынан лог жүргізу қызметін жақсартуға фасилитация жасай алады.

Фасилитациялық әрекеттесу кезінде екі команданың біреуі ғана негізгі бағдарламалық жүйелерді құратындықтан, <span data-term="true"> Конвей заңының </span> (ұйым құрылымы жүйе архитектурасына әсер етеді деген қағида) әсері алдын ала ескерілген: фасилитация жасайтын команда қажетті жүйе архитектурасына негізделе отырып, басқа командалар арасындағы байланысты анықтауға және нақтылауға көмектеседі.

Кесте 7.3: Фасилитация режимінің артықшылықтары мен кемшіліктері

Артықшылықтары | Кемшіліктері --- | --- Жұмыс ағынын арттыру үшін ағынға бағытталған командалардағы кедергілерді жою | «Құрастыру» немесе «басқару» жұмыстарымен айналыспайтын тәжірибелі мамандарды қажет етеді Компоненттер мен платформалардағы олқылықтарды және сәйкес келмейтін мүмкіндіктерді немесе функцияларды анықтау | Әрекеттесу фасилитацияға қатысатын бір немесе екі команда үшін де бейтаныс немесе біртүрлі көрінуі мүмкін

Шектеу: Команда бір уақытта аз ғана басқа командалармен фасилитациялық әрекеттесу режимін (фасилитацияны тұтынушы немесе ұсынушы ретінде) қолдануды күтуі керек.

Әдеттегі қолданыс: Ағынға бағытталған, күрделі ішкі жүйе немесе платформалық командаға көмектесетін қолдаушы команда; немесе ағынға бағытталған командаға көмектесетін ағынға бағытталған, күрделі ішкі жүйе немесе платформалық команда.

Әрбір әрекеттесу режиміне арналған командалық мінез-құлықтар

Әрбір командалық әрекеттесу режимі командалық мінез-құлықтардың тиісті жиынтығымен жақсы жұмыс істейді. Бұл командалық мінез-құлықтарды мінез-құлық «стильдері» деп қарастыруға болады, бұл концерттік топтың контекстке сәйкес музыкалық орындаудың әртүрлі стильдерін (джаз, свинг, оркестрлік фильм музыкасы және т. б. ) таңдауына ұқсайды. Топ (немесе команда) бір адамдардан тұрады, бірақ олардың топ ретінде қабылдайтын стилі қандай әсерге қол жеткізу керектігіне байланысты өзгереді. Бұл сондай-ақ топ (команда) квартет немесе хор сияқты басқа топпен бірге өнер көрсетуі керек жағдайларға да қатысты: екі топтың бірлескен өнері сәтті шығуы үшін топтың орындау стилі өзгереді.

Концерттік топ ойнап жатқан музыкасының қажеттіліктеріне және бірге өнер көрсетіп жатқан басқа топтарға сәйкес өзінің орындау стилін қалай өзгертсе, Team Topologies тәсілімен бағдарламалық жасақтаманы жеткізетін команда да басқа командалармен әрекеттесу түріне қарай командалық мінез-құлықтың әртүрлі «стильдерін» қабылдауы керек.

Белгілі технолог Джеймс Уркарт Конвей заңын ескере отырып, командааралық байланыс туралы былай деп жазады: «саясаттан, өткізу қабілетінің шектеулерінен және адамдар арасындағы байланыстың жай ғана тиімсіздігінен аулақ болатын байланыс арнасы қажет». Бұл дәл осы тараудағы нақты анықталған командалық әрекеттесулер қамтамасыз ететін нәтиже. Сонымен қатар, мінез-құлықты зерттеу нәтижелері адамдар басқалардың іс-әрекетін болжай алған кезде олармен жақсырақ жұмыс істейтінін көрсетеді. Адам ретінде біз ұйымдағы басқалар үшін тұрақты тәжірибе ұсына отырып, сенім ұялата аламыз. Нақты рөлдер мен жауапкершілік шекаралары күтілетін мінез-құлықты анықтауға көмектеседі және кейбіреулер «көрінбейтін электр қоршаулары» деп атайтын жағдайлардан аулақ болуға мүмкіндік береді.

Командалық әрекеттесу үшін жүйелерді жобалау тәсілі ретіндегі уәделер теориясы.

Уәделер теориясы (технолог және зерттеуші Марк Бургесс жасап шығарған) командааралық қарым-қатынастарды бұйрықтар мен мәжбүрлі келісімшарттар түрінде емес, уәделер түрінде құрудың неге тиімді екенін түсіндіреді. Мысалы, SemVer (семантикалық нұсқалау — нұсқа нөмірлерін мағынасына қарай беру) көрсеткен major/minor/patch/build нөмірлерінің мағынасын сақтай отырып, команда өз кодына тәуелді бағдарламалық жасақтаманы бұзбауға уәде береді.

Коллаборация режиміне арналған командалық мінез-құлықтар: «Жоғары деңгейдегі әрекеттесу және өзара құрмет»

Коллаборация (ынтымақтастық) режимін қолданатын командалар әріптес командамен жоғары деңгейдегі әрекеттесу мен өзара құрмет болуын күтуі керек. Бұл әдетте команда мүшелері іс-шаралардың олар күткеннен әлдеқайда ұзаққа созылуына дайын болуы керек дегенді білдіреді, өйткені коллаборацияның «шекараларды тоғыстырушы» аспектілері бұрын белгісіз болған мәселелерді анықтап, шешеді. Бір команданы екінші команданың жұмысы үшін марапаттау мінез-құлықты үйлестіруге көмектеседі — бұны Principles of Product Development Flow авторы Дон Райнертсен «Бір-бірін жабатын өлшеу принципі» деп атайды.

Коллаборация режиміне қалай жаттығу керек.

Жұптық бағдарламалау, моб-бағдарламалау (бүкіл команда бірге код жазу) және маркер тақтасында эскиз салу сияқты негізгі коллаборация дағдылары бойынша кейбір тренингтер немесе коучингтер, сондай-ақ шекараларды тоғыстыратын ынтымақтастық бойынша арнайы оқыту коллаборация режимін қолданатын командалар үшін өте пайдалы болуы мүмкін.

X-as-a-Service режиміне арналған командалық мінез-құлықтар: «Пайдаланушы тәжірибесіне басымдық беру»

X-as-a-Service режимін қолданатын командалар қызмет ретінде ұсынылатын өнімнің пайдаланушы тәжірибесіне (UX) басымдық беруі керек. Мысалы, егер платформалық команда ағынға бағытталған команда үшін динамикалық бұлттық тестілеу орталарын ұсынса, екі команда да осы орталармен әрекеттесу тәжірибесіне назар аударуы керек: API қандай сезім тудырады, пайдаланылатын ресурстарды көру қаншалықты оңай, функциялар пайдалану үшін қаншалықты тартымды және т. б. Платформаның функционалдығы да маңызды екені анық, бірақ командалар арасындағы ең жақсы және нәтижелі әрекеттесуді қамтамасыз ету үшін платформаны пайдалану тәжірибесіне назар аудару өте маңызды.

X-as-a-Service режиміне қалай жаттығу керек.

Негізгі пайдаланушы тәжірибесі (UX) және әзірлеуші тәжірибесі (DevEx) практикалары бойынша кейбір тренингтер немесе коучингтер X-as-a-Service режимін қолданатын командалар үшін пайдалы болуы мүмкін.

Фасилитация режиміне арналған командалық мінез-құлықтар: «Көмектесу және көмек алу»

Фасилитация режимін қолданатын командалар көмек беруге де, көмек алуға да дайын болуы керек. Айталық, қолдаушы команда ағынға бағытталған командаға жаңа практикаларды енгізуге көмектесіп жатыр. Ағынға бағытталған команданың адамдары қолдаушы команданың көмегін қабылдауға ашық болуы керек; олар жаңа тәсілдерге ниет білдіріп, қолдаушы команданың бұдан да жақсырақ тәсілдерді көрген болуы мүмкін екенін түсінуі қажет.

Фасилитация режиміне қалай жаттығу керек.

Басқа командаға қалай фасилитация жасау керек немесе одан қалай көмек алу керек деген мәселелер бойынша кейбір тренингтер немесе коучингтер фасилитация режимін қолданатын командалар үшін пайдалы болуы мүмкін.

Тиісті командалық әрекеттесу режимдерін таңдау

Төрт негізгі командалық топологияның (ағынға бағытталған, қолдаушы, күрделі ішкі жүйе және платформалық) әрқайсысының ұйымдық контексте жақсы жұмыс істеуіне мүмкіндік беретін белгілі бір мінез-құлық сипаттамалары бар. Кейде нәтижелерді жақсарту үшін команда басқа командалармен әрекеттесудің басқа режимін қабылдауы қажет болуы мүмкін (уақытша немесе тұрақты негізде).

Әрбір негізгі командалық топология әртүрлі әрекеттесу режимдеріне тап болуы мүмкін. Командалық әрекеттесулерді осы үш режимге сәйкестендіру командалардың ағымдағы ұйымдық мақсаттары үшін барынша тиімді жұмыс істеуін қамтамасыз етуге көмектеседі. 7. 5-суретте (145-бетті қараңыз) төрт негізгі командалық топологияның әрқайсысы үшін негізгі әрекеттесу режимдері көрсетілген.

Image segment 967
  1. 5-сурет: Төрт негізгі командалық топология үшін негізгі әрекеттесу режимдері

Ағынға бағытталған командалар X-as-a-Service немесе коллаборацияны пайдаланады; қолдаушы командалар фасилитацияны пайдаланады; күрделі ішкі жүйе командалары X-as-a-Service пайдаланады; платформалық командалар платформаны тұтынатын командалар үшін X-as-a-Service пайдаланады.

Негізгі командалық топологиялардың әдеттегі және кездейсоқ әрекеттесу режимдерін 7. 4-кестеде көрсетілгендей маңызды командалық әрекеттесу режимдерімен салыстыруға болады.

Кесте 7.4: Негізгі командалық топологиялардың командалық әрекеттесу режимдері

Топология | Коллаборация | X-as-a-Service | Фасилитация --- | --- | --- | --- Ағынға бағытталған | Әдеттегі | Әдеттегі | Кездейсоқ Қолдаушы | Кездейсоқ | — | Әдеттегі Күрделі ішкі жүйе | Кездейсоқ | Әдеттегі | — Платформалық | Кездейсоқ | Әдеттегі | —

  1. 4-кесте ұйымдағы әртүрлі командалардың басқа командалармен қалай әрекеттесетіні туралы пайдалы ескерту болып табылады. Мысалы, ағынға бағытталған команда әдетте басқа командалармен коллаборация немесе X-as-a-Service арқылы әрекеттесуді күтсе, платформалық команда көбінесе X-as-a-Service режимін қолданады. Бұл әр команда түрі үшін қажет болуы мүмкін тұлғааралық дағдылар туралы қосымша кеңестер береді: платформалық командаларға өнімді және қызметті басқару бойынша күшті сараптама қажет болады, ал қолдаушы командаларға тәлімгерлік және фасилитация бойынша үлкен тәжірибесі бар адамдар керек болады.

Команданың негізгі құрылымын таңдау

Командалық әрекеттесу режимдерін түсіне отырып, біз қажетті бағдарламалық архитектураны құруға көмектесетін бастапқы ұйымдастыру дизайнын таңдай аламыз. Әріптестер арасында ұйым таңдалған шекаралардың шынымен де ең жақсы шекаралар екенін «сезінген» сайын, әрекеттесу режимдері мен командалық құрылымдардың аз да болса өзгеруі қажет болатыны туралы түсінік қалыптасуы тиіс.

КЕЙС: IBM-дегі КОМАНДАЛЫҚ ӘРЕКЕТТЕСУДІҢ ӘРТҮРЛІЛІГІ (2014 ЖЫЛ ШАМАСЫ)

Эрик Миник, Үздіксіз жеткізу (Continuous Delivery) бағдарламасының директоры, IBM

2013 жылдан бастап Эрик Миник бүкіл әлем бойынша IBM техникалық командаларында жаңа практикаларды енгізуге және таратуға жетекшілік етті.

2013 жылы мен IBM-ге қосылғанда, корпоративтік бағдарламалық жасақтама индустриясы бұлттық технологиялар мен жаппай автоматтандыру әкелген айтарлықтай өзгерістерді бастан кешіріп жатты. Менің ол кездегі рөлімнің бір бөлігі — ондаған жерде (алты континентте) жұмыс істейтін 40 000 әзірлеушіге сол кездегі жаңа DevOps және Agile практикаларын енгізуге көмектесу болды. Ол жерде командалық әрекеттесулердің көптеген түрлері болып жатты, сондықтан жаңа жұмыс тәсілдеріне көшуді ынталандыру үшін бізде «адвокаттар» командасы болды (7. 6-суретті қараңыз).

Image segment 980
  1. 6-сурет: 2014 жыл шамасындағы IBM-дегі командалық әрекеттесу режимдері

2014 жыл шамасындағы IBM-дегі командалық әрекеттесу режимдері: оқуды және командалық өзгерістерді үйлестіретін және фасилитациялайтын «DevOps адвокаттары» командасы.

Адвокаттар командасына бірнеше толық күндік қызметкерлер мен кейбір қосалқы жұмыс істейтін адамдар кірді. Ол идеялардың IBM ұйымына таралуына көмектесу үшін бүкіл әлем бойынша әртүрлі командалардан сәтті үлгілерді жинап, басқаларды ынталандырды және оқытты. Оның тәсілі командалар мен олардың басшылары үшін ресми оқытуды қамтыды. Сонымен қатар, мыңдаған технологтар аудиториясын жинайтын ішкі вебинарлар сияқты контенттер тұрақты түрде шығып тұрды.

Адвокаттар командасы командалық топологияға онша сәйкес келмеуі мүмкін, өйткені біз өзімізді бірнеше жылдан кейін қажет болмайтын уақытша команда ретінде қарастырдық, немесе мен ол кезде Twitter-де айтқандай: «DevOps командасының» мақсаты — ұйымның қалған бөлігіне мүмкіндік беру арқылы өзін-өзі жабу (қажетсіз ету) болуы керек.

Коллаборация және фасилитация әрекеттесулерімен Кері Конвей маневрін қолданыңыз

Біз кері Конвей маневрін (ұйым құрылымын қажетті архитектураға сәйкес өзгерту) жасағанда, Конвей заңы анықтайтын өзіндік ұқсастықтың гомоморфты тартылысы алдын ала ескеріледі: ұйым бағдарламалық жасақтама мен жүйелер архитектурасында қажетті байланыс жолдарына сәйкес келетіндей етіп құрылады. Дегенмен, жаңа командалық құрылым ойлап табылған және енгізілген бойда жаңа архитектура пайда болады деп күтуге болмайды. Дәл Конвей заңының артындағы күштерге байланысты, қолданыстағы бағдарламалық архитектура басында жаңа командалық құрылымдарға «қарсылық» көрсетеді.

Жаңа ұйымдық құрылымның жұмыс істеуіне көмектесу үшін — және жаңа жауапкершілік шекараларының шынымен дұрыс екенін сезіну үшін — кері Конвей маневрі бағдарламалық жасақтаманы жасайтын командалар арасындағы уақытша, бірақ нақты коллаборация режимдерімен, сондай-ақ фасилитациялық режимде әрекет ететін бір немесе бірнеше қолдаушы командалармен (және мүмкін басқа командалармен) бірге қолданылуы керек. Жаңа шекаралар арқылы уақытша, нақты коллаборацияны пайдалану және ағынға бағытталған және күрделі ішкі жүйе командалары үшін жоғары деңгейдегі фасилитацияны қолдану арқылы жаңа жауапкершілік шекараларындағы кез келген мәселелерді жылдам анықтауға болады, бұл командаға тым көп нәрсе құрылмай тұрып, дизайнды ертерек түзетуге мүмкіндік береді.

Коллаборация кезеңінде бағдарламалық ішкі жүйелер үшін командалық жауапкершіліктер басында «теріс» (back to front) болуы мүмкін, бұл команданың иелік етуі ұзақ мерзімді перспективада тиімді болуы үшін қажет. Мысалы, үлкен бағдарламалық монолитті жеке сегменттерге (ағындарға, компоненттерге немесе платформаның жаңа аспектілеріне сәйкестендірілген) бөлу керек делік. Жоғары деңгейдегі компонентке «логикалық» тұрғыдан иелік ететін командалар сол кодты бөліп алу үшін белгілі бір уақыт бойы төменгі деңгейдегі қабатта (платформада) жұмыс істеуі қажет болуы мүмкін, әсіресе егер олар басында тым тығыз байланысқан кодты өздері жазған болса. Коллаборация кезеңі ілгерілеген сайын, төменгі қабатқа логикалық түрде иелік ететін команда жаңа команда төменгі қабатқа толық иелік еткенге дейін бастапқы командадан көбірек жауапкершілікті ала алады.

Командалық топологияларды мақсатты түрде дамыту арқылы командалар арасындағы тиімді API-лерді анықтаңыз

5-тарауда көргеніміздей, арнайы архитектура командасы әдетте аулақ болу керек анти-үлгі (anti-pattern) болып табылады. Дегенмен, бағдарламалық жасақтама және жүйелік архитекторлардың шағын тобы ұйым ішінде өте тиімді болуы мүмкін, егер архитектураның міндеті командалар арасындағы әрекеттесулерді, демек, жүйенің архитектурасын анықтау, түзету және қайта қалыптастыру болса.

Себебі жүйе құратын ұйым ішінде Конвей заңы қолданыста болғандықтан, ұйымның архитектурасы — бұл жүйенің архитектурасы. Немесе Рут Малан айтқандай: «ұйымдық бөліністер жүйедегі нақты жіктерді (seams) анықтайды». Командаларды қалыптастыру үшін кері Конвей маневрін қолданудың бұрыннан келе жатқан жақтаушысы Аллан Келли былай дейді: «өзін Архитектормын деп санайтын адамға техникалық та, әлеуметтік те дағдылар қажет. . . Сондай-ақ оларға таза технологиядан кеңірек өкілеттік керек — олар бизнес стратегияларына, ұйымдық құрылымдарға және кадр мәселелеріне ықпал ете алуы тиіс, яғни олар менеджер де болуы керек».

Архитектор былай деп ойлануы тиіс: «Осы екі команда үшін қандай командалық әрекеттесу режимдері сәйкес келеді? Жүйенің осы екі бөлігі арасында, осы екі команда арасында бізге қандай байланыс қажет? » Сондықтан Team Topologies тәсілін ұстанатын ұйымдағы архитектор — бұл жоспарланған бағдарламалық архитектураны алдын ала ескеретін командалық API-лердің дизайнері.

Іс жүзінде, шекараларды тоғыстыруды орындау үшін командалар ішіндегі жеке адамдарға ғана сенудің орнына (бұл күйзеліске әкелуі мүмкін және жақсы әлеуметтік әрі техникалық дағдыларды қажет етеді), ұйым ішіндегі командалар арасындағы API-лерді жобалау үшін API дизайнында білікті адамдарды пайдаланыңыз.

Белгісіздікті азайту және жұмыс ағынын жақсарту үшін командалық әрекеттесу режимдерін таңдаңыз

Әртүрлі командалық әрекеттесу режимдерінің әртүрлі сипаттамалары бар, бұл оларды іс-әрекеттердің немесе мақсаттардың әртүрлі түрлеріне қолайлы етеді. Бұл бөлімде біз әртүрлі жағдайларда қай командалық әрекеттесу режимдерін қолдану керектігін анықтаймыз.

Өміршең X-as-a-Service әрекеттесулерін анықтау үшін коллаборация режимін пайдаланыңыз

X-as-a-Service әрекеттесу режимі бағдарламалық жасақтаманы жеткізу командаларына жылдам ағынға қол жеткізуге көмектесуде өте тиімді болуы мүмкін. Дегенмен, кез келген қызмет сияқты, егер қызмет шекаралары дұрыс сызылмаса және қызмет жеткілікті икемділіксіз тым көп немесе тым аз нәрсені қамтамасыз етуге тырысса, X-as-a-Service әрекеттесуі тиімді болмайды; қызмет тұтынушы командалардың қажеттіліктерін қанағаттандырмайды.

Қызмет шекараларының дұрыс сызылмауы мәселесін шешу үшін, қызметтің өкілеттігін тарылту немесе кеңейту (немесе икемділікті арттыру) арқылы шекараларды жаңа орынға көшіруге көмектесетін коллаборация (бірлескен жұмыс) режимін қолдануға болады. Бұл қызметті тұтынушы командалар үшін қолайлырақ етеді. Шын мәнінде, барлық қызметтердің барынша тиімді болуын қамтамасыз ету үшін қызмет шекараларында тұрақты, жеңіл коллаборациялық өзара әрекеттесулер болады деп күтілуі тиіс. Біз тұтынушы және жеткізуші командалардың қажеттіліктерін қанағаттандыру үшін қызмет ауқымын реттеуге жететіндей «жеткілікті» коллаборация болғанын қалаймыз.

Егер ұйым жаңа X-as-a-Service (X қызмет ретінде — дайын қызмет түріндегі өзара әрекеттесу моделі) өзара әрекеттесуін орнатқысы келсе, дәл осы үлгі қолданылады: өміршең «қызмет ретінде» шекараларын белгілеу үшін тығыз жұмыс істеңіз, содан кейін шекаралардың тиімділігін тексеру үшін жеңіл коллаборацияны жалғастырыңыз.

Коллаборация режимі қолданбаның да, платформаның/инфрақұрылымның да инновация жылдамдығын арттыру үшін қолданылуы мүмкін, бұл әсіресе жаңа және дамып келе жатқан өнімдер немесе қызмет ұсыныстары үшін пайдалы.

Интерфейстер тұрақты әрі функционалды екені дәлелденгенге дейін екіұшты интерфейстер бойынша бірлесіп жұмыс істеңіз.

Тәжірибе мен эмпатияны арттыру үшін командалық өзара әрекеттесу режимін уақытша өзгертіңіз

Егер командалар арасындағы қазіргі өзара әрекеттесу режимі ұзақ уақыт бойы өзгермеген болса және жандандыруды қажет етсе, режимді уақытша өзгерту команда мүшелеріне тәжірибесін жаңартуға, өсіруге және басқа командаға деген эмпатияны (өзгенің жай-күйін түсіну қабілеті) арттыруға көмектеседі. Pivotal-дан Эван Уайли басқа командаға тәуелді топ туралы былай дейді: «бұл командалар жұптармен алмасуды ұйымдастыра алады және біреу мүмкіндікті аяқтау үшін бірнеше күнге немесе бір аптаға бір командадан екіншісіне ауысуы мүмкін». 10 Хайди Хелфанд айтқандай, «сіз өз ұйымыңыздағы [командалық өзгерістерді] әдейі жоспарлағанда, адамдарға жаңа оқу мүмкіндіктерін бересіз». 11

Өзгерістердің қатысушы адамдардың толық келісімімен, түсіністігімен және құлшынысымен саналы түрде (және, бәлкім, уақытша) жасалуы өте маңызды. Хайди Хелфандтың «Dynamic Reteaming» кітабы командалық өзгерістерді мүмкіндігінше кедергісіз жасау үшін көптеген пайдалы ұсыныстар береді.

Жіберілген мүмкіндіктер мен қате шекараларды анықтау үшін командалық өзара әрекеттесудегі қолайсыздықты пайдаланыңыз

Командалық өзара әрекеттесу үлгілерін жүйе дизайнындағы мәселелерді анықтау және оларға жауап беру үшін қолдануға болады, бұл код өндіріске (production) жетпес бұрын бағдарламалық қамтамасыз ету мәселелерін болжауға мүмкіндік береді.

Екі мысалды қарастырайық:

Күрделі ішкі жүйе командасынан есептеу компонентін «қызмет ретінде» тұтынуы тиіс stream-aligned (бизнес-ағынға бағытталған — құндылықты тікелей жеткізуші) команда компонентті пайдалануға тырысып, мессенджерлерде және жеке кездесулерде күрделі ішкі жүйе командасымен сөйлесуге көп уақыт жұмсайды.

Платформалық команда жаңа технологиялық тәсілді бағалау үшін stream-aligned командасымен тығыз жұмыс істеуді (коллаборацияны) күтеді, бірақ екінші командадан ешқандай кері байланыс алмайды.

Бірінші жағдайда біз X-as-a-Service өзара әрекеттесуі аз үйкелісті болуы керек және тек кездейсоқ немесе шектеулі байланысты қажет ететінін білеміз. Егер stream-aligned командасы компонентті пайдалануға көп сағат жұмсаса, бұл бірдеңенің дұрыс еместігінің белгісі: Компонент шекарасы дұрыс жерде ме? Компоненттің API-ы (бағдарламалық интерфейсі) нақты көрсетілген бе? Компонентті пайдалану оңай ма? Күрделі ішкі жүйе командасында UX (пайдаланушы тәжірибесі) немесе DevEx (әзірлеуші тәжірибесі) сияқты жетіспейтін құзыреттер бар ма?

Екінші мысалда платформалық команда stream-aligned командасымен белсенді байланысты күтеді, өйткені олар жаңа технологиялық шешімдерді бірге табу үшін коллаборация режимін пайдалануы керек. Бұл жағдайда командалар арасындағы байланыстың болмауы stream-aligned командасында бірдеңе дұрыс емес екенінің белгісі: Олар қазіргі кезеңде коллаборация режимін енгізудің маңыздылығын түсіне ме? Оларда бұл коллаборацияны жүзеге асыру үшін дағдылар жеткілікті ме, әлде басқа команда лайықтырақ па? Командалар қосқысы келетін шекара тым амбициялы ма?

Дон Рейнертсен айтқандай: «Біз рөлдер арасындағы ешкім жауапкершілік алмайтын "ақ дақтарға" (бос орындарға) сергек болуымыз керек». 12

Domain-driven design@@INLINE0@@ (оқиғаларды талдау — жүйедегі оқиғаларды бірлесіп картаға түсіру) және context mapping (контекст картасын жасау), тиісті шекараларды тезірек анықтауға көмектеседі. DDD туралы толығырақ 6-тараудан қараңыз.

Қорытынды: Командалық өзара әрекеттесудің үш нақты режимі

Бағдарламалық қамтамасыз етуді жасайтын және басқаратын тиімді, заманауи ұйым — бұл командалар арасындағы өзара әрекеттесудің жемісі. Дегенмен, көптеген ұйымдар жақсы командалық өзара әрекеттесудің қандай болатынын анықтай алмайды, бұл түсінбеушілікке, ренішке және тиімсіздікке әкеледі. Жай ғана жауапкершілік шекаралары бар командалар жиынтығын анықтау тиімді социотехникалық жүйені (адамдар мен технологияның өзара байланысқан кешені) құру үшін жеткіліксіз; командалар арасында саналы және тиімді өзара әрекеттесуді анықтау да қажет.

Бұл тарауда біз командалық өзара әрекеттесудің үш негізгі режимі ұйымдағы барлық командалық қатынастар үшін қажетті айқындықты қалай қамтамасыз ететінін көрдік:

(Коллаборация): екі команда жаңа үлгілерді, тәсілдерді және шектеулерді анықтау үшін белгілі бір кезеңде тығыз жұмыс істейді. Жауапкершілік ортақ, ал шекаралар бұлыңғыр, бірақ мәселелер тез шешіледі және ұйым жылдам үйренеді.

[X-as-a-Service] (X қызмет ретінде): бір команда басқа команда ұсынатын нәрсені (мысалы, қызметті немесе API-ды) «қызмет ретінде» тұтынады. Жауапкершіліктер нақты бөлінген және — егер шекара тиімді болса — тұтынушы команда жұмысты жылдам жеткізе алады. Қызметті ұсынатын команда өз қызметін тұтыну үшін мүмкіндігінше оңай етуге тырысады.

(Фасилитация): бір команда екінші командаға белгілі бір уақыт аралығында жаңа тәсілдерді үйренуге немесе енгізуге көмектеседі. Көмек көрсететін команда екінші команданы мүмкіндігінше тезірек дербес етуді мақсат етеді, ал көмек алатын команда оқуға ашық болады.

Нақты анықталған команда түрлері мен өзара әрекеттесу режимдерінің үйлесімі көптеген ұйымдар бастан кешіретін екіұштылық пен қақтығыстарды болдырмай, командаға негізделген ұйымдық тиімділікті арттырудың айқын әрі қуатты жолын ұсынады.

8. Команда құрылымдарын ұйымдық сенсорика арқылы дамыту

Дизайн . . . ешқашан мүмкін болатын ең жақсы нәрсе емес, [сондықтан] басым жүйе концепциясын өзгерту қажет болуы мүмкін. Демек, ұйымның икемділігі тиімді дизайн үшін маңызды. — Мел Конвей, «Комитеттер қалай ойлап табады? »

Заманауи ұйымдар реттеуші және нарықтық жағдайлардың тез өзгеруіне, клиенттер мен пайдаланушылардың сұраныстарына, жылдам өзгеретін трендтерге және технологиялық мүмкіндіктердің күшті ауысуына жауап беруде үлкен қиындықтарға тап болады. Табысты заманауи ұйым бейімделуге арналған дизайн арқылы осы өзгеретін жағдайларға байланысты формасын өзгерте алуы керек. Сондықтан, бағдарламалық жүйелерді құру және басқару үшін заманауи ұйымдарды жобалау кезінде ең маңыздысы ұйымның формасы емес, жаңа қиындықтар туындаған кезде ұйымды бейімдеу және өзгерту үшін қолданылатын шешім қабылдау ережелері мен эвристикалар (тәжірибеге негізделген шешім табу әдістері); яғни бізге тек ұйымды ғана емес, дизайн ережелерінің өзін жобалау қажет.

Бұл тарауда Конвей заңының нақты салдарын, «команда-бірінші кезекте» шешім қабылдауды және 5-тарауда сипатталған төрт негізгі командалық топологияны ескере отырып, заманауи, бағдарламалық қамтамасыз етуге негізделген ұйымдарға арналған дизайн ережелерінің жиынтығы қарастырылады.

Әр командалық өзара әрекеттесу үшін қаншалықты коллаборация қажет?

7-тарауда көргеніміздей, командалар үшін екі негізгі өзара әрекеттесу режимі бар: әртүрлі дағдылары бар екі команда бір нәрсе бойынша жұмыс істеу үшін бірігетін [коллаборация] және бір команда ұсынатын, ал екіншісі тұтынатын, және коллаборацияның көп қажеті жоқ [X-as-a-Service]. Ешбір режим екіншісінен жақсы немесе жаман емес екенін түсіну маңызды; олар жай ғана жұмыстың әртүрлі түрлері үшін пайдалы.

Коллаборация жылдам жаңалықтар ашуға (discovery) және жұмысты біреуге тапсыру (hand-off) мен кідірістерді болдырмауға жақсы, бірақ оның кемшілігі — когнитивтік жүктеменің (ақыл-ойға түсетін күш) жоғары деңгейі. Коллаборацияның әр тарапы екінші тарап туралы көбірек түсінуі керек, сондықтан команда мүшелері бастарында көбірек ақпарат сақтауы қажет. Дегенмен, егер ұйым өте жылдам инновация жасағысы келсе, бұл «коллаборация салығы» өзін ақтайды.

Керісінше, X-as-a-Service режимінде қай команданың неге иелік ететіні туралы толық айқындық бар. Сондай-ақ әр команда үшін азырақ менталды контекст қажет, сондықтан қарым-қатынастың әр жағындағы когнитивтік жүктеме төменірек болады. Жалпы алғанда, командалар X-as-a-Service режимінде коллаборацияға қарағанда баяу инновация жасайтын сияқты, өйткені олардың өзара әрекеттесуі мүмкіндіктерді шектейтін таза API арқылы реттеледі және анықталады. X-as-a-Service болжамды жеткізу жылдам жаңалық ашудан маңыздырақ болатын жағдайлар үшін тиімді.

Бұл тәсіл «Accelerate» кітабында ұсынылған жоғары өнімді ұйымдарды зерттеудің соңғы нәтижелерімен расталады:

«Архитектуралық мүмкіндіктер бойынша жоғары ұпай жинайтын командаларда [бұл тікелей жоғары өнімділікке әкеледі], жеткізу командаларына өз жұмысын аяқтау үшін өзара байланыс аз қажет болады және жүйенің архитектурасы командаларға басқа командаларға тәуелді болмай-ақ өз жүйелерін сынауға, орналастыруға және өзгертуге мүмкіндік беретіндей етіп жасалған. Басқаша айтқанда, архитектура мен командалар "еркін байланысқан" (loosely coupled)». 1

Командалар арасындағы кез келген тұрақты коллаборацияны нақты құнды қызметпен шектеңіз.

Коллаборация қымбатқа түседі. Қажетсіз коллаборация, әсіресе негізгі платформалардағы немесе мүмкіндіктердегі кемшіліктерді жасыра алатындықтан, өте қымбат. Сондықтан кез келген тұрақты коллаборациялық қызмет құнды жаңалық ашу, құнды мүмкіндіктерді құру немесе құнды кемшіліктерді толтыру қызметі ретінде негізделуі тиіс.

Жоғары өнімді ұйым деңгейіне жету үшін әр командалық өзара әрекеттесуге қанша коллаборация сәйкес келетінін шешу маңызды. А командасы В командасының қызметтерін аз күш жұмсап тұтына алуы керек пе? Егер олар солай істеуі керек болса, бірақ әлі мүмкін болмаса, В командасының API-ын жақсырақ анықтау және А командасына оны «қызмет ретінде» тұтынуға мүмкіндік беру үшін А командасы В командасымен аз уақыт (Үш апта? Үш ай? ) бірге жұмыс істеуі керек пе? Коллаборация А және В командалары арасындағы жүйенің әр бөлігінің шекараларын бұлыңғырлататынын ескере отырып, командалар нақты не бойынша бірлесіп жұмыс істеуі керек?

Кейс-стади: uSwitch-те ұйымдық өзгерістерді енгізу үшін Kubernetes-ті қолдану

Пол Инглс, uSwitch инженерия бөлімінің басшысы

Тұтынушылар рейтингі қызметі uSwitch-тегі Пол Инглс күрделілік біртіндеп артқан көптеген жылдардан кейін, әзірлеушілер (Dev) командалары тиімді болу үшін негізгі технологиялық стек туралы тым көп білуге мәжбүр болғанын қалай түсінгендерін сипаттайды.

Әзірлеушілер командасының когнитивтік жүктемесін барынша азайтатын платформалық абстракция (күрделілікті жасыратын жеңілдетілген интерфейс) қажет болды. 2 Олар осы ауысымға көмектесу үшін жаңа бұлттық инфрақұрылым абстракциясын (Kubernetes деп аталатын) енгізді: «Біз Kubernetes-ті пайдаланғымыз келгендіктен ұйымымызды өзгерткен жоқпыз; біз ұйымымызды өзгерткіміз келгендіктен Kubernetes-ті пайдаландық». 3

Жеткізу мүмкіндігіндегі тиімді өзгерісті мәжбүрлеу үшін командалық өзара әрекеттесудегі өзгерісті осылайша саналы түрде пайдалану — күшті, стратегиялық технологиялық көшбасшылықтың мәні болып табылады.

Жаңа тәжірибелерді үйрену мен енгізуді жылдамдату

Екі команданың өзара әрекеттесу режимін саналы түрде коллаборацияға өзгерту жаңа тәжірибелер мен тәсілдерді жылдам үйрену және енгізу үшін қуатты ұйымдық құрал бола алады. Егер бір команданың құнды тәжірибелер жиынтығында — мысалы, тестілеуді автоматтандыруда — үлкен тәжірибесі болса және бұл екінші командаға пайда әкелетін болса, онда екі команданы бірнеше айға коллаборация режимінде біріктіру командалар арасындағы API-ды жақсартуға және анықтауға көмектесіп қана қоймай, сонымен қатар екінші команданың мүмкіндіктерін сапалы жаңа деңгейге көтереді. Бұл «саналы коллаборация» әсіресе екі топтың өз технологияларына қатысты қалыптасқан тәжірибелерге байланысты бұрынғы тәжірибелері мүлдем басқаша болған жағдайда пайдалы.

  1. 1-суретте көрсетілгендей, бұлтқа негізделген бағдарламалық қамтамасыз етуді құруға дағдыланған және IoT (заттар интернеті — интернетке қосылған құрылғылар желісі) құрылғыларынан деректер алатын бұлттық метрикаларды жинау және талдау бағдарламасын жасап жатқан команданы қарастырайық. Бұл команданы тәжірибесі әлдеқайда төмен деңгейлі (low-level) болып келетін embedded (ендірілген — құрылғы ішіне орнатылған) бағдарламалық қамтамасыз ету мамандарының командасымен тығыз коллаборацияға біріктіру екі командаға да осы ендірілген/бұлттық технологиялық бөліністегі қиындықтарды жақсырақ түсінуге көмектесіп қана қоймай, сонымен қатар тестілеуді автоматтандыру бойынша пайда әкеледі.
Image segment 1042
  1. 1-сурет: Бұлттық және ендірілген командалар арасындағы коллаборация

Екі команда («бұлттық» және «ендірілген») тәжірибе алмасу және хабардарлықты арттыру үшін бірлесіп жұмыс істейді. Нәтижелер болашақ командалық өзара әрекеттесу нұсқалары туралы түсініктің артуын қамтиды: (1) бұлттық бағдарламалық қамтамасыз етуді ендірілген команда пайдаланатын платформа ретінде қарастыру, (2) ендірілген құрылғыларды бұлттық команда пайдаланатын платформа ретінде қарастыру немесе (3) тығыз коллаборацияны жалғастыру.

Бұлттық команда тестілеу орталарын өткінші және динамикалық ретінде қарастыратын шығар және ендірілген командаға тестілеуге икемді тәсіл қолдануға көмектесе алады. Өз кезегінде, ендірілген команда бұлттық командаға ендірілген IoT құрылғыларының жады мен өңдеу шектеулерін түсінуге және олардың кодын және протоколдарын шектеулі аппараттық құралдарға жақсырақ сәйкестендіруге көмектесе алады.

Бұл коллаборация кезеңі ұйымға бұлттық бағдарламалық қамтамасыз етуді немесе ендірілген құрылғыларды платформа ретінде (осы кітапта қолданылатын мағынада) қарастыруға болатын-болмайтынын және платформа жеткізуші команданың тиісті мінез-құлқын бағалауға көмектеседі. Балама нұсқа, әрине, командалардың коллаборацияны жалғастыруы болып табылады, бәлкім, көмекші (enabling) команданың үйлестіруімен. Коллаборация жалғасқан сайын, командалар өздерінің өзгерістер қарқыны біртіндеп сәйкес келетінін түсінуі мүмкін, бұл жағдайда олар екеуі де stream-aligned болатын «жұптасқан» командалар жиынтығын құруды шешуі мүмкін.

Кейс-стади: TransUnion-дағы командалық топологиялардың дамуы (2-бөлім)

Дейв Хотчкисс, TransUnion платформа құрастыру менеджері

(4-тараудан жалғасы)

2014 жылы трансформациямыздың басында біз әзірлеу (Dev) және пайдалану (Ops) топтарының арасында үлкен алшақтық бар екенін түсіндік. Біз евангелистердің (насихаттаушылардың) жеке командасы Dev және Ops топтарын жақындастыруға көмектесетінін білдік; бірақ біздің жағдайда алшақтық өте үлкен болғандықтан, екі команданы пайдалануды шештік.

Dev тобынан біз жүйені құрастыру (SB) командасын, ал Ops тобынан платформаны құрастыру (PB) командасын құрдық. Содан кейін біз SB және PB командаларының тығыз коллаборациясына назар аудардық, бұл барлық Dev және Ops командаларын коллаборацияға тартудан гөрі басында шешілуі оңайырақ мәселе болды (158-беттегі 8. 2-суретті қараңыз).

Image segment 1052
  1. 2-сурет: TransUnion-дағы жүйені құрастыру және платформаны құрастыру командасы

Dev тобынан (SB) және Ops тобынан (PB) келген командалар тығыз өзара әрекеттесуді зерттеуде.

Біз DevOps командалық топологияларының үлгілерінен шабыт алып, команда эволюциясының хронологиясын сыздық. Біз басында Dev командаларының хабардарлығына немесе пайдалану мүмкіндігіне (operability) назар аударуды күттік, сондықтан біздің бастапқы командалық эволюциямызда SB командасы Dev командаларымен және PB командасымен тығыз коллаборация жасады. Бұл орналастыруды автоматтандыру, метрикалар, логтар және басқа да пайдалану аспектілері сияқты нәрселерді жақсартуға шынымен көмектесті (158-беттегі 8. 3-суретті қараңыз).

Image segment 1056
  1. 3-сурет: TransUnion-дағы жүйені құрастыру және платформаны құрастыру командаларының коллаборациясы

SB және PB екі командасы тығыз бірлесіп жұмыс істеуде.

2014 жылы біз SB және PB командаларын он екі айдың ішінде жақсы көмекші (enabling) командаға айналдырамыз деп күткен едік. Іс жүзінде бұл ауысу біз бастапқыда ойлағаннан әлдеқайда ұзаққа созылды (үш жылға ұзақ! ), өйткені біз қызметтерімізді Azure-ге көшіре бастадық; бірақ 2018 жылдың басына қарай біз бұған қол жеткіздік (158-беттегі 8. 4-суретті қараңыз). Бизнес үшін артықшылықтар өте анық болды: қауіпсіз, тұрақты өндірістік өзгерістер, орналастыру қателерінің азаюы және өзгерістердің жақсырақ қадағалануы (TransUnion жұмыс істейтін жоғары реттелетін қаржы секторында маңызды).

Image segment 1060
  1. 4-сурет: TransUnion-да біріктірілген жүйені құрастыру және платформаны құрастыру командалары

SB және PB командалары біріктіріліп, Dev және Ops-ты жақындастыруға көмектесті.

2018 жылдың соңына қарай біз одан да әрі кетіп, ақырында SB командасын Dev командаларына, ал PB командасын Ops командаларына қайта қостық, бұл пайдалану деңгейіндегі жауапкершілік пен хабардарлықты арттырды, ал Ops тобына Azure Cloud-та жұмыс істейтін кейбір стратегиялық инфрақұрылыммен негізгі платформаны басқаруды қалдырды (8. 5-суретті қараңыз).

Image segment 1064
  1. 5-сурет: TransUnion-да Dev және Ops-қа қайта қосылған жүйені құрастыру және платформаны құрастыру командалары

SB және PB командалары Dev және Ops-қа қайта қосылып, Platform-as-a-Service (платформа қызмет ретінде) ұсынады.

Бұл командалардың эволюциясы болуы керек екенін ертерек түсінуіміз біздің жетістігіміз үшін өте маңызды болды. Адамдар бәріне уақыт керек екенін білді, ал нақты, бірақ өзгеретін жауапкершілік шекаралары адамдарға процестегі өз рөлін түсінуге көмектесті.

Командалық топологиялардың тұрақты эволюциясы

Коллаборация қымбат, бірақ жаңа тәсілдерді ашуға жақсы, ал X-as-a-Service болжамды жеткізуге жақсы; сондықтан командаларды бағдарламалық жүйенің әр аймағының және әр команданың қажеттіліктеріне сәйкес құруға болады. Бірақ талаптар немесе жұмыс контексті өзгергенде не болады?

Әртүрлі командалардың өзара әрекеттесу режимдері командалардың неге қол жеткізуі керек екеніне байланысты тұрақты түрде өзгереді деп күтілуі тиіс. Егер команда қазіргі уақытта басқа команда басқаратын технологиялық стектің немесе логикалық домендік модельдің бір бөлігін зерттеуі керек болса, онда олар белгілі бір уақыт кезеңінде коллаборация режимін пайдалануға келісуі керек. Егер команда басқа командамен жаңа тәсілдерді сәтті ашқаннан кейін жеткізу болжамдылығын арттыруы керек болса, онда ол командалар арасындағы API-ды анықтауға көмектесу үшін коллаборация режимінен X-as-a-Service режиміне ауысуы керек.

Осылайша, командалар неге қол жеткізуі керек екеніне байланысты белгілі бір уақыт аралығында әртүрлі өзара әрекеттесу режимдерін қабылдауы керек. Әрине, Конвей заңы бізге коллаборация режимінің бөлігі ретінде жүріп жатқан ізденістер мен жылдам оқу кезінде бағдарламалық жасақтаманың жауапкершіліктері мен архитектурасы командалар X-as-a-Service арқылы өзара әрекеттескен кезбен салыстырғанда көбірек «араласып» кететінін айтады. Осы бұлыңғырлықты алдын ала болжай отырып, команда X-as-a-Service режиміне ауысқан кезде API-ды қатайту арқылы кейбір қолайсыз командалық өзара әрекеттесулерден («API нашар жобаланған» және т. б. ) аулақ болуға болады.

Командалық топологиялардың тығыз коллаборациядан шектеулі коллаборацияға, содан кейін X-as-a-Service режиміне өтуін 8. 6-суреттен көруге болады (160-бетті қараңыз).

Image segment 1073
  1. 6-сурет: Командалық топологиялардың эволюциясы

Командалық топологиялардың тығыз коллаборациядан шектеулі коллаборацияға (ізденіс), содан кейін қалыптасқан, болжамды жеткізу үшін X-as-a-Service режиміне дейінгі эволюциясы.

Бастапқы тығыз коллаборация технология мен өнім ізденіс арқылы жақсырақ түсінілген сайын азырақ нәрселер бойынша шектеулі коллаборацияға айналады және өнім немесе қызмет шекарасы көбірек қалыптасқаннан кейін X-as-a-Service режиміне ауысады.

Үлкенірек кәсіпорында бұл «ізденістен қалыптастыруға дейінгі» үлгі дамудың әртүрлі кезеңдеріндегі әртүрлі командалармен үнемі болып тұрады деп күтіледі. 8. 7-суретте көрсетілгендей, бір уақытта бірнеше ізденіс әрекеттері жүруі керек, ал басқа командалар нәрселерді қызмет ретінде тұтыну үшін нақты анықталған API-ларды пайдаланады (160-бетті қараңыз).

Image segment 1078
  1. 7-сурет: Кәсіпорындағы командалық топологиялардың эволюциясы

1-команда платформалық командамен коллаборацияны жалғастырып, жаңа технологияларды пайдаланудың жаңа үлгілері мен жолдарын ашады. Бұл ізденіс әрекеті ақырында 2-командаға платформалық командамен X-as-a-Service қарым-қатынасын орнатуға мүмкіндік береді. Кейінірек 3-команда және одан кейінгілер платформалық командамен тығыз коллаборация жасамай-ақ, оны қызмет ретінде пайдаланып, платформаның кейінгі нұсқасын қабылдайды.

Командалық өзара әрекеттестік пен топологияның дамуы

Кейбір ұйымдарда, әсіресе инновация қарқыны өте жоғары болса, командалар тұрақты түрде ынтымақтастық режимінде жұмыс істей алады. Басқа ұйымдар көбінесе X-as-a-Service (X-қызмет-ретінде — белгілі бір функцияны дайын қызмет ретінде тұтыну моделі) форматына бейім келеді, өйткені олардың мәселелер аясы нақты анықталған және негізінен жақсы түсінікті бизнес-міндеттерді орындауы қажет. Мұндағы түйінді түйткіл — командаларға қол жеткізгісі келетін мақсаттарына байланысты әртүрлі өзара әрекеттесу режимдері қажет.

Ақыр соңында, командалық әрекеттестіктің белгілі бір себептермен ынтымақтастық пен X-as-a-Service режимдері арасында ауысуын күту және ынталандыру арқылы ұйымдар <span data-term="true">ептілікке (agility)</span> (өзгерістерге жылдам бейімделу қабілеті) қол жеткізе алады.

Ұйымдағы командалар арасындағы өзара байланысты нақты анықталған және динамикалық күйде ұстау Джефф Суссна сыртқы және ішкі контексттер үшін «үздіксіз дизайн қабілеті» деп атайтын нәрсенің негізін қалайды. Бұл динамикалық қайта құру негізгі стратегиялық мүмкіндікті қамтамасыз етеді. Ұйымдық өзгерістер бойынша сарапшы Джон Коттер былай дейді: «Мен стратегияны «іздеу, орындау, үйрену және өзгертудің» үздіксіз процесі ретінде қарастырамын... Ұйым өзінің стратегиялық дағдыларын неғұрлым көп жаттықтырса, ол жоғары бәсекелестік ортаға соғұрлым бейімделе түседі».

Команданың мақсаты мен контекстіне сәйкес келуі үшін ұйымның әртүрлі бөліктерінде әртүрлі уақытта әртүрлі команда топологияларын дамытыңыз.

Біз командалық өзара әрекеттестіктің уақыт өте келе олардың іс-әрекетіне байланысты айқын дамуы керектігін көрдік. Зерттеу кезеңінде белгілі бір деңгейдегі ынтымақтастық күтіледі, бірақ тығыз ынтымақтастық көбінесе бүкіл ұйым бойынша масштабталмайды. Мақсат — көптеген командалар жай ғана қызмет ретінде пайдалана алатын, нақты анықталған және қабілетті платформаны құру болуы керек.

Жаңа тауарлық қызметтер мен платформалар қолжетімді болған сайын, ұйымдар зерттеу қызметінен болжамды жеткізуге (delivery) көшуді мақсат етуі тиіс. Бұл ұйымдар үшін мынаны білдіреді: әртүрлі командалардағы адамдардың тәжірибесі сол уақытта немен айналысатынына байланысты әртүрлі болады. Барлық командалар басқа командалармен бірдей жолмен әрекеттеспейді және біздің қалайтынымыз да осы.

Ұйымның әртүрлі бөліктеріне арналған әртүрлі топологиялар мен командалық әрекеттестіктер олардың не істеп жатқанына және неге қол жеткізгісі келетініне байланысты әртүрлі уақытта дамуы керек. Ұйым өзіне мынадай сұрақ қоюы тиіс: «Біз жаңа нәрселерді ашуға тырысамыз ба? Оларды қаншалықты тез ашуымыз керек? » Кейде адамдарды бір үстелге немесе бір ғимараттың бір қабатына жинау қажеттілігі туындауы мүмкін, бұл қажетті деңгейдегі ынтымақтастықты ынталандыратын жақындықты тудырады. Басқа уақытта командалар API шекарасын (жүйелер арасындағы бағдарламалық интерфейс түйісуі) нығайтуға көмектесу үшін бөлек қабаттарға немесе тіпті бөлек ғимараттарға ауыса алады; қарым-қатынастағы аздаған қашықтық бұған көмектеседі (кеңсе макеттері туралы толығырақ 3-тарауды қараңыз).

Ұйым ішіндегі командалық топологиялар күн сайын немесе апта сайын емес, бірнеше ай ішінде баяу өзгереді. Бірнеше ай ішінде командалық әрекеттестік режимдеріндегі өзгерістерді қолдау керек және соған сәйкес бағдарламалық жасақтама архитектурасында да өзгеріс күтілуі тиіс.

Кейс-стади: Sky Betting & Gaming — Платформалық фича-командалар (2-бөлім) Майкл Майбаум, Sky Betting & Gaming бас архитекторы (5-тараудан жалғасы)

Платформаның дамуы шешуші нүктеге жетті және біз таңдау жасауымыз керек болды: не команданы таратып, қазіргі салыстырмалы түрде үлкен өнім командаларының әрқайсысын өздерінің конфигурациясын басқаруға жауапты етуіміз керек еді, не сол командаларды тиімдірек қолдаудың — оларға жоғары сапа мен сенімділікпен жеткізуді жеделдетуге мүмкіндік берудің жолын табуымыз керек еді.

Біз «Platform Evolution» командасы басқа командалар тұтынатын қызметтер ретінде өз жұмыстарын жобалау және ойластыру үшін қызметтері мен қолдау мүмкіндіктері бар өнім командасына айналуы керек деп шештік. Қысқасы, команда бизнеске құндылық әкелетін фичаларға (функцияларға) назар аударуы керек болды.

«Platform Evolution» командасы «Platform Services» болып өзгерді және мүлдем басқа дүниетаныммен жұмыс істей бастады. Олардың миссиясы — өз тұтынушыларының (басқа командалардың) қажеттіліктеріне негізделген функциялар мен мүмкіндіктер арқылы оларды қолдауға арналған қызметтерді ұсыну болды. Басқаша айтқанда, «Platform Services» өнімге бағытталған командаға айналды.

Біздің Chef монолитін (біртұтас, ажырамас бағдарламалық құрылым) бөлшектеу жұмысымен қатар, «Platform Services» командаларға орталықтандырылған қосымша құндылық қызметтерін, соның ішінде AWS интеграцияларын, құрастыру және тестілеу орталарын, логтау платформаларын және т. б. ұсынатын бірқатар тұтынушыға бағытталған сервистерді әзірледі. Әр жағдайда «Platform Services» командаларға қажетті іргелі мүмкіндікті алып (оны олар теориялық тұрғыдан өздері де жасай алар еді), оның орнына басқарылатын қызмет баламасын ұсынды. «Platform Services» стандартты құралды SB&G ортасында құндырақ және пайдалануды жеңілдету үшін жеткізу командаларына қажетті арнайы бейімдеулерді жасауға уақыт бөлді; осылайша, бизнесті көптеген командаларда бұл шешімдерді қайталау шығындарынан құтқарды.

Осы кезеңде «Platform Evolution/Services» ішкі бағдарламалық жасақтама командаларымен тығыз байланыста болды. Жауапкершіліктің тиісті шекаралары туралы, әсіресе біздің инфрақұрылымдық команда мен «Platform Services» арасында жиі пікірталастар мен қақтығыстар болып тұратын. «Platform Services» файрвол және жүктеме теңестіргішін автоматтандыру, AWS-ті қолдануды қолдау құралдары, құпияларды басқару және PKI сияқты нәрселерді жасап жатты, бірақ көбінесе инфрақұрылымдық командамен арадағы ұйымдық шекараларға тап болатын. Инфрақұрылым «платформалық қабатта» не нәрсеге жауапты болуы керек? Және — сәл нәзік мәселе — олар өнімдерді қолдайтындай етіп ұйымдастырылған ба? деген сұрақ туындады.

Бұл әңгіме басталғаннан кейін, оның біздің инфрақұрылымдық команданың қалай ұйымдасуы керектігі туралы ішкі талқылауларымен ұштасатыны белгілі болды. Инфрақұрылым бизнестегі жеткізу (delivery) мен пайдалану (operations) арасында нақты бөлінісі бар соңғы маңызды функция болатын және жаңа нәрсені байқап көруге ниет білдірілді. Инфрақұрылым өнімдер мен қызметтер айналасында қайта ұйымдастырылды; шағын командалар бизнестегі тұтынушылары үшін оларды жақсартуға ұмтыла отырып, өзара байланысты нәрселердің толық өмірлік цикліне иелік етті. Бұл трансформацияның бөлігі ретінде «Platform Services»-тің қай жерге жақсы сәйкес келетіні де белгілі болды — ол инфрақұрылым мен технологияның қалған бөлігі арасындағы бір команда емес, инфрақұрылым функциясының бөлігі ретінде қарастырылды.

Жүктеме теңестіргіші және файрволды автоматтандыру сияқты кейбір қызметтер желіге қатысты жасақтарымыздың (squads) бірінен табиғи орын тапса, кейбіреулері екі «Platform Services» жасағында қалды: «Platform Engineering» және «Delivery Engineering». Біз бұрын мұндай мүмкіндігі болмаған инфрақұрылымдық жасақтарға автоматтандыру инженерлерін қостық және команданың кеңірек бизнеспен байланысын қолдау үшін инфрақұрылымдық өнім функциясын дамыттық.

Қазір бізде тұтынушыға бағытталған өнім фича-командалары сияқты инфрақұрылымдық-платформалық фича-командалар бар; бұл өзгеріс оңай немесе қиындықсыз болмаса да, қатысу деңгейінен, иелік ету сезімінен және бизнестің басқа салаларымен үйкелістің азаюынан бұл өзгерістің трансформациялық болғаны анық. Бизнестің басқа салалары үшін енді кіммен сөйлесу керектігі, ол команданың не істеп жатқаны және неге істеп жатқаны түсінікті, ал бұрын мұның бәрі жай ғана «инфрақұрылым» болатын.

Жоғары тиімділік үшін командалық топологияларды біріктіру

Кез келген уақытта ұйым ішіндегі әртүрлі командалардың әртүрлі әрекеттестік пен ынтымақтастық қажеттіліктері болады. Командалық топологиялардың әртүрлі түрлері бір мезгілде болады деп күтілуі керек. Командалар арасында белгілі бір дәрежеде ынтымақтастық күтіледі, бірақ ынтымақтастық көбінесе бүкіл ұйым бойынша масштабталмайды; ал командалар саны артқан сайын нәрселерді қызмет ретінде тұтыну тиімдірек болады.

Мысалы, бізде бағдарламалық жүйенің әртүрлі бөліктерін құрастыратын төрт ағынға бағытталған (stream-aligned) (бизнес-құндылық ағынына толық жауапты) команда бар делік. Командалардың бірі платформалық командамен жаңа логтау технологиясын зерттеу (discovery) жұмыстарын жүргізіп, ынтымақтастық режимінде болуы мүмкін, ал қалған үш команда платформаны жай ғана X-as-a-Service режимінде тұтынады.

Бір диаграммада бұл өзара әрекеттесулер былай көрінуі мүмкін: бірінші ағынға бағытталған команда платформалық командамен ынтымақтастық орнатады — командалар жаңа технологиялық тәсілдер бойынша бірлесіп жұмыс істейді және жаңа әдістерді тез үйренеді. Ағынға бағытталған командаға көмекші (enabling) команда қолдау көрсетеді. Қалған үш ағынға бағытталған команда платформаны қызмет ретінде қарастырады және оларға да көмекші команда қолдау көрсетеді. Бұл әртүрлі әрекеттестіктер ағынға бағытталған командалар атқарып жатқан жұмыстың сипатын және олар құрастырып жатқан бағдарламалық жасақтамадағы әрекеттестік түрлерін көрсету үшін бар.

Бұл мысалда бір мезгілде командалық әрекеттестіктің үш түрі орын алуда: ағынға бағытталған командалар көмекші командамен жеңілдетуші (facilitating) әрекеттестікті бастан кешуде, ал төрт ағынға бағытталған команданың үшеуі платформамен X-as-a-Service әрекеттестігін күтеді, ал бір ағынға бағытталған команда платформалық командамен ынтымақтастық әрекеттестігі арқылы зерттеу жұмыстарын жүргізеді.

Өзара әрекеттесу режимдері анық және айқын болғандықтан және олар нақты мақсаттарға сәйкестендірілгендіктен, ұйымдағы әртүрлі командалардағы адамдар басқа командалармен неге әртүрлі тәсілдермен әрекеттесетінін түсінеді. Бұл командалар ішіндегі белсенділікті арттыруға және командаларға өзара әрекеттесуден туындаған кез келген үйкелісті (friction) бірқатар мәселелерді анықтауға арналған сигнал ретінде пайдалануға мүмкіндік береді. Біз осы сигналдардың кейбірін келесі бөлімде қарастырамыз.

Командалық топологиялардың дамуына түрткі болатын жағдайлар

5-тараудағы кеңестерді пайдалана отырып, ұйымның құрылымын белгілі бір уақыттағы төрт негізгі командалық топологияға сәйкестендіру өте оңай, бірақ команда құрылымын дамыту уақыты келгенін анықтау үшін қажетті ұйымдық сана-сезімге ие болу жиі қиынға соғады. Ұйым ішіндегі командалық топологияларды қайта жобалауға түрткі болатын кейбір жағдайлар бар. Оларды тануды үйрену ұйымға өз қажеттіліктеріне қарай бейімделуді және дамуды жалғастыруға көмектеседі.

Түрткі: Бағдарламалық жасақтама бір команда үшін тым үлкен болып кетті

Стартап компания он бес адамнан (Данбар саны) асып өседі. Басқа командалар бір команданың өзгерістер енгізуін күтумен көп уақыт өткізеді. Жүйедегі белгілі бір компоненттерге немесе жұмыс процестеріне енгізілетін өзгерістер, тіпті олар бос емес немесе демалыста болса да, үнемі бір адамдарға жүктеледі. Команда мүшелері жүйелік құжаттаманың жоқтығына шағымданады.

Сәтті бағдарламалық өнімдер көбірек функциялар қосылып, көбірек тұтынушылар өнімді қабылдаған сайын үлкейе береді. Бастапқыда өнім командасындағы әрбір адамның код базасы туралы кең түсінігі болуы мүмкін болса да, уақыт өте келе бұл қиындай түседі.

Бұл команда ішінде жүйенің әртүрлі компоненттеріне қатысты (көбінесе айтылмаған) мамандануға әкелуі мүмкін. Белгілі бір компонентке немесе жұмыс процесіне өзгерістерді қажет ететін сұраныстар үнемі сол команда мүшесіне (мүшелеріне) жүктеледі, өйткені олар басқа команда мүшелеріне қарағанда жылдамырақ жеткізе алады.

Бұл маманданудың күшею циклі — жергілікті оңтайландыру («осы сұранысты тез орындау»), ол жоспарлау «қазір істеуіміз керек ең басым жұмыс қандай» емес, «кім нені біледі» деген ұстаныммен жасалғанда, команданың жалпы жұмыс ағынына теріс әсер етуі мүмкін. Маманданудың бұл деңгейі жеткізудегі кедергілерді тудырады («The Phoenix Project» кітабында баяндалғандай және «The DevOps Handbook» кітабында түсіндірілгендей). Тұрақты қайталанатын аспект жеке мотивацияға да теріс әсер етуі мүмкін.

Тағы бір аспект — команда жүйенің тұтас көрінісіне ие болмай қалғанда орын алады; осылайша, ол жүйенің тым үлкен болып кеткенін түсіну үшін өзіндік сананы жоғалтады. Код жолдары немесе функциялар саны бойынша жүйе көлемі арасында белгілі бір байланыс болғанымен, мұнда ең маңыздысы — жүйедегі өзгерістерді тиімді басқаруға арналған когнитивті сыйымдылықтың (ақпаратты өңдеу қабілетінің шегі) шектелуі.

Түрткі: Жеткізу қарқыны (Cadence) баяулап барады

Команда мүшелері өзгерістерді шығару бұрынғыдан ұзағырақ уақыт алатынын сезеді. Команданың жылдамдығы (velocity) немесе өткізу қабілетінің метрикалары бір жыл бұрынғымен салыстырғанда төмендегенін көрсетеді. Команда мүшелері жеткізу процесі бұрын қарапайым және қадамдары аз болғанына шағымданады. Орындалып жатқан жұмыс көлемі (work in progress) үнемі артып отырады, көптеген өзгерістер басқа команданың әрекетін күтуде тұрады.

Ұзақ өмір сүретін, жоғары өнімді өнім командасы бірлесіп тиімдірек жұмыс істеу жолдарын тауып, жеткізудегі кедергілерді жойған сайын өздерінің жеткізу қарқынын тұрақты түрде жақсарта алуы керек. Дегенмен, бұл командалардың өркендеуінің алғышарты — оларға өнімнің бүкіл өмірлік цикліне автономия беру. Бұл басқа команданың жаңа инфрақұрылым құруын күту сияқты сыртқы командаларға қатаң тәуелділіктің болмауын білдіреді. Ішкі платформа арқылы жаңа инфрақұрылымды өзіне-өзі қызмет көрсету (self-serve) мүмкіндігі — жұмсақ тәуелділік (егер өзіне-өзі қызмет көрсетуді платформалық команда қамтамасыз етсе).

Автономияның бұл деңгейіне көптеген ұйымдарда қол жеткізу қиын. Шын мәнінде, керісінше жағдайды жиі көруге болады: командалар арасында жаңа қатаң тәуелділіктерді енгізу арқылы автономияны азайту. Бұл барлық өнімдерді тестілеуді орталықтандыру және теориялық тұрғыдан тестілеушілерге жұмысты тиімдірек бөлу үшін сапаны қамтамасыз ету (QA) командасын құру арқылы тестілеу аясын арттыру әрекеті болуы мүмкін. Мұндай мақсат мақтауға тұрарлық болса да, бұл командалық дизайн «функционалдық силосты» (QA) тудырады, бұдан былай бағдарламалық жасақтаманы жеткізетін барлық командалар QA командасының олардың жаңартуларын тексеруге бос болуын күтуі керек болады.

DevOps-тың пайда болуы 2010 жылдары әзірлеу (development) және пайдалану (operations) командалары арасындағы бөліністі көрсетті, бірақ бұл — өнімді жеткізудің өмірлік цикліне араласатын барлық басқа силостар үшін де бірдей мәселе.

Жеткізу қарқыны жинақталған техникалық қарыздың кесірінен де баяулауы мүмкін екенін ескеріңіз. Бұл сценарийде код базасының күрделілігі сондай деңгейге жетуі мүмкін, тіпті шағын өзгерістер де қымбатқа түседі және жиі регрессияларды (жаңа қателерді) тудырады. Бұл жеткізілімдерді әзірлеу және тұрақтандыру код базасы алғаш жасалған кезге қарағанда әлдеқайда ұзақ уақыт алатынын білдіреді.

Түрткі: Көптеген бизнес-қызметтер негізгі қызметтердің үлкен жиынтығына сүйенеді

Ағынға бағытталған командалардың өз қызмет аясындағы толық (end-to-end) ағынды көру мүмкіндігі шектеулі. Ішкі жүйе интеграцияларының саны мен күрделілігіне байланысты өзгерістердің бірқалыпты және жылдам ағынына қол жеткізу қиындайды. Қолданыстағы қызметтер мен ішкі жүйелер жиынтығын «қайта пайдалану» әрекеттері барған сайын қиындай түседі.

Қаржы, сақтандыру, заң және мемлекеттік сектор сияқты кейбір жоғары реттелетін салаларда бірнеше түрлі жоғары деңгейлі бизнес-қызметтер бөлек негізгі қызметтердің, API-лердің немесе ішкі жүйелердің үлкен жиынтығына сүйенуі мүмкін. Мысалы, сақтандыру компаниясына жаңартылған сақтандыру бағасын ұсыну үшін зауыт машиналарына ұзақ мерзімді физикалық тексерулер жүргізу қажет болуы мүмкін; немесе банкке жаңа банк шотын ашпас бұрын мекенжайды растайтын құжаттардың жеткізілуін күту қажет болуы мүмкін. Бұл жоғары деңгейлі бизнес-қызметтер негізделетін төменгі деңгейлі жүйелер арнайы төлем механизмдерін, деректерді тазалауды, жеке басын куәландыруды, заңды тексерулерді және т. б. қамтамасыз етуі мүмкін, олардың әрқайсысы қызметті дамыту және қолдау үшін жұмыс істейтін бірнеше команданы қажет етеді. Бизнес-процестерді басқару (BPM) — бәлкім, машиналық оқытумен (ML) толықтырылған — бұл жағдайларда кейбір жұмыстарды автоматтандыруға көмектеседі; бірақ белсенді, саналы командалар әлі де BPM жұмыс процесінің сценарийлерін конфигурациялауы және тексеруі керек. Бұл қызметтер мен ішкі жүйелердің кейбірі ішкі ресурстармен құрылуы мүмкін, бірақ басқаларын сыртқы жеткізушілер ұсынуы мүмкін.

Пайдалы бизнес құндылығын жеткізу үшін жоғары деңгейлі ағындар көптеген төменгі деңгейлі қызметтермен интеграциялануы керек (бұл — кәсіпорын қызметтерін басқару саласы). Егер ағындар әрбір негізгі қызметпен бөлек интеграциялануы керек болса, ағынның тиімділігін бағалау және адам шешімін қажет ететін ұзақ уақытқа созылатын процестердегі қателерді анықтау қиын болуы мүмкін. Мысалы, негізгі қызметтер бақылау механизмдерін көрсетпеуі мүмкін немесе транзакцияларды анықтаудың әрқайсысында бөлек жолы болуы мүмкін.

Мұндай көп сервистік интеграциялық мәселелердің шешімі екі жақты: (1) Төменгі деңгейлі қызметтер мен API-лерді «платформалық қаптамамен» (platform wrapper) «платформаландыру». Бұл ағынға бағытталған командалар үшін сұраныстарды бақылаудың корреляциялық ID-лері, денсаулықты тексеру нүктелері, тестілеу құралдары, қызмет көрсету деңгейінің мақсаттары (SLO) және диагностикалық API-лер сияқты нәрселермен бірізді әзірлеуші тәжірибесін (DevEx) (құралдарды пайдалану ыңғайлылығы) қамтамасыз етеді. Бұл «сыртқы платформа» бұдан да төмен деңгейлі платформада құрылған, бірақ ол ағынға бағытталған командалардан жасырын қалады. (2) Әрбір жоғары деңгейлі бизнес-қызмет үшін пайдалану телеметриясына және қателерді диагностикалауға жауапты ағынға бағытталған командаларды пайдалану: мәселелердің қай жерде туындағанын анықтай алу үшін «жеткілікті» телеметриялық интеграция мен диагностикалық мүмкіндіктерді құру және дамыту. Телеметрия мен диагностиканы бақылауда ұстау ағынға бағытталған командаларға өз ағынындағы өзгерістер ағынын қадағалауға және жақсартуға мүмкіндік береді (168-беттегі 8. 8-суретті қараңыз).

Image segment 1124
  1. 8-сурет: «Платформалық қаптаманың» мысалы

Төменгі деңгейлі қызметтер мен API-лерді «платформаландыру» үшін «платформалық қаптаманы» пайдалану арқылы жоғары деңгейлі бизнес-қызметтердегі (ағындардағы) ағынның болжамдылығын арттырыңыз. Бұл ағындарға барлық тәуелділіктерді біртұтас жол картасы мен бірізді DevEx бар бірыңғай платформа ретінде қарастыруға мүмкіндік береді. Ағындарда платформаның ағынын және ресурстарды пайдалануын бақылау үшін бай телеметрия бар.

Әрбір жоғары деңгейлі бизнес-қызмет төңірегіндегі бай телеметрияның бөлігі ретінде ағынға бағытталған команда мыналарды құрады және иеленеді: (1) Платформадағы әртүрлі негізгі қызметтер мен API-лерді шақырған кезде бірізді логтау уақыт белгілерін, корреляциялық ID-лердегі бірізділікті, сұраныс/жауапты сәйкестендіруді және логтауды және т. б. қамтамасыз ететін жеңіл сандық-қызметтік «қаптама»; (2) Барлық «ағын жағындағы» үйлестіруді қадағалауға және бақылауға мүмкіндік беретін сандық-қызметтік қаптамаға арналған логтау, метрикалар және бақылау панельдері (тіпті «платформа жағындағы» аспектілердің көрінуі бастапқыда өзгермелі болса да).

Жоғары деңгейлі бизнес-қызметтерде тұрақты және болжамды ағынды қолдау үшін платформалық қаптама платформалық қызметтердің айналасындағы DevEx-ті жақсартуы тиіс — логтау, метрикалар, бақылау панельдері, корреляциялық ID-лер және т. б. бойынша бірізділік пен стандарттар — осылайша ағынға бағытталған командалар құрған сандық-қызметтік қаптама ішінен үлкенірек бақылау мүмкіндігі болады.

Өздігінен басқарылатын дизайн және әзірлеу

Тарихи тұрғыдан алғанда, көптеген ұйымдар «әзірлеуді» (develop) және «пайдалануды» (operate) бағдарламалық жасақтаманы жеткізудің екі бөлек кезеңі ретінде қарастырды, олардың арасында өзара әрекеттесу өте аз болды және пайдаланудан әзірлеуге кері байланыс мүлдем болмады десе де болады. Қазіргі заманғы бағдарламалық жасақтаманы жеткізу мүлдем басқа тәсілді қолдануы керек: бағдарламалық жасақтаманы пайдалану әзірлеу әрекеттері үшін бағалы сигналдар ретінде әрекет етіп, соларды қамтамасыз етуі керек. Пайдалануды әзірлеуге арналған бай сенсорлық кіріс ретінде қарастыру арқылы ұйымға өзін-өзі басқаруға мүмкіндік беретін кибернетикалық кері байланыс жүйесі орнатылады.

Командалар мен командалық әрекеттестікті сезімдер мен сигналдар ретінде қарастырыңыз

Бағдарламалық жүйелердің әртүрлі бөліктеріне тиімді иелік ететін және нақты анықталған коммуникациялық үлгілерді пайдалана отырып әрекеттесетін тұрақты командалардың көмегімен ұйымдар қуатты стратегиялық мүмкіндікті іске қоса алады: ұйымдық сезіну (sensing).

Ұйымдық сезіну (organizational sensing) командаларды және олардың ішкі-сыртқы байланыстарын ұйымның «сезім мүшелері» (көру, есту, сипап сезу, иіс сезу, дәм сезу) ретінде қолданады. Питер Друкер бұны «сыртқы дүниеге арналған синтетикалық сезім мүшелері» деп атайды. Тұрақты, нақты анықталған нейрондық байланыс жолдары болмаса, ешбір тірі ағза ештеңені тиімді сезіне алмайды. Нәрселерді түйсіну (және оларды ұғыну) үшін ағзаларға анық, сенімді байланыс жолдары қажет. Сол сияқты, командалар арасындағы нақты анықталған және тұрақты байланыс жолдары арқылы ұйымдар бүкіл құрылым ішіндегі және одан тыс жердегі сигналдарды анықтап, тірі ағза секілді әрекет ете алады.

Көптеген ұйымдар — командалары тұрақсыз әрі түсініксіз, тек негізгі тұлғаларға ғана сенетін және көптеген қызметкерлердің даусын өшіріп тастайтындар — сөздің екі мағынасында да «сезімсіз» болып табылады: олар қоршаған ортадағы жағдайды сезе алмайды және олардың іс-әрекеттерінде ешқандай қисын жоқ. Өзгеріс жылдамдығы айлармен немесе жылдармен өлшенетін кезде (өткен замандағыдай), ұйымдар өте баяу және шектеулі экологиялық сезіну арқылы күн көре алатын еді. Дегенмен, қазіргі желіге қосылған әлемде, ұйымның өмір сүруі үшін жоғары дәлдіктегі сезіну өте маңызды, бұл дәл жануардың немесе басқа ағзаның бәсекелестікке толы, динамикалық табиғи ортада аман қалуы үшін сезім мүшелерінің қажеттілігімен бірдей.

Ұйымдарға ақпаратты тек жоғары дәлдікпен сезіну ғана емес, сонымен қатар оған жедел жауап қайтару да қажет. Ағзалардың сезіну (көз, құлақ және т. б. ) және кіріс деректеріне жауап беру (қол-аяқ, дене және т. б. ) үшін әдетте бөлек мамандандырылған мүшелері болады. Әртүрлі командалардың қабылдайтын сигналдары олардың атқаратын жұмысына және сыртқы клиенттерге, ішкі тұтынушыларға немесе басқа командаларға қаншалықты жақын екеніне байланысты өзгешеленеді, бірақ әрбір команда ұйымға сенсорлық ақпарат беріп, командалық өзара әрекеттесу үлгілерін түзету арқылы жауап қайтаруға қабілетті болады.

Бақытымызға орай, Наоми Стэнфорд «қоршаған ортаны сканерлеу» (environmental scanning) деп атаған бұл міндетте бізге заманауи цифрлық құралдар көмектеседі. Цифрлық метрикалар мен логтардан алынатын бай телеметрия (жүйенің күйін қашықтан бақылау деректері) командаларға өздерінің бағдарламалық жүйелерінің жағдайы мен өнімділігін нақты уақыт режимінде көруге көмектеседі; ал жеңіл, желіге қосылған құрылғылар (IoT — заттар интернеті және 4IR — Төртінші өнеркәсіптік революция) мыңдаған физикалық орындардан тұрақты сенсорлық деректерді қамтамасыз етеді.

Сонымен, ұйым нендей нәрселерді сезінуі керек? Бұл сұрақтар ұйымға жауапты табуға көмектеседі:

Пайдаланушылардың қалай әрекет еткісі келетінін немесе не қалайтынын дұрыс түсінбеген жоқпыз ба?

Ұйымның жұмысын жақсарту үшін командалық өзара әрекеттесу режимдерін өзгерту керек пе?

Біз Х нәрсесін әлі де өз ішімізде жасауымыз керек пе? Әлде оны сыртқы провайдерден жалға алғанымыз жөн бе?

А командасы мен Б командасы арасындағы тығыз ынтымақтастық әлі де тиімді ме? Біз «X-as-a-Service» (X қызмет ретінде) моделіне көшуіміз керек пе?

С командасының жұмыс ағыны мүмкіндігінше кедергісіз бе? Ағынға не кедергі келтіреді?

D, E, F және G командаларына арналған платформа сол командаларға қажет нәрсенің бәрін қамтамасыз ете ме? Белгілі бір уақытқа көмекші (enabling) команда қажет пе?

Осы екі команда арасындағы уәделер әлі де жарамды және орындалатын ба? Уәделерді шынайы ету үшін не өзгеруі керек?

IT-операциялар — әзірлеу үшін жоғары құнды сенсорлық ақпарат көзі

Жылдам қозғалу қоршаған орта туралы сенсорлық кері байланысқа сүйенеді. Бағдарламалық өзгерістердің жылдам ағынын сақтап тұру үшін ұйымдар ұйымдық сезіну мен кибернетикалық басқаруға инвестиция салуы керек. Бұл сенсорлық кері байланыстың негізгі аспектісі — IT-операциялар командаларын әзірлеуші командалар үшін жоғары дәлдіктегі сенсорлық ақпарат көзі ретінде пайдалану, бұл жүйелерді басқаратын (Ops) және жүйелерді құратын (Dev) командалар арасындағы тығыз байланысты талап етеді. Өкінішке орай, көптеген ұйымдар өздерінің жылдам әрі қауіпсіз қозғалуына кедергі жасайды. Шрирам Нараян айтқандай: «Шығындарды азайтуды көздейтін жоба демеушілері техникалық қызмет көрсету жұмыстары үшін арзан мамандардан тұратын басқа команданы таңдайды. Бұл — жалған үнемдеу. Бұл бизнестің жалпы нәтижесіне зиян келтіреді және IT икемділігін төмендетеді».

«Техникалық қызмет көрсету» деп аталатын жұмыстарда ең төменгі шығындарды оңтайландыруға тырысудың орнына, ұйымдар бұл жұмыстан келетін сигналдарды бағдарламалық қамтамасыз етуді әзірлеу қызметі үшін кіріс ретінде пайдалануы өте маңызды. The DevOps Handbook кітабында Джин Ким және оның әріптестері заманауи, жоғары өнімді ұйымдарға арналған DevOps-тың «Үш жолын» (The Three Ways) былай анықтайды:

Жүйелік ойлау: тек кішкентай бөліктерде емес, бүкіл ұйым бойынша жылдам ағынды оңтайландыру.

Кері байланыс циклдері: Операциялық бөлімнен (Ops) алынған мәліметтер негізіндегі Әзірлеу (Dev).

Үздіксіз эксперимент жүргізу және оқу мәдениеті: әрбір командалық өзара әрекеттесу үшін сезіну мен кері байланыс орнату.

Екінші және үшінші жолдар Ops және Dev арасындағы күшті байланыс арналарына сүйенеді. 5-тарауда көргеніміздей, Ops-тан Dev-ке жоғары дәлдіктегі ақпараттың үздіксіз ағынын қамтамасыз етудің ең қарапайым жолдарының бірі — Ops пен Dev мамандарын бір командаға біріктіру немесе кем дегенде операциялық инциденттер кезінде бірге әрекет ететін, бірдей өзгерістер ағынына бағытталған командалар жұбы ретінде жұмыс істеу. Бұл модельге әлі ауыспаған немесе жеке операциялық тобы бар ұйымдар үшін Ops пен Dev арасындағы байланыс жолдарын орнату және дамыту өте маңызды. Бұл әзірлеуші командаларға жұмыс істеу қабілеттілігі, сенімділік, пайдалану ыңғайлылығы, қауіпсіздік және т. б. сияқты операциялық аспектілер туралы нақты ақпарат береді, бұл оларға бағытты түзетуге және операциялық шығындарды азайтып, сенімділікті арттыратын бағдарламалық дизайн жасауға мүмкіндік береді.

Ops-ты Dev үшін кіріс ақпарат ретінде қарастыру бұл екі топтың рөлдерін түбегейлі қайта қарауды талап етеді. Designing Delivery авторы Джефф Суссна былай дейді: «Бизнестер әдетте операциялық кезеңді дизайнның нәтижесі (output) ретінде қарастырады. . . . Дегенмен, түсіністік таныту (empathize) үшін ести білу керек. Есту үшін операциялық бөлімнен келетін ақпарат (input) қажет. Осылайша, операциялар дизайнның кіріс дерегіне айналады».

Джефф меңзегендей, мұндағы мақсат — біз жасап жатқан бағдарламалық жасақтама мен қызметтерді пайдаланушылардың әртүрлі топтарымен өзара түсіністік орнату. Пайдаланушыларға деген эмпатияны дамыту арқылы біз олармен өзара әрекеттесу сапасын жақсартып, олардың тәжірибесін арттырып, қажеттіліктерін жақсырақ қанағаттандыра аламыз.

Қазіргі уақытта бағдарламалық жасақтама тек «дайын өнім» емес, көбінесе пайдаланушылармен «үздіксіз сұхбат» болып табылады. Бұл үздіксіз сұхбатты тиімді және сәтті ету үшін ұйымдарға өз бағдарламалық жасақтамасына «үздіксіз қамқорлық» (continuity of care) қажет. Бағдарламалық жасақтаманы жобалайтын және құрастыратын команда, оны бастапқыда тиімді құру үшін оның жұмыс істеуіне және операциялық аспектілеріне қатысуы керек. Осы «жобалау және іске қосу» үздіксіздігін қамтамасыз ететін команда сонымен қатар бағдарламалық қызметтің коммерциялық өміршеңдігі үшін де жауапты болуы керек; әйтпесе, шешімдер қаржылық шындықтан тыс, оқшауланған ортада қабылданатын болады.

Командаларды мүмкіндікті кодтап біткеннен кейін де бағдарламалық жасақтамаға қамқорлық жасауды жалғастыруға қалай ынталандыруға болады? Қамқорлықтың үздіксіздігін жақсарту үшін ең маңызды өзгерістердің бірі — міндеті тек бар бағдарламалық жасақтаманы қолдау болып табылатын «техникалық қызмет көрсету» немесе BAU (Business as Usual — күнделікті қалыпты жұмыс) командаларынан аулақ болу. Agile IT Organization Design авторы Шрирам Нараян былай дейді: «жеке техникалық қызмет көрсету командалары мен матрицалық ұйымдар... жедел әрекет ету қабілетіне қарсы жұмыс істейді». Техникалық қызмет көрсету жұмысын бастапқы дизайн жұмысынан бөлектеу арқылы Ops-тан Dev-ке келетін кері байланыс циклі бұзылады және бағдарламалық жасақтаманы пайдалану кезіндегі тәжірибенің оның дизайнына тигізетін кез келген әсері жоғалады (8. 9-суретті қараңыз).

Image segment 1156
  1. 9-сурет: «Жаңа сервис» және «Күнделікті қалыпты жұмыс» (BAU) командалары

«Жаңа дүниелер» мен BAU үшін бөлек командалардың болуы білім алуға, жақсартуға және өзін-өзі басқару қабілетіне кедергі келтіреді. Бұл — кибернетикалық емес тәсіл.

Жаңа дүниелер мен BAU үшін бөлек командалардың болуы осы екі топ арасындағы білім алмасуға да кедергі келтіреді. Жаңа сервистік команда жаңа технологиялар мен тәсілдерді енгізеді, бірақ бұл тәсілдердің тиімді екенін көре алмайды. Жаңа тәсілдер зиянды болуы мүмкін, бірақ жаңа сервистік команданың бұған бас ауыртуға ынтасы аз, өйткені бұл қате таңдаулардың зардабын тек BAU командасы ғана тартады. Сонымен қатар, BAU командасының әдетте бар бағдарламалық жасақтамаға жаңа телеметрия әдістерін қолдануға мүмкіндігі аз болады, бұл оларды тұтынушының ризашылығын немесе риза еместігін көрсететін сигналдарды көруден мақұрым қалдырады.

Оның орнына, бір команданың жаңа сервистерге де, бұрыннан бар жүйенің BAU жұмысына да қатар жауапты болуы әлдеқайда тиімді. Бұл командаға жаңа жүйенің телеметриясын ескі жүйеге енгізу арқылы ескі жүйеден келетін сигналдардың сапасын арттыруға және ұйымның өз ортасын сезіну және өзін-өзі басқару қабілетін арттыруға көмектеседі (8. 10-суретті қараңыз).

Image segment 1161
  1. 10-сурет: Қатар тұрған Жаңа сервис және BAU командалары

Ескі жүйелерді қолдаудың кибернетикалық тәсілінде бір ағынға бағытталған команда (немесе командалар жұбы) жаңа сервисті де, ескі жүйелерді де әзірлеп, іске қосады, бұл командаға ескі жүйеге жаңа телеметрияны орнатуға және екі жүйеден де келетін сезіну дәлдігін арттыруға мүмкіндік береді.

Іс жүзінде, әрбір ағынға бағытталған команда өздері құрып жатқан және іске қосатын жаңа жүйелерден бөлек, бір немесе бірнеше ескі жүйелерді де күтіп ұстауды жоспарлауы керек. Бұл оларға пайдаланушы мен жүйе мінез-құлқының кең ауқымын зерттеуге және бұрынғы жүйелерде жасалған қателерді қайталамауға көмектеседі.

Алдыңғы шептегі операциялық жүйелерден жоғары дәлдіктегі ақпаратты алу үшін жоғары білікті, жағдайды жақсы түсінетін адамдар қажет. Бұл дегеніміз — бұрынғы IT-операциялар командаларының жасақталу тәсіліне қарама-қайшы — IT-операцияларындағы адамдар мәселелерді тез және дәл анықтап, сұрыптай білуі керек, жаңа мүмкіндіктерді жасауға назар аударған әріптестеріне нақты, пайдалы ақпарат бере алуы тиіс. IT-операцияларының қызмет көрсету бөлімінде (service desk) ең тәжірибесіз адамдар отырудың орнына, онда ұйымдағы ең тәжірибелі инженерлердің кейбірі немесе олармен бірге жас мамандар жұмыс істеуі керек.

Түйін: Команда топологияларының дамуы

Технологиялардың, нарықтардың, тұтынушылар мен пайдаланушылардың сұраныстарының, сондай-ақ нормативтік талаптардың жедел өзгеруі сәтті ұйымдардың өз құрылымын жүйелі түрде бейімдеп, дамытып отыруы қажеттігін білдіреді. Дегенмен, бағдарламалық жүйелерді құратын және іске қосатын ұйымдар командалық өзара әрекеттесулердің жұмыс ағынына, Конвей заңына және командалық тәсілге (соның ішінде команданың когнитивті жүктемесіне) оңтайландырылғанына көз жеткізуі керек. Төрт негізгі команда топологиясын үш негізгі өзара әрекеттесу режимімен қолдана отырып, ұйымдар өз командаларының мақсаттарын үздіксіз нақтылап отырады. Командалар басқа командалармен қашан және неге ынтымақтасу керектігін; «қызмет ретінде» (as a service) бірдеңені қашан және неге тұтынуы немесе ұсынуы керектігін; және басқа командамен қашан және неге жеңілдету (facilitation) жұмыстарын жүргізу керектігін түсінеді. Осылайша, ұйым жаңа сын-қатерлерге жауап бере отырып, кез келген уақытта командалар арасындағы өзара әрекеттесудің әртүрлі түрлерін көруді жоспарлауы керек.

Нақты анықталған командалар мен өзара әрекеттесу режимдерінің үйлесімі өзгеретін сыртқы және ішкі жағдайларға құрылымдық бейімделу үшін қуатты және икемді ұйымдық мүмкіндік береді, бұл ұйымға өз ортасын «сезінуге», қызметін өзгертуге және мақсатына сәйкес шоғырлануға мүмкіндік береді.

ҚОРЫТЫНДЫ

Келесі буынның цифрлық операциялық моделі

«Шағын, өкілетті бөлімшелерді құрудың өнімділікке тигізетін екінші әсері — жаңа ақпаратқа бейімделу жылдамдығын арттыру». — Джон Робертс, The Modern Firm

Көптеген ұйымдарда бағдарламалық жасақтаманы жеткізу көптеген жылдар бойы проблемаларға толы болды — жаңа технологиялар бұл мәселелерді шешуге уәде бергенімен, олар сирек шешіледі. Бұл мәселелерге: жұмысқа ынтасы жоқ командалар, технологиялар мен нарықтардағы өзгерістерден болатын қайталанатын «тосын сыйлар», Конвей заңына қарсы әрекет ету, командалар үшін тым үлкен болып кеткен бағдарламалық жасақтама, ұйымдық дизайн нұсқалары мен жеткізу фреймворктарының шатасқан жиынтығы, әр тарапқа тартқыланған командалар, бірнеше жыл сайын болатын ауыр қайта ұйымдастырулар және өзгерістер ағынының нашарлығы жатады. Әрбір ұйымда бұл мәселелердің бәрі бірдей бола бермейді, бірақ олардан құтылуға тырысқан бірнеше талпыныстарға қарамастан, көбісінде олардың бір бөлігі, ал кейбіреулерінде барлығы дерлік кездеседі. Сонымен, бұл тұрақты мәселелердің себебі неде?

Көптеген ұйымдардың бағдарламалық жасақтаманы жеткізуде көптеген мәселелерге тап болуының себебі — ұйымдардың бағдарламалық жасақтаманы әзірлеудің мәні туралы қате түсінігінде. «Мүмкіндіктерді жеткізуге» (feature delivery) шамадан тыс назар аудару заманауи бағдарламалық жасақтамаға тән адам мен командаға қатысты динамиканы ескермейді, бұл қызметкерлердің, әсіресе когнитивті жүктеме (ақпаратты қабылдау мен өңдеуге жұмсалатын ми күші) шамадан асқан кезде, жұмысқа деген ынтасының төмендеуіне әкеледі.

Конвей заңының нақты салдары көптеген ұйымдарда ескерілмейді, бұл жақсы жағдайда архитектуралық таңдаулардың кездейсоқ сәтті болуына, ал нашар жағдайда ұйым «гомоморфты — құрылымы ұқсас» күшпен «күресуге» уақыт пен күш жұмсағандықтан, тұрақты үйкеліске (friction) әкеледі. Сол сияқты, көптеген ұйымдар нашар таңдалған «қайта ұйымдастырудың» ұйымның стратегиялық инновациялық мүмкіндігін және бағдарламалық жасақтаманы тұрақты жеткізу қабілетін қалай жойып жіберетінін білмейді.

Командалық модельдер мен масштабталған жеткізу фреймворктарының жиынтығы өте көп, бірақ олардың арасындағы айырмашылықтар өте аз. Сонымен қатар, командалардың мінез-құлық үлгілері сирек көрсетіледі, бұл командаларды басқа командалармен тиімді өзара әрекеттесуге арналған нақты нұсқауларсыз қалдырады, нәтижесінде командалар арасында тым тығыз байланыс немесе масштабтауға келмейтін оқшауланған автономия пайда болады.

«Команда топологиялары» (Team Topologies) төрт негізгі команда түріне, өзара әрекеттесудің үш үлгісіне және жеткізудегі қиындықтарды ұйымға қоршаған ортаны сезінуге мүмкіндік беретін жолдарға негізделген «командалық» тәсілді ұсына отырып, осы мәселелердің барлығын шешуге көмектеседі. Шын мәнінде, «Команда топологиялары» командалардың өзара әрекеттесуі мен байланысының нақты анықталған жолын ұсынады, бұл алынған бағдарламалық архитектураны нақтырақ және тұрақты етуге көмектеседі, командалар арасындағы мәселелерді өзін-өзі басқаратын ұйым үшін құнды сигналдарға айналдырады. Бұл 9. 1-суретте жинақталған:

Image segment 1177
  1. 1-сурет: Команда топологияларының негізгі идеялары

Төрт команда түрі және үш өзара әрекеттесу режимі

Бағдарламалық жүйені құру және іске қосу үшін тек төрт команда түрін ғана пайдалануға болады. Басқа команда түрлері ұйымға зиян тигізуі мүмкін.

Төрт негізгі команда топологиясы:

Ағынға бағытталған (Stream-aligned): бизнес өзгерістерінің негізгі ағынына сәйкестендірілген, көпфункционалды дағдылары бар және басқа команданы күтпестен маңызды нәтижелерді жеткізе алатын команда.

Платформалық (Platform): ағынға бағытталған командаларды жеткізу барысында қолдайтын негізгі платформада жұмыс істейтін команда. Платформа күрделі технологияларды қарапайым етеді және оны пайдаланатын командалардың когнитивті жүктемесін азайтады.

Көмекші (Enabling): өтпелі немесе оқу кезеңінің бөлігі ретінде басқа командаларға бағдарламалық жасақтаманы енгізуге және өзгертуге көмектесетін команда.

Күрделі ішкі жүйе (Complicated subsystem): қалыпты ағынға бағытталған немесе платформалық команда шешуге тым күрделі ішкі жүйемен айналысатын арнайы өкілеттігі бар команда. Міндетті емес және тек қажет болған жағдайда ғана қолданылады.

Осы нақты команда түрлерінің жиынтығы жылдам ағынмен бағдарламалық жасақтаманы тиімді жеткізу үшін қажет нәрсенің бәрін қамтиды. Дегенмен, осы төрт негізгі команда топологиясы арасындағы өзара әрекеттесу режимдері бағдарламалық жасақтаманы тиімді жеткізуді түсіну және дамыту үшін өте маңызды:

Ынтымақтастық (Collaboration) режимі: екі команда ортақ мақсатта бірге жұмыс істейді, әсіресе жаңа технологияларды немесе тәсілдерді зерттеу кезінде. Оқудың жылдам қарқынына байланысты жұмсалған күш-жігер өз нәтижесін береді.

X-as-a-Service (X қызмет ретінде) режимі: бір команда басқа команда ұсынатын нәрсені (мысалы, API, құрал немесе толық бағдарламалық өнім) тұтынады. Ынтымақтастық минималды болады.

Жеңілдету (Facilitating) режимі: бір команда (әдетте көмекші команда) басқа командаға жаңа тәсілді үйренуге немесе енгізуге көмектеседі.

Осы үш негізгі өзара әрекеттесу режимінен тыс командалық іс-әрекеттер тиімсіз болып табылады және бұл команда жауапкершілігі шекараларының дұрыс таңдалмағанын немесе команда мақсаттарының дұрыс түсінілмегенін білдіреді.

Командалық ойлау: когнитивті жүктеме, командалық API, командалық өлшемдегі архитектура

Мақсаттың айқындығын арттыру және командалардың жауапкершілік шекарасын анықтау үшін негізгі команда түрін және өзара әрекеттесу режимін таңдаңыз. «Команда топологиялары» бұл «командалық» тәсілді бағдарламалық жасақтаманы тұрақты жеткізуге арналған қосымша командалық нұсқауларды енгізу арқылы бірнеше қадам алға жылжытады.

«Команда топологиялары» тәсілі команданы жеткізудің негізгі құралы ретінде қарастырады, мұнда команда — жай ғана бір менеджерге бағынатын адамдар жиынтығы емес, өз білімі, мақсаттары, миссиясы және тиісті автономиясы бар біртұтас құрылым. Команда бірге үйренеді және жеткізеді, өйткені бұл орын алған кезде нәтижелер жеке адамдардың жиынтығынан әлдеқайда жоғары болады. Команда тек өз кодын ғана сыртқы «API» ретінде қарастырмайды, сонымен қатар құжаттамасын, іске қосу процестерін, басқа командалармен бетпе-бет немесе чат құралдары арқылы өзара әрекеттесуін және басқа командалардың оның мүшелерімен байланысуы үшін қажет кез келген нәрсені қамтиды.

Бағдарламалық жасақтаманың тым үлкен болып кетуіне және ақыр соңында команданы басып тастауына жол бермеу үшін, ішкі жүйелердің (немесе компоненттердің) көлемі бір команда басқара алатын деңгеймен шектеледі. Атап айтқанда, команда ретінде жеңе алатын максималды когнитивті жүктемеден асып кетуге жол берілмейді, бұл бүкіл команданың күрделілік пен ақыл-ой жүктемесін еркін игеруін қамтамасыз етеді. Бұл «командалық өлшемдегі архитектура» бірінші кезекте адамдарға назар аударады және бұл технологияға бірінші кезекте назар аударатын монолитті немесе микросервистік архитектураларға қарағанда бағдарламалық архитектураға неғұрлым тұрақты және адамгершілікке негізделген тәсіл болып табылады.

Конвей заңын стратегиялық қолдану

1968 жылы Мел Конвей ұйымның байланыс құрылымы мен нәтижесінде пайда болатын жүйе дизайны арасындағы байланыс туралы керемет түсінік берді және бұл бүгінгі бағдарламалық жасақтамаға бай ұйымдар үшін қуатты мүмкіндік (және шектеу) болды: «Дизайнерлер арасында тиімдірек байланыс орнатуға мүмкіндік беретін әдістерді зерттеу жүйені басқару технологиясында өте маңызды рөл атқарады».

Қазіргі контексте және терминологияда «дизайнерлер» сөзін «бағдарламалық командалар» деп ауыстыруға болады. Басқаша айтқанда, командаларды қайта құрылымдау және командалар арасындағы байланысты жеңілдету (немесе қажет болса, әдейі шектеу) өндірісте жақсы жұмыс істейтін және уақыт өте келе табиғи түрде дамитын жүйелерді құруға көбірек мүмкіндік береді. Мұндағы салдар — ынтымақтастықтың артуы әрқашан байланыстың артуымен бірдей емес. Яғни, егер біз жүйенің әртүрлі бөліктерін қысқа мерзімде тәуелсіз орналастыру қажеттігін білсек және ол үшін шағын, бөлектелген сервистерді пайдалануды шешсек, біз өз командаларымызды да солай шағын, бөлектелген және нақты жауапкершілік шекаралары бар етіп жасауымыз керек.

Тіпті өнімділікке бағытталған ұйымдардың өздері де командалық ұйымдастырудың кесірінен тиімді технологиялар мен тәжірибелерді енгізуге кедергі келтіруі мүмкін. Мысалы, бағдарламалық архитектураторлардың ауқымды, алдын-ала жасалған дизайндары, егер олар командалардың байланыс тәсіліне сәйкес келмесе, сәтсіздікке ұшырауы тиіс.

Микросервистер сияқты бұлтты бағдарламалық жасақтаманы құру және пайдалану тәсілдері жақсартылған орналастыру мүмкіндігімен қатар, адам басқара алатын функционалдылық блоктарына деген қажеттілікті қанағаттандырады. Егер командалар құраушы бөліктерді түсініп, кодқа иелік ету сезімін сезінсе, оларды конвейердегі жұмысшылар ретінде қарастырғаннан көрі, жүйені дамытуға және қолдауға көбірек мүмкіндік алады. «Уәделер теориясы» (7-тарауды қараңыз) сияқты тәсілдерді қолдану командаларға код пен API-ге күнделікті иелік етуді арттыруға көмектеседі. Сондықтан өздерінің бағдарламалық жүйелерін әзірлейтін және пайдаланатын ұйымдар өз құрылымын өткендегіге қарағанда түбегейлі басқаша құруы керек. Команда құрылымдары қажетті бағдарламалық архитектураға сәйкес келуі керек, әйтпесе күтпеген дизайн нәтижелеріне тап болу қаупі бар.

Ұйымдық дизайнды бейімделу мен сезіну үшін дамыту

Team Topologies-тің динамикалық сипаты

Ұйымдар команда құрылымын тек белгілі бір уақыт сәтінде ғана қарастырып қоймай, технологиялық және ұйымдық жетілу деңгейіне қарай команда құрылымдары мен коммуникация жолдарын үнемі дамытып отыруы қажет. Техникалық және өнімді зерттеу (discovery) кезеңдері әдетте табысқа жету үшін жоғары деңгейдегі ынтымақтастықты (командалар арасындағы шекаралардың жойылуымен) талап етеді. Бірақ зерттеу аяқталғанда (технологиялар мен өнім қалыптасқан соң) сол құрылымдарды сақтап қалу күш-жігердің босқа жұмсалуына және түсініспеушіліктерге әкелуі мүмкін. Атап айтқанда, ұйымдар командалардан жаңа үлгілер мен орындау модельдерін табу үшін бірлесіп жұмыс істеуін, содан кейін бұларды платформаға және қолдаушы құралдарға енгізуін күтуі керек.

Team Topologies — бұл статикалық емес, жағдайдың өзгеруіне қарай өзгеруге қабілетті және өзгеруі тиіс модель. Кез келген уақытта ұйымның қажеттіліктеріне сәйкес келетін командалық топологиялар мен өзара әрекеттесу режимдерін таңдау кезінде көптеген факторлар ескеріледі.

Тек Team Topologies-тің өзі АТ тиімділігі үшін жеткілікті емес

Бағдарламалық жүйелерге арналған Team Topologies тәсілі бүкіл әлемдегі көптеген ұйымдар үшін алға жасалған үлкен қадам болып табылады. Ол командалардың әртүрлі комбинациялары мен өзара әрекеттесуінің қалай және неліктен жұмыс істейтінін түсінуге көмектеседі, сондай-ақ нақты жағдайларда қолданылатын практикалық кеңестер мен үлгілерді ұсынады.

Дегенмен, Team Topologies-тің өзі ғана бағдарламалық қамтамасыз етуді жеткізу және пайдалану бойынша тиімді ұйым құра алмайды. Осы кітапта ұсынылған құрылымдар мен динамикадан басқа, табысқа жетудің маңызды қосымша компоненттеріне мыналар жатады:

Салауатты ұйымдық мәдениет: жеке тұлғалар мен командалардың кәсіби дамуын қолдайтын орта — адамдар өздерін өкілетті сезінетін және мәселелер туралы ашық айтудан қорықпайтын, ал ұйым үнемі үйренуге дайын болатын орта. Жақсы инженерлік практикалар: жүйенің барлық аспектілерін алдымен тестілеу арқылы жобалау және әзірлеу, үздіксіз жеткізу (continuous delivery) мен пайдалану практикаларына назар аудару, кодты тексеру үшін жұптық бағдарламалау (екі маманның бір тапсырманы бірге орындауы) мен моббингті қолдану, инциденттердің бір ғана «түпкі себебін» іздеуден аулақ болу, тестілеуге ыңғайлы етіп жобалау және т.б. Салауатты қаржыландыру және қаржылық практикалар: АТ ұйымының әртүрлі бөліктері арасындағы CapEx/OpEx (күрделі шығындар мен операциялық шығындар) бөлінісінің зиянды әсерлерінен аулақ болу, жобаға негізделген дедлайндар мен үлкен көлемдегі бюджеттеуден бас тарту және оқыту бюджетін жеке адамдарға емес, командаларға немесе топтарға бөлу. Бизнес-көзқарастың айқындығы: басшылық ұйымның қалған бөлігі үшін адам түсінетін уақыт аралықтарында (мысалы, үш ай, алты ай, он екі ай) нақты және бір-біріне қайшы келмейтін бағыт-бағдар береді. Приоритеттердің артындағы нақты негіздемелер ұйымдағы адамдарға шешімдердің қалай және неліктен қабылданғанын түсінуге мүмкіндік береді.

Бұны бақша жасау мен күту үшін қажетті элементтер сияқты елестетуге болады: Team Topologies тәсілі гүлдер мен өсімдіктерді орналастыру нұсқаулығы, сондай-ақ бұтау және баптау үлгілері сияқты жұмыс істейді; ал мәдени, инженерлік және қаржылық элементтер өсімдіктердің сау өсуіне көмектесетін топырақ, су және тыңайтқыш сияқты.

Нашар мәдениет, нашар инженерлік практикалар және теріс қаржылық ықпалдар бұл бақшада у немесе өсуді тежегіштер ретінде әрекет етеді. Егер қоршаған орта жағдайлары қолайсыз болса, тіпті Team Topologies ұсынған тамаша отырғызу үлгілері болса да, бағдарламалық қамтамасыз етудің өсіп-өркендеуін күтуге болмайды.

Келесі қадамдар: Team Topologies-бен жұмысты қалай бастау керек

Командадан бастаңыз Алдымен ұйым ретінде өзіңізден сұраңыз: командаға мыналар үшін не қажет: Тиімді команда ретінде әрекет ету және жұмыс істеу? Бағдарламалық қамтамасыз етудің бір бөлігіне тиімді иелік ету? Пайдаланушылардың қажеттіліктерін қанағаттандыруға назар аудару? Қажетсіз когнитивті жүктемені азайту? * Басқа командаларға бағдарламалық қамтамасыз ету мен ақпаратты ұсыну және олардан алу? Бұл сұрақтарға шыншыл жауап беру кеңсе кеңістігіне, әзірлеуші құралдарына, платформалардың қолданылуына, жүйелер мен домендерді шынайы бөлуге және командаға ыңғайлы архитектураға бағытталған «алдымен команда» (team-first) тәсіліне әкелуі керек.

  1. Қолайлы өзгеріс ағындарын анықтаңыз Әрбір ұйым маңызды өзгерістер өтетін «құбырлар» ретінде қызмет ететін өзгеріс ағындарын таңдауы керек. Бұл ағындар ұйым ішіндегі қозғалыстың негізгі фокусы болып табылады. Ағындарды таңдау ұйымның табиғатына байланысты, бірақ кейбір типтік ағындар мыналар болуы мүмкін: Мемлекеттік қызметтер үшін тапсырмаға бағытталған ағындар (паспорт алу, салық төлеу). Банктік өнімдер үшін рөлге бағытталған ағындар (ақшаны басқару, транзакцияларды автоматтандыру). Билет сатып алу үшін әрекет ағындары (билет іздеу, сатып алу, қайтару). Аймақтық өнімдер үшін географиялық ағындар (Еуропа нарығы, Азия нарығы). * Нарық сегменті бойынша пайдаланушы типіне негізделген ағындар (тұтынушылар, шағын бизнес, ірі корпорациялар). Ағынға бағытталған командалар (stream-aligned teams) сіз анықтаған ағындарға сәйкес келуі керек.
  1. Ең жұқа өміршең платформаны (TVP) анықтаңыз Өзгеріс ағындарын анықтағаннан кейін, сол ағындардағы өзгерістердің сенімді және жылдам өтуін қолдау үшін қажетті қызметтерді анықтаңыз. Іс жүзінде бұл қызметтер платформаны құрайды. TVP (Thinnest Viable Platform) — бұл ағындардың қажеттіліктерін қанағаттандыру үшін «жеткілікті көлемдегі» платформа: ол командаларға көмектесетін вики-құжаттамадан бастап, арнайы жасалған технологиялық шешімдерге дейін болуы мүмкін.
  1. Коучинг, менторинг, қызметтерді басқару және құжаттамадағы біліктілік олқылықтарын анықтаңыз Платформа арқылы қолдау көрсетілетін өзгеріс ағындарына негізделген тәсіл — жақсы бастама, бірақ бұл үшін қажетті дағдылар көптеген ұйымдар күткеннен де әртүрлі. Командаларыңыз тек кодқа назар аударатын техниктерден ғана емес, сонымен қатар мына салаларды түсінетін адамдардан тұруы керек: Командалық коучинг. Менторинг (тәжірибелі маманның тәжірибесі аз адамға бағыт-бағдар беруі). Қызметтерді басқару (service management). Сапалы құжаттама жазу. * Процестерді жақсарту.
  1. Әртүрлі өзара әрекеттесу режимдерін бөлісіңіз және тәжірибе жасаңыз Көптеген адамдар «алдымен команда» тәсілімен жұмыс істеп көрмегендіктен, бұл оларға оғаш көрінуі мүмкін. Командалардың өзара әрекеттесу режимдерін түсіндіруге уақыт бөліңіз. Неліктен кейбір командалар бір-біріне жақын, ал кейбірі алыс екенін көрсетіңіз. Конвей заңының (ұйымның коммуникациялық құрылымы жүйе дизайнында көрініс табатыны туралы заң) негіздерін түсіндіріңіз. Team Topologies-тің гуманистік аспектілерін атап өтіңіз: командаға назар аудару, когнитивті жүктемені шектеу, кеңседегі шу мен кедергілерді азайту. Бұл тәсіл адамдарға, бағдарламалық жүйелерге және ұйымның өзіне қалай жақсы нәтижелер беретінін көрсетіңіз.

ГЛОССАРИЙ

API (application programming interface): бағдарламалық қамтамасыз етумен бағдарламалы түрде өзара әрекеттесу жолын сипаттау және сипаттамасы. Application monolith (Қосымша монолиті): көптеген тәуелділіктері мен жауапкершіліктері бар, мүмкін көптеген қызметтерді ұсынатын бір үлкен қосымша. Bounded context (Шектелген контекст): үлкен домендік модельді ішкі үйлесімді бөліктерге бөлу бірлігі. Brooks’s law (Брукс заңы): командаға жаңа адамдарды қосу оның өнімділігін бірден арттырмайтыны туралы заң. Cognitive load (Когнитивті жүктеме): қолданылып жатқан жұмыс жадының көлемі. Collaboration mode (Ынтымақтастық режимі): команданың басқа командамен тығыз бірлесіп жұмыс істеуі. Complicated-subsystem team (Күрделі ішкі жүйе командасы): арнайы білімді қажет ететін жүйенің бөлігін құруға және күтуге жауапты. Conway’s law (Конвей заңы): жүйе дизайны оны жобалаған ұйымның коммуникациялық құрылымын қайталайтыны туралы заң. Domain complexity (Домендік күрделілік): бағдарламалық қамтамасыз ету арқылы шешіліп жатқан мәселенің қаншалықты күрделі екендігі. Dunbar’s number (Данбар саны): бір адам сенім арта алатын адамдар санының шегі (шамамен 15 адам). Enabling team (Қолдаушы команда): белгілі бір техникалық саладағы мамандардан тұратын, басқа командаларға біліктілік олқылықтарын толтыруға көмектесетін топ. Extraneous cognitive load (Сыртқы когнитивті жүктеме): тапсырма орындалатын ортаға қатысты жүктеме (мысалы, «мына компонентті қалай орналастырамын?»). Facilitating mode (Жәрдемдесу режимі): бір команданың екінші командаға кедергілерді жоюға көмектесуі. Flow of change (Өзгеріс ағыны): пайдаланушы мақсаттарына бағытталған бағдарламалық қызметтегі жаңартулар тізбегі. Fracture plane (Сыну жазықтығы): бағдарламалық жүйені оңай бөлуге болатын табиғи «жіктер». Germane cognitive load (Маңызды когнитивті жүктеме): оқу немесе жоғары нәтиже үшін ерекше назар аударуды қажет ететін тапсырма аспектілері. Intrinsic cognitive load (Ішкі когнитивті жүктеме): мәселенің өзіне тән іргелі аспектілері (мысалы, «Java класының құрылымы қандай?»). Joined-at-the-database monolith (Мәліметтер базасы арқылы байланысқан монолит): бір базалық схемаға қосылған, бөлек өзгерту және тестілеу қиын қосымшалар. Platform team (Платформалық команда): ағынға бағытталған командаларға автономиямен жұмыс істеуге мүмкіндік береді. Reverse Conway maneuver (Кері Конвей маневрі): қажетті архитектураға қол жеткізу үшін команда құрылымын бейімдеу. Stream-aligned team (Ағынға бағытталған команда): құнды жұмыс ағынына бағытталған команда. Team API: әр команданы қоршап тұрған API (интерфейс). Thinnest viable platform (Ең жұқа өміршең платформа): платформаны шағын ұстау мен оның тиімділігі арасындағы тепе-теңдік. X-as-a-Service mode: минималды ынтымақтастықпен бір нәрсені тұтыну немесе ұсыну.

ҰСЫНЫЛАТЫН ӘДЕБИЕТТЕР

Accelerate: Nicole Forsgren, Jez Humble, және Gene Kim. Designing Delivery: Jeff Sussna. Fearless Change: Mary Lynn Manns және Linda Rising. Team Genius: Rich Karlgaard және Michael S. Malone. Agile Development in the Large: Jutta Eckstein. Domain-Driven Design: Eric Evans. Thinking in Promises: Mark Burgess. Continuous Delivery: Jez Humble және David Farley. Release It!: Michael T. Nygard. Team Guide to Software Operability: Matthew Skelton және Rob Thatcher. Team Guide to Software Testability: Ash Winter және Rob Meaney. Team Guide to Software Releasability: Manuel Pais және Chris O’Dell.

СІЛТЕМЕЛЕР

Ackoff, Russell L. Re-Creating the Corporation. Adams, Paul. “Scaling Product Teams.” Inside Intercom. Adkins, Lyssa. Coaching Agile Teams. Allen, Thomas J. Managing the Flow of Technology. Allspaw, John. “Blameless PostMortems and a Just Culture.” Almeida, Thiago. “DevOps Lessons Learned at Microsoft Engineering.” Ancona, Deborah Gladstein, және David F. Caldwell. “Demography and Design.” Axelrod, Robert A. Complexity of Cooperation. Beer, Stafford. Brain of the Firm. Bernstein, Ethan, John Bunch, Niko Canner, және Michael Lee. “Beyond the Holacracy Hype.” Bernstein, Ethan S., және Stephen Turban. “The Impact of the ‘Open’ Workspace on Human Collaboration.” Betz, Charles. Managing Digital. Beyer, Betsy, et al. Site Reliability Engineering. Bosch, Jan. “On the Development of Software Product-Family Components.” Bottcher, Evan. “What I Talk About When I Talk About Platforms.” Brandolini, Alberto. “Strategic Domain Driven Design with Context Mapping.” Brooks, Fred. The Mythical Man-Month. Brown, Simon. “Are You a Software Architect?”

Брайсон, Брэндон. «Сәулетшілер код жазуы керек: сәулетшінің қате түсінігі». InfoQ, 6 тамыз, 2015. https://www.infoq.com/articles/architects-should-code-bryson.

Берджесс, Марк. «Уәделермен ойлау: ынтымақтастыққа арналған жүйелерді жобалау». Sebastopol, CA: O’Reilly Media, 2015.

Караон, Паскаль. «Күрделі әлеуметтік-техникалық жүйелердің (адамдар мен технологияның өзара әрекеттесуін зерттейтін сала) адам факторлары». Applied Ergonomics, Арнайы шығарылым: Эргнономикадағы әртүрлілікпен кездесу 37 № 4 (2006): 525–535. https://doi.org/10.1016/j.apergo.2006.04.011.

Каселла, Карен. «Контексті ауыстырып қосуды (бір тапсырмадан екіншісіне ауысу кезіндегі зейіннің бөлінуі) азайту арқылы команда өнімділігін арттыру | LinkedIn». LinkedIn Pulse, 26 қазан, 2016. https://www.linkedin.com/pulse/improving-team-productivity-reducing-context-karen-casella/.

Чаудхари, Мукеш. «Компоненттік командалармен жұмыс істеу: күрделілікті қалай игеруге болады — Scrum Alliance». ScrumAlliance.org, 5 қыркүйек, 2012. https://www.scrumalliance.org/community/member-articles/301.

Чернс, Альберт. «Әлеуметтік-техникалық жобалау принциптері». Human Relations 29 № 8 (1976): 783–792. https://doi.org/10.1177/001872677602900806.

Клегг, Крис У. «Жүйені жобалауға арналған әлеуметтік-техникалық принциптер». Applied Ergonomics 31 № 5 (2000): 463–477. https://doi.org/10.1016/S0003-6870(00)00009-0.

Кокрофт, Адриан. «Goto Berlin — Микросервистерге (бағдарламалық жасақтаманы шағын, тәуелсіз қызметтер ретінде құру тәсілі) көшу (жылдам жеткізу)». GOTO Berlin конференциясында ұсынылды, Берлин, 15 қараша, 2014. http://www.slideshare.net/adriancockcroft/goto-berlin.

Кон, Майк. «Scrum командасының құрылымын бағалауға арналған тоғыз сұрақ». Mountain Goat Software (блог), 9 наурыз, 2010. https://www.mountaingoatsoftware.com/blog/nine-questions-to-assess-team-structure.

Конвей, Мелвин Э. «Комитеттер қалай өнертабыс жасайды? Ұйымдық жобалау критерийлері». Datamation, 1968.

Конвей, Мел. «Қосымшаларды әзірлеуді жеңілдетуге бағытталған он екі сабақ», MelConway.com, 3 қаңтар, 2017. http://melconway.com/Home/pdf/simplify.pdf.

Кули, Фэйт. «Тиімді бағдарламалық қамтамасыз етуді әзірлеуге арналған ұйымдық дизайн». SlideShare, Dev9Com жариялаған, 12 қараша, 2014. http://www.slideshare.net/Dev9Com/organizational-design-for-effective-software-development.

Коплиен, Джеймс О. және Нил Харрисон. «Agile бағдарламалық жасақтамасын әзірлеудің ұйымдық үлгілері». Upper Saddle River, NJ: Pearson Prentice Hall, 2005.

Коттмейер, Майк. «Agile кәсіпорныңызды құру кезінде ескерілетін мәселелер». LeadingAgile (блог), 5 ақпан, 2014. https://www.leadingagile.com/2014/02/structure-agile-enterprise/.

Куту, Дайан. «Командалар неге жұмыс істемейді?». Harvard Business Review, 1 мамыр, 2009. https://hbr.org/2009/05/why-teams-dont-work.

Кроуфорд, Джейсон. «Amazon-ның "екі пицца командасы": бөлімшелерді ұйымдастырудың ең үздік үлгісі». JasonCrawford.org (блог), 30 шілде, 2013. http://blog.jasoncrawford.org/two-pizza-teams.

Каннингем, Уорд. «Техникалық қарыздың (жылдам, бірақ сапасыз шешімдердің салдарынан болашақта туындайтын қиындықтар) жоғары құнын түсіну, Уорд Каннингем — DZone Agile». Dzone.com, 24 тамыз, 2013. https://dzone.com/articles/understand-high-cost-technical.

Кусумано, Майкл А. «Microsoft құпиялары: әлемдегі ең қуатты бағдарламалық жасақтама компаниясы технологияларды қалай жасайды, нарықты қалай қалыптастырады және адамдарды қалай басқарады», 1-ші Touchstone басылымы. New York: Simon and Schuster, 1988.

Катлер, Джон. «Сіздің "функциялар фабрикасында" жұмыс істейтініңіздің 12 белгісі». Hacker Noon, 17 қараша, 2016. https://hackernoon.com/12-signs-youre-working-in-a-feature-factory-44a5b938d6a2.

Дэвис, Рэйчел және Лиз Седли. «Agile коучинг». Raleigh, NC: Pragmatic Bookshelf, 2009.

ДеГрандис, Доминика. «Жұмысты көрнекі ету: жұмыс ағынын оңтайландыру үшін уақыт ұрлығын әшкерелеу». Portland, OR: IT Revolution Press, 2017.

ДеМарко, Том және Тимоти Листер. «Peopleware: өнімді жобалар мен командалар», 2-ші өңделген басылым. New York, NY: Dorset, 1999.

Деминг, У. Эдвардс. «Дағдарыстан шығу». Cambridge, MA: MIT Press, 1986.

ДеСанктис, Джеральдин және Маршалл Скотт Пул. «Озық технологияларды қолданудағы күрделілікті қамту: бейімделгіш құрылымдау теориясы». Organization Science 5 № 2 (мамыр 1994): 121–147.

Доган, Джаана Б. «SRE (Site Reliability Engineering — жүйені басқарудың бағдарламалық тәсілі) моделі». Medium, 31 шілде, 2017. https://medium.com/@rakyll/the-sre-model-6e19376ef986.

Дурли, Скотт және Скотт Уиттхофт. «Кеңістік жасаңыз: шығармашылық ынтымақтастық үшін жағдайды қалай жасау керек». Hoboken, NJ: John Wiley & Sons, 2012.

Дрискелл, Джеймс Э. және Эдуардо Салас. «Ұжымдық мінез-құлық және команда жұмысының нәтижесі». Human Factors 34 № 3 (1992): 277–288. https://doi.org/10.1177/001872089203400303.

Дрискелл, Джеймс Э., Эдуардо Салас және Джоан Джонстон. «Стресс командалық перспективаны жоғалтуға әкеле ме?». Group Dynamics: Theory, Research, and Practice 3, № 4 (1999): 291–302.

Друкер, Питер. «Күнделікті Друкер: істерді дұрыс орындауға арналған 366 күндік түсінік пен мотивация». New York: HarperCollins, 2018.

Данбар, Р. И. М. «Неокортекс көлемі приматтардағы топ көлеміне шектеу ретінде». Journal of Human Evolution 22, № 6 (1992): 469–493. https://doi.org/10.1016/0047-2484(92)90081-J.

Данбар, профессор Робин. «Бір адамға қанша дос керек?: Данбар саны және басқа да эволюциялық ерекшеліктер». London: Faber & Faber, 2010.

Экштейн, Ютта. «Ауқымды Agile әзірлемесі: тереңге бойлау». New York: Dorset, 2004.

Экштейн, Ютта. «Ауқымды Agile әзірлемесіндегі сәулет». Agile әдістері жинағында. Торгейр Дингсёр және басқалары редакциялаған. Switzerland, Springer International Publishing, 2014.

Эдмондсон, Эми. «Жұмыс командаларындағы психологиялық қауіпсіздік және оқу мінез-құлқы». Administrative Science Quarterly 44 № 2 (1999): 350–383. https://doi.org/10.2307/2666999.

Эдмондсон, Эми С. «Оқу қаупін басқару: жұмыс командаларындағы психологиялық қауіпсіздік». International Handbook of Organization Teamwork and Cooperative Working жинағында. Hoboken, NJ: Wiley & Sons, 2003.

Эдвардс, Дэймон. «DevOps дегеніміз не?». Dev2Ops.org, 23 ақпан, 2010. http://dev2ops.orgg/2010/02/what-is-devops.

Кәсіпорындық PaaS-тың негізгі элементтері. Palo Alto, CA: Pivotal, 2015. https://content.pivotal.io/white-papers/the-essential-elements-of-enterprise-paas.

Эванс, Эрик. «Доменге негізделген жобалау: бағдарламалық жасақтаманың негізіндегі күрделілікпен күресу». Boston, MA: Addison Wesley, 2003.

Эванс, Уильям. «Жылдамдық қажеттілігі: кәсіпорын сәулеті арқылы DevOps-ты енгізу | #DOES16». SlideShare, Уильям Эванс жариялаған, 2 қараша, 2016. https://www.slideshare.net/willevans/the-need-for-speed-enabling-devops-through-enterprise-architecture.

Фан, Сяоцун, По-Чун Чен және Джон Йен. «Адам-агент командалық жұмысын қолдау үшін HMM негізіндегі когнитивті жүктеме (адамның жұмыс істеу жадына түсетін ақпарат мөлшері) модельдерін үйрену». Cognitive Systems Research 11, № 1 (2010): 108–119.

Фезерс, Майкл. «Ескірген кодпен тиімді жұмыс істеу». Upper Saddle River, NJ: Prentice Hall, 2004.

Форрестер, Расс және Аллан Б. Дрекслер. «Командаға негізделген ұйым өнімділігінің моделі». The Academy of Management Executive 13 № 3 (1999), 36–49.

Форсгрен, PhD, Николь, Джез Хамбл және Джин Ким. «Accelerate: үнемді бағдарламалық жасақтама және DevOps ғылымы: жоғары өнімді технологиялық ұйымдарды құру және ауқымдау». Portland, Oregon: IT Revolution Press, 2018.

Фаулер, Мартин. «Bliki: Шектелген контекст». MartinFowler.com (блог), 15 қаңтар, 2014. https://martinfowler.com/bliki/BoundedContext.html.

Фаулер, Мартин. «Bliki: Микросервистерге қойылатын алғышарттар». MartinFowler.com (блог), 28 тамыз, 2014. https://martinfowler.com/bliki/MicroservicePrerequisites.html.

Фрайд, Джейсон және Давид Хейнемейер Ханссон. «Қашықтан жұмыс істеу: кеңсе міндетті емес». NY: Crown Business, 2013.

Готхелф, Джефф және Джош Сейден. «Сезіну және жауап беру: сәтті ұйымдар клиенттерді қалай тыңдайды және жаңа өнімдерді қалай үздіксіз жасайды». Boston, Massachusetts: Harvard Business Review Press, 2017.

Гринлиф, Роберт К. «Қызметші ретіндегі көшбасшы», өңделген басылым. Atlanta, GA: The Greenleaf Center for Servant Leadership, 2015.

«Нұсқаулық: команда тиімділігін түсіну». re:Work веб-сайты, https://rework.withgoogle.com/guides/understanding-team-effectiveness/steps/define-team/.

Холл, Джон. «ITSM, DevOps және неге үш деңгейлі қолдауды "үйірлесу" (swarming) әдісімен алмастыру керек». Medium, 17 желтоқсан, 2016. https://medium.com/@JonHall_/itsm-devops-and-why-the-three-tier-structure-must-be-replaced-with-swarming-91e76ba22304.

Хэсти, Шейн. «Сэм Гукенхаймермен Microsoft-тың бұлттық ырғаққа көшу жолы туралы сұхбат». InfoQ, 17 қазан, 2014. https://www.infoq.com/articles/agile2014-guckenheimer.

HBS Communications. «Күрделі мәселелер бойынша ынтымақтастық жасаңыз, бірақ тек үзілістермен». Harvard Gazette (блог), 15 тамыз, 2018. https://news.harvard.edu/gazette/story/2018/08/collaborate-on-complex-problems-but-only-intermittently/.

Хелфанд, Хайди Шетцер. «Динамикалық қайта команда құру: командаларды өзгерту өнері мен даналығы». Heidi Helfand, 2018.

Хофф, Тодд. «Amazon сәулеті». High Scalability (блог), 18 қыркүйек, 2007. http://highscalability.com/blog/2007/9/18/amazon-architecture.html.

Холлидей, Бен. «Ұйымдық дизайнға "қызметке бағытталған" тәсіл». FutureGov (блог), 25 қыркүйек, 2018. https://blog.wearefuturegov.com/a-service-oriented-approach-to-organisation-design-1e075be7f578.

Хоскинс, Дрю. «Facebook-тегі инфрақұрылым командасының мүшесі болу қандай?». Quora, соңғы жаңартылған 15 ақпан, 2015. https://www.quora.com/What-is-it-like-to-be-part-of-the-Infrastructure-team-at-Facebook.

Хамбл, Джез. «"DevOps командасы" деген ұғым жоқ». Continuous Delivery (блог), 19 қазан, 2012. https://continuousdelivery.com/2012/10/theres-no-such-thing-as-a-devops-team/.

Хамбл, Джез және Дэвид Фарли. «Үздіксіз жеткізу: құрастыру, тестілеу және орналастыруды автоматтандыру арқылы бағдарламалық жасақтаманың сенімді шығарылымдары». Upper Saddle River, NJ: Addison Wesley, 2010.

Хамбл, Джез, Джоан Молески және Барри О’Рейли. «Үнемді кәсіпорын: жоғары өнімді ұйымдар қалай ауқымды инновациялар жасайды». Sebastopol, CA: O’Reilly Media, 2015.

Илген, Даниэль Р. және Джон Р. Холленбек. «Стресс және қалыпты жағдайлардағы тиімді команда жұмысы: Иерархиялық командалардағы шешім қабылдауды зерттеу теориясы мен мәліметтері». DTIC құжаты, 1993. http://oai.dtic.mil/oai/oai?verb=getRecord&metadataPrefix=html&identifier=ADA284683.

Инглес, Паул. «Kubernetes-ке тоғысу». Paul Ingles (блог), 18 маусым, 2018. https://medium.com/@pingles/convergence-to-kubernetes-137ffa7ea2bc.

innolution. «Функционалдық команда анықтамасы | Innolution». Қол жеткізілген күні: 14 қазан, 2018. https://innolution.com/resources/glossary/feature-team

«Кофе үстіндегі DevOps — Adidas». YouTube видеосы, 32:03, IT Revolution жариялаған, 3 шілде, 2018. https://www.youtube.com/watch?v=oOjdXeGp44E&feature=youtu.be&t=1071.

Джанг, Суджин. «Көпмәдениетті командалардағы мәдени делдалдық және шығармашылық өнімділік». Organization Science 28 № 6 (2017): 993–1009. https://doi.org/10.1287/orsc.2017.1162.

Джей, Грейлин және т.б. «Цикломатикалық күрделілік және код жолдары: тұрақты сызықтық байланыстың эмпирикалық дәлелдері». Journal of Software Engineering & Applications 2 (қаңтар): 137–143. https://doi.org/10.4236/jsea.2009.23020.

Джон, Вольфганг. «Қызмет көрсетушілерге арналған DevOps — келесі буын құралдары». Ericsson Research блогы. 7 желтоқсан, 2015. https://www.ericsson.com/research-blog/cloud/devops-for-service-providers-next-generation-tools/.

Джонстон, Джоан Х. және т.б. «Командалық шешім қабылдау тиімділігін өлшеуді әзірлеуде когнитивті жүктеме теориясын қолдану». Military Psychology 3 (2003). https://www.tandfonline.com/doi/abs/10.1037/h0094967.

Карлгаард, Рич және Майкл С. Мэлоун. «Командалық данышпандық: жоғары өнімді ұйымдардың жаңа ғылымы». New York, NY: HarperBusiness, 2015.

Келли, Аллан. «Бағдарламалық жасақтаманы әзірлеушілерге арналған бизнес-үлгілер». Chichester, UK: John Wiley & Sons, 2012.

Келли, Аллан. «Конвей заңы бағдарламалық жасақтама сәулетіне қарсы». Dzone.com (блог), 14 наурыз, 2013. https://dzone.com/articles/conways-law-v-software.

Келли, Аллан. «Конвей заңы және үздіксіз жеткізу». SlideShare, Аллан Келли жариялаған, 9 сәуір, 2014, https://www.slideshare.net/allankellynet/conways-law-continuous-delivery.

Келли, Аллан. «Жобаларсыз — жобалардан тыс». InfoQ, 5 желтоқсан, 2014. https://www.infoq.com/articles/kelly-beyond-projects.

Келли, Аллан. «Жобалық миопия: неге жобалар бағдарламалық жасақтамаға зиян келтіреді #NoProjects». Allan Kelly: 2018.

Келли, Аллан. «Конвей заңына оралу». Allan Kelly Associates (блог), 17 қаңтар, 2006. https://www.allankellyassociates.co.uk/archives/1169/return-to-conways-law/.

Керстен, Мик. «Жобадан өнімге: Flow Framework арқылы цифрлық үзіліс дәуірінде қалай аман қалуға және дамуға болады». Portland, OR: IT Revolution Press, 2018.

Ким, Джин, Джез Хамбл, Патрик Дебуа және Джон Уиллис. «DevOps бойынша нұсқаулық: технологиялық ұйымдарда әлемдік деңгейдегі икемділікті, сенімділікті және қауіпсіздікті қалай жасау керек». Portland, OR: IT Revolution Press, 2016.

Ким, доктор Кюнг Хи және Роберт А. Пирс. «Конвергентті және дивергентті ойлау». Encyclopedia of Creativity, Invention, Innovation and Entrepreneurship жинағында. New York: Springer, 2013.

Китагава, Джастин. «Twilio-дағы платформалар: әзірлеушілердің тиімділігін арттыру». InfoQ, 18 қазан, 2018. https://www.infoq.com/presentations/twilio-devops

Китсон, Джон. «Сквадтардың денсаулығын тексеру». Sky Betting & Gaming Technology (блог), 1 ақпан, 2017. https://technology.skybettingandgaming.com/2017/02/01/squad-health-checks/.

Книберг, Хенрик және Андерс Иварссон. «Spotify-да Agile-ді ауқымдау: трайбтар, сквадтар, чаптерлер және гильдиялар». Crisp’s блогы. Қазан 2012. https://blog.crisp.se/wp-content/uploads/2012/11/SpotifyScaling.pdf.

Книберг, Хенрик. «Шынайы өмірдегі Agile ауқымдау». Agile Tour Bangkok-та ұсынылды, Таиланд, 21 қараша, 2015. http://blog.crisp.se/wp-content/uploads/2015/11/Real-life-agile-scaling.pdf.

Книберг, Хенрик. «Сквадтардың денсаулығын тексеру моделі — нені жақсарту керектігін визуализациялау». Spotify Labs (блог), 16 қыркүйек, 2014. https://labs.spotify.com/2014/09/16/squad-health-check-model/

Найт, Памела. «Сатып алу қауымдастығы командасының динамикасы: Такман моделі мен DAU моделі». Naval Postgraduate School 4-ші жылдық симпозиумының материалдары (2007). https://apps.dtic.mil/dtic/tr/fulltext/u2/a493549.pdf.

Коттер, Джон П. «Жеделдету!». Harvard Business Review, 1 қараша, 2012. https://hbr.org/2012/11/accelerate.

Крамер, Стейси Д. «Amazon-ның ең дұрыс жасаған қадамы: Платформа». Gigaom, 12 қазан, 2011. https://gigaom.com/2011/10/12/419-the-biggest-thing-amazon-got-right-the-platform/.

Лалу, Фредерик. «Ұйымдарды қайта құру: келесі кезеңдегі ұйымдар туралы әңгімеге қосылуға иллюстрацияланған шақыру». Oxford, UK: Nelson Parker, 2016.

Лейн, Ким. «Amazon жетістігінің құпиясы — ішкі API-лер (бағдарламалардың өзара әрекеттесуіне арналған интерфейс)». API Evangelist (блог), 12 қаңтар, 2012. http://apievangelist.com/2012/01/12/the-secret-to-amazons-success-internal-apis/.

Ларман, Крейг және Бас Водде. «Икемділік үшін компоненттік командалардан гөрі функционалдық командаларды таңдаңыз». InfoQ, 15 шілде, 2008. https://www.infoq.com/articles/scaling-lean-agile-feature-teams.

Ларман, Крейг және Бас Водде. «Ауқымды Scrum: LeSS арқылы көбірек нәтиже». Upper Saddle River, NJ: Addison-Wesley Professional, 2016.

Леффингвелл, Дин. «Функционалдық командалар мен компоненттік командалар (жалғасы)». Scaling Software Agility (блог), 2 мамыр, 2011. https://scalingsoftwareagility.wordpress.com/2011/05/02/feature-teams-vs-component-teams-continued/.

Леффингвелл, Дин. «Ауқымды ұйымдастыру: функционалдық командалар мен компоненттік командалар — 3-бөлім». Scaling Software Agility (блог), 22 шілде, 2009. https://scalingsoftwareagility.wordpress.com/2009/07/22/organizing-agile-at-scale-feature-teams-versus-component-teams-part-3/.

Леффингвелл, Дин. «Бағдарламалық жасақтаманың икемділігін ауқымдау: ірі кәсіпорындарға арналған үздік тәжірибелер». Upper Saddle River, NJ: Addison-Wesley Professional, 2007.

Ленсиони, Патрик М. «Команданың бес кемшілігі: көшбасшылық туралы хикая». San Francisco, CA: John Wiley & Sons, 2002.

Левесон, Нэнси Г. «Қауіпсіз әлемді құру: қауіпсіздікке қолданылатын жүйелік ойлау». Cambridge, MA: MIT Press, 2017.

Левина, Наталья және Эммануэль Вааст. «Тәжірибеде шекараларды еңсеру құзыреттілігінің пайда болуы: ақпараттық жүйелерді енгізу мен қолдануға салдары». MIS Quarterly 29 № 2 (маусым 2005): 335–363. https://papers.ssrn.com/abstract=1276022.

Льюис, Джеймс. «Микросервистер және Конвейдің кері маневрі — Джеймс Льюис». YouTube видеосы, 57:57, NDC Conferences жариялаған, 16 ақпан, 2017. https://www.youtube.com/watch?v=uamh7xppO3E.

Лим, Бенг-Чонг және Кэтрин Дж. Клейн. «Командалық ментальді модельдер және команда жұмысының нәтижесі: Командалық ментальді модельдердің ұқсастығы мен дәлдігі әсерін зерттеу». Journal of Organizational Behavior 27, № 4 (1 маусым, 2006): 403–418. https://doi.org/10.1002/job.387.

Линдерс, Бен. «Тиімді ұйымдарды өсіру үшін командаларды ауқымдау». InfoQ, 11 тамыз, 2016. https://www.infoq.com/news/2016/08/scaling-teams.

Лонг, Джош. «GARY (Қайталаңыз, ештеңе етпейді)». Твит @starbuxman, 25 мамыр, 2016. https://twitter.com/starbuxman/status/735550836147814400.

Лоу, Стивен А. «Доменге негізделген дизайнға қол жеткізу үшін Event Storming-ті қалай пайдалану керек». TechBeacon, 15 қазан, 2015. https://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design.

Ло, Цзяо және т.б. «Иерархиялық өнім ұйымынан ашық платформалық ұйымға көшу: Қытайдан кейс-стади». Journal of Organization Design 7 (қаңтар): 1. https://doi.org/10.1186/s41469-017-0026-x.

Маккормак, Алан, Джон Руснак және Карлисс Й. Болдуин. «Күрделі бағдарламалық дизайн құрылымын зерттеу: ашық бастапқы код пен меншікті кодты эмпирикалық зерттеу». Management Science 52, № 7 (2006): 1015–1030. https://doi.org/10.1287/mnsc.1060.0552.

Маккормак, Алан, Карлисс Й. Болдуин және Джон Руснак. «Өнім және ұйымдық сәулет арасындағы екіжақтылықты зерттеу: "айналау" (mirroring) гипотезасын тексеру». Research Policy 41, № 8 (қазан 2012): 1309–1024. http://www.hbs.edu/faculty/Pages/item.aspx?num=43260.

Малан, Рут. «Конвей заңы». TraceintheSand.com (блог), 13 ақпан, 2008. http://traceinthesand.com/blog/2008/02/13/conways-law/.

Маннс, Мэри Линн және Линда Райзинг. «Қорқынышсыз өзгеріс: жаңа идеяларды енгізу үлгілері». Boston, MA: Addison Wesley, 2004.

Маршалл, Боб. «Команда — бұл бірге жұмыс істейтін адамдар тобы емес. Команда — бұл команда мүддесін өз мүддесінен жоғары қоятын адамдар тобы». Твит, @flowchainsensei, 29 қазан, 2018. https://twitter.com/flowchainsensei/status/1056838136574152704.

Маккристал, генерал Стэнли және т.б. «Командалар командасы: күрделі әлемге арналған жаңа іс-қимыл ережелері». New York, NY: Portfolio Penguin, 2015.

Медоуз, Донелла. «Рычагтық нүктелер: жүйеге араласу орындары». Hartland, VT: Sustainability Institute, 1999. http://donellameadows.org/wp-content/userfiles/Leverage_Points.pdf.

«Микросервистер: Жылдам жеткізу үшін үлкен командаларды ұйымдастыру». SlideShare, Pivotal жариялаған, 10 тамыз, 2016. https://www.slideshare.net/Pivotal/microservices-organizing-large-teams-for-rapid-delivery.

Михалжов, Timo. «Барлық DevOps-пен айналысатын арнайы DevOps адамының болуы, барлық ынтымақтастықпен айналысатын арнайы ынтымақтастық адамының болуымен бірдей». Твит. @noidi. 14 сәуір, 2017. https://twitter.com/noidi/status/852879869998501889.

Миллер, Дж. А. «Сиқырлы жеті саны, плюс немесе минус екі: ақпаратты өңдеу қабілетіміздің кейбір шектеулері». Psychological Review 63 № 2 (1956): 81–97.

Миник, Эрик. «"DevOps командасының" мақсаты — ұйымның қалған бөлігіне мүмкіндік беру арқылы өзін-өзі жою болуы керек». Твит, @ericminick, 8 қазан, 2014. https://twitter.com/ericminick/status/517335119330172930.

Миник, Эрик және Кертис Янко. «"Зұлым" емес DevOps командасын құру». SlideShare, IBM Urban Code Products жариялаған, 5 наурыз, 2015. http://www.slideshare.net/Urbancode/creating-a-devops-team-that-isnt-evil.

Моул, Дэвид. «Драйв: Бақыттырақ әрі өнімдірек жұмыс орнын құру үшін Даниэль Пинктың еңбегін қалай пайдаландық». InfoQ, 10 қыркүйек, 2015. https://www.infoq.com/articles/drive-productive-workplace.

Морган-Смит, Виктория және Мэттью Скелтон. Ішкі технологиялық конференциялар (Internal Tech Conferences). Лидс, Ұлыбритания: Conflux Digital, 2019.

Моррис, Киф. Инфрақұрылым код ретінде: Бұлттағы серверлерді басқару (Infrastructure as Code: Managing Servers in the Cloud). Себастополь, Калифорния: O’Reilly Media, 2016. Инфрақұрылым код ретінде (инфрақұрылымды қолмен емес, код арқылы автоматты түрде басқару тәсілі).

Муннс, Крис. «Крис Муннс, Amazon-дағы DevOps: Микросервистер, 2 пиццалық командалар және жылына 50 миллион рет енгізу». SlideShare.net, TriNimbus жариялаған, 6 мамыр, 2016 жыл. http://www.slideshare.net/TriNimbus/chris-munns-devops-amazon-microservices-2-pizza-teams-50-million-deploys-a-year. DevOps (әзірлеу мен операциялық қызметтің бірлескен жұмыс мәдениеті). Микросервистер (бағдарламаны шағын, тәуелсіз бөліктер түрінде құру архитектурасы).

Мерфи, Найалл. «‘Сайттың сенімділігі жөніндегі инженерия’ дегеніміз не?». Landing.Google.com, https://landing.google.com/sre/interview/ben-treynor.html. Сайттың сенімділігі жөніндегі инженерия (SRE) (жүйенің сенімділігін бағдарламалық құралдармен қамтамасыз ету тәжірибесі).

Мерфи, Найалл және Бен Трейнор. «‘Сайттың сенімділігі жөніндегі инженерия’ дегеніміз не?». Landing.Google.com (блог), қаралған күні: 21 наурыз, 2019 жыл. https://landing.google.com/sre/interview/ben-treynor.html.

Нараян, Срирам. Agile IT ұйымын жобалау: Цифрлық трансформация және үздіксіз жеткізу үшін (Agile IT Organization Design: For Digital Transformation and Continuous Delivery). Нью-Йорк: Addison-Wesley Professional, 2015. Agile (икемді әзірлеу әдістемесі).

Ньюмарк, Петер. «DevOps және өнім командалары — жеңіс пе әлде жеңіліс пе?». InfoQ, 29 маусым, 2015 жыл. https://www.infoq.com/articles/devops-product-teams.

Netflix технологиялық блогы. «Netflix-тегі толық циклді әзірлеушілер — құрастырған нәрсеңді өзің басқар». Medium.com, 17 мамыр, 2018 жыл, https://medium.com/netflix-techblog/full-cycle-developers-at-netflix-a08c31f83249.

Netflix технологиялық блогы. «Netflix маймылдар армиясы (The Netflix Simian Army)». Netflix TechBlog, 19 шілде, 2011 жыл. https://medium.com/netflix-techblog/the-netflix-simian-army-16e57fbab116.

Ньюман, Сэм. Микросервистерді құру: Нақтыланған жүйелерді жобалау (Building Microservices: Design Fine-Grained Systems). Себастополь, Калифорния: O’Reilly Media, 2015.

Ньюман, Сэм. «Конвей заңын түсіндіру». ThoughtWorks (блог), 30 маусым, 2014 жыл. https://www.thoughtworks.com/insights/blog/demystifying-conways-law. Конвей заңы (жүйенің құрылымы оны жасаған ұйымның коммуникациялық құрылымын қайталайды деген қағида).

Найгард, Майкл. «Семантикалық байланыстың қауіптері — сергек әзірлеушілер». MichaelNygard.com (блог), 29 сәуір, 2015 жыл. http://michaelnygard.com/blog/2015/04/the-perils-of-semantic-coupling/.

Найгард, Майкл Т. Оны шығар! Өндіріске дайын бағдарламалық жасақтаманы жобалау және енгізу (Release It! Design and Deploy Production-Ready Software), 2-ші басылым. Роли, Солтүстік Каролина: O’Reilly, 2018.

О’Коннор, Дебра Л. және Тристан Э. Джонсон. «Өнімділікті жақсарту командаларындағы командалық танымды түсіну: Ортақ ментальді модельдердің өзгеруіне мета-талдау». Тұжырымдамалық карталау бойынша екінші халықаралық конференция материалдары (2006). https://pdfs.semanticscholar.org/4106/3eb1567e630a35b4f33f281a6bb9d193ddf5.pdf.

О’Делл, Крис. «Сен құрастырдың ба — сен басқар (Неліктен әзірлеушілер де кезекшілікте болуы керек)». SkeltonThatcher.com (блог), 18 қазан, 2017 жыл. https://skeltonthatcher.com/blog/build-run-developers-also-call/.

Оверим, Барри. «Мен Spotify Squad денсаулығын тексеру моделін қалай қолдандым — Барри Оверим — The Liberators». BarryOvereem.com (блог), 7 тамыз, 2015 жыл. http://www.barryovereem.com/how-i-used-the-spotify-squad-health-check-model/.

Паис, Мануэль. «Дэймон Эдвардс: DevOps — бұл кәсіпорынның мәселесі». InfoQ, 31 мамыр, 2014 жыл. https://www.infoq.com/interviews/interview-damon-edwards-qcon-2014.

Паис, Мануэль. «Prezi техникалық директоры 4 жылдан кейін де қалай үнемді стартап болып қалуға болатыны туралы». InfoQ, 5 қазан, 2012 жыл. https://www.infoq.com/news/2012/10/Prezi-lean-startup.

Паис, Мануэль және Мэттью Скелтон. «Мәселелерді қадағалаудың жеке құралдарының бөлуші әсері». InfoQ, 22 наурыз, 2017 жыл. https://www.infoq.com/articles/issue-tracking-tools.

Паис, Мануэль және Мэттью Скелтон. «Неліктен және қалай лог жазуды сынау керек». InfoQ, 29 қазан, 2016 жыл. https://www.infoq.com/articles/why-test-logging.

Пирс, Джо. «3-күн: Командалық оқу үшін когнитивті жүктемені басқару». 12 Devs of Xmas (блог), 28 желтоқсан, 2015 жыл. http://12devsofxmas.co.uk/2015/12/day-3-managing-cognitive-load-for-team-learning/. Когнитивті жүктеме (адамның жұмыс істеуі үшін қажетті психикалық күш мөлшері).

Пирс, Джо. «Миды бұзу: ақпараттық шамадан тыс жүктемені басқару (кеңейтілген)». SlideShare, Джо Пирс жариялаған, 29 сәуір, 2016 жыл. https://www.slideshare.net/JoPearce5/hacking-your-head-managing-information-overload-extended.

Перри, Мелисса. Құрастыру тұзағынан құтылу: Тиімді өнімді басқару қалай нақты құндылық тудырады (Escaping the Build Trap: How Effective Product Management Creates Real Value). Себастополь, Калифорния: O’Reilly, 2018.

Пфлегинг, Нильс. Күрделілік үшін ұйымдастыру: Жоғары нәтижелі ұйым құру үшін жұмысқа жанды қалай бітіруге болады (Organize for Complexity), 1-ші басылым. Германия: BetaCodex Publishing, 2014.

Пфлегинг, Нильс. «Ұйым физикасы: Әрбір компанияның 3 бейнесі». Нильс Пфлегинг (блог), 6 наурыз, 2017 жыл. https://medium.com/@NielsPflaeging/org-physics-the-3-faces-of-every-company-df16025f65f8.

Филлипс, Эми. «Бақылануды сынау (Testing Observability)». InfoQ, 5 сәуір, 2018 жыл. https://www.infoq.com/presentations/observability-testing.

Пинк, Дэниел. Драйв: Бізді не ынталандыратыны туралы таңқаларлық шындық (Drive: The Surprising Truth About What Motivates Us). Нью-Йорк: Riverhead Books, 2009.

Рэймонд, Эрик. Жаңа хакер сөздігі (The New Hacker’s Dictionary), 3-ші басылым. Бостон, Массачусетс: MIT Press, 1996.

Рид, Дж. Пол. «Кінәсіз постмортемдер жұмыс істемейді. Кінәні сезініңіз, бірақ негативке берілмеңіз». TechBeacon, 22 наурыз, 2016 жыл. https://techbeacon.com/blameless-postmortems-dont-work-heres-what-does.

Райнертсен, Дональд. Өнімді әзірлеу ағынының принциптері: Екінші буындағы үнемді өнімді әзірлеу (The Principles of Product Development Flow). Редондо-Бич, Калифорния: Celeritas Publishing, 2009.

Ренсин, Дэйв. «Google тұтынушыларының сенімділігі инженериясымен таныстыру». Google Cloud Blog, 10 қазан, 2016 жыл. https://cloud.google.com/blog/products/gcp/introducing-a-new-era-of-customer-support-google-customer-reliability-engineering/.

Робертс, Джон. Заманауи фирма: Өнімділік пен өсу үшін ұйымдық дизайн (The Modern Firm). Оксфорд: Oxford University Press, 2007.

Робертсон, Брайан Дж. Холократия: қарқынды өзгеріп жатқан әлемге арналған жаңа басқару жүйесі (Holocracy). Нью-Йорк: Henry Holt, 2015.

Рок, Дэвид және Хайди Грант. Неліктен әртүрлі командалар ақылдырақ болады (Why Diverse Teams Are Smarter). Кембридж, Массачусетс: Harvard Business Review, 2016.

Ротер, Майк. Toyota Kata: Жақсарту, бейімделу және жоғары нәтижелер үшін адамдарды басқару (Toyota Kata). Нью-Йорк: McGraw-Hill Education, 2009.

Розовский, Джулия. «re:Work — Сәтті Google командасының бес кілті». re:Work (блог), 17 қараша, 2015 жыл. https://rework.withgoogle.com/blog/five-keys-to-a-successful-google-team/.

Рубин, Кеннет С. Маңызды Scrum: Ең танымал Agile процесі бойынша практикалық нұсқаулық (Essential Scrum). Аппер-Сэддл-Ривер, Нью-Джерси: Addison Wesley, 2012.

Раммлер, Гири және Алан Браче. Өнімділікті арттыру: Ұйымдастыру схемасындағы ақ бос орындарды қалай басқаруға болады (Improving Performance), 3-ші басылым. Сан-Франциско, Калифорния: Jossey-Bass, 2013.

Салас, Эдуардо және Стивен М. Фиоре, ред. Командалық таным: процесс пен өнімділікті қозғайтын факторларды түсіну (Team Cognition). Вашингтон, Колумбия округі: American Psychological Association, 2004.

Шолтес, Инго, Павлин Мавродиев және Франк Швейцер. «Аристотельден Рингельманға дейін: Ашық бастапқы бағдарламалық жобалардағы командалық өнімділік пен үйлестіруді ауқымды талдау». Empirical Software Engineering 21 № 2 (2016): 642–683. https://doi.org/10.1007/s10664-015-9406-4.

Шоткамп, Том және Мартин Даноэсастро. «ING-тегі Agile-дегі HR-дің жетекші рөлі». BCG (блог), 1 маусым, 2018 жыл. https://www.bcg.com/en-gb/publications/2018/human-resources-pioneering-role-agile-ing.aspx.

Шварц, Марк, Джейсон Кокс, Джонатан Снайдер, Марк Ренделл, Чивас Намбиар және Мустафа Кападия. Ойлау ортасы: жеделдету үшін DevOps-тың ұйымдастырушылық модельдерін бағалау (Thinking Environments). Портленд, Орегон: IT Revolution Press, 2016.

Сейтер, Кортни. «Біз өнім тобының құрылымын 4 рет өзгерттік: Бүгінде қай жердеміз». Buffer (блог), 20 қазан, 2015 жыл. https://open.buffer.com/product-team-evolution/.

Шибата, Кеничи. «Платформа командасын қазір қалай құруға болады! Сәтті инженерияның құпиялары». Hacker Noon (блог), 29 қыркүйек, 2018 жыл. https://hackernoon.com/how-to-build-a-platform-team-now-the-secrets-to-successful-engineering-8a9b6a4d2c8.

Сименон, Стефан және Вибе де Роос. «Бағдарламалық қамтамасыз етуді жеткізуді жеделдету және қауіпсіздікті арттыру үшін ABN AMRO-да CI/CD-ді өзгерту». SlideShare, DevOps.com жариялаған, 27 наурыз, 2018 жыл. https://www.slideshare.net/DevOpsWebinars/transforming-cicd-at-abn-amro-to-accelerate-software-delivery-and-improve-security.

Синха, Харш. «Харш Синха TransferWise-да мәдениетті қалыптастыру туралы». InfoQ, 19 ақпан, 2018 жыл. https://www.infoq.com/podcasts/Harsh-Sinha-transferwise-building-culture.

Скелтон, Мэттью. «Командалардың әртүрлі топологиялары DevOps мәдениетіне қалай әсер етеді». InfoQ, 2 қыркүйек, 2015 жыл. https://www.infoq.com/articles/devops-team-topologies.

Скелтон, Мэттью. «Командаңыз үшін дұрыс DevOps құралдарын қалай табуға болады». TechBeacon, 2018 жыл. https://techbeacon.com/how-find-right-devops-tools-your-team.

Скелтон, Мэттью. «Agile ретроспективалары үшін мұзжарғыш — Empathy Snap». MatthewSkelton.net (блог), 15 қараша, 2012 жыл. http://empathysnap.com/.

Скелтон, Мэттью. Жаңадан бастаушыларға арналған техникалық келіссөздер (Tech Talks for Beginners). Лидс, Ұлыбритания: Conflux Digital, 2018.

Скелтон, Мэттью. «DevOps дамуы үшін қандай команда құрылымы қолайлы?». Matthew Skelton.net (блог), 22 қазан, 2013 жыл. https://blog.matthewskelton.net/2013/10/22/what-team-structure-is-right-for-devops-to-flourish/.

Скелтон, Мэттью. «Сіздің командаңыздың API-іне мыналар кіреді: — Код: REST соңғы нүктелері, кітапханалар, клиенттер, интерфейс және т.б. — Wiki / Құжаттар — әсіресе ‘Нұсқаулықтар’ — Командалық чат құралдарына көзқарасыңыз (Slack/Hipchat) — Басқа командалар сізбен байланысу үшін қажет нәрсенің бәрі. Бұл тек код туралы емес. #DevEx». Tweet, @matthewpskelton, 25 шілде, 2018 жыл. https://twitter.com/matthewpskelton/status/1022111880423395329.

Скелтон, Мэттью және Роб Тэтчер. Бағдарламалық жасақтаманың жұмыс істеу қабілеті бойынша командалық нұсқаулық (Team Guide to Software Operability). Лидс, Ұлыбритания: Conflux Books, 2016.

Скулмовски, Александр және Гюнтер Даниэль Рей. «Эмбодимент арқылы оқыту жағдайында когнитивті жүктемені өлшеу». Frontiers in Psychology 8 (2 тамыз, 2017 жыл). https://doi.org/10.3389/fpsyg.2017.01191.

Смит, Стив және Мэттью Скелтон, ред. Сапаны ендіру (Build Quality In). Лидс, Ұлыбритания: Conflux Digital, 2015.

Сноуден, Дейв. «5, 15 және 150 ережесі». Cognitive Edge (блог), 10 желтоқсан, 2006 жыл. http://cognitive-edge.com/blog/logn-0-093-3-389-logcr-1-r20-764-t3410-35-p0-001/.

Соса, Мануэль Э., Стивен Д. Эппингер және Крейг М. Роулз. «Күрделі өнімді әзірлеудегі өнім архитектурасы мен ұйымдық құрылымның сәйкес келмеуі». Management Science 50 № 12 (желтоқсан 2004): 1674–1689.

Стэнфорд, Наоми. Ұйымдық дизайн бойынша нұсқаулық: жоғары нәтижелі және бейімделгіш кәсіпорындарды құру (Economist Books), 2-ші басылым. Лондон: Economist Books, 2015.

Стомпфф, Гвидо. «Командалық танымға жағдай жасау: Дизайнерлер NPD командаларының іс-әрекетін қалай бейнелейді». ResearchGate, қыркүйек 2012 жыл. https://www.researchgate.net/publication/254831689_Facilitating_Team_Cognition_How_designers_mirror_what_NPD_teams_do.

Строуд, Дайан Э., Сид Л. Хафф, Беверли Хоуп және Себастьян Линк. «Бір жерде орналасқан Agile бағдарламалық қамтамасыз етуді әзірлеу жобаларындағы үйлестіру». Journal of Systems and Software, арнайы шығарылым: Agile әзірлеу 85, № 6 (1 маусым, 2012 жыл): 1222–38. https://doi.org/10.1016/j.jss.2012.02.017.

Суссна, Джефф. Жеткізуді жобалау: Цифрлық қызмет көрсету экономикасындағы АТ туралы қайта ойлану (Designing Delivery). Себастополь, Калифорния: O’Reilly Media, 2015.

Свеллер, Джон. «Мәселені шешу кезіндегі когнитивті жүктеме: оқуға әсері». Cognitive Science 12 № 2 (1988): 257–285.

Свеллер, Джон. «Когнитивті жүктеме теориясы, оқудағы қиындықтар және нұсқаулық дизайн». Learning and Instruction 4 (1994): 295–312.

«System Team». Scaled Agile Framework веб-сайты, соңғы жаңартылуы: 5 қазан, 2018 жыл. https://www.scaledagileframework.com/system-team/.

Такман, Брюс В. «Шағын топтардағы даму кезектілігі». Psychological Bulletin 63 № 6 (1965): 384–399. https://doi.org/10.1037/h0022100.

Тюн, Ник. «Доменге негізделген архитектуралық диаграммалар». Nick Tune’s Tech Strategy Blog, 15 тамыз, 2015 жыл. https://medium.com/nick-tune-tech-strategy-blog/domain-driven-architecture-diagrams-139a75acb578.

Тюн, Ник және Скотт Миллетт. Автономиялық командалар мен сервистерді жобалау (Designing Autonomous Teams and Services). Себастополь, Калифорния: O’Reilly Media, 2017.

Уркарт, Джеймс. «Коммуникациялар және Конвей заңы». Digital Anatomy (блог), 28 қыркүйек, 2016 жыл. https://medium.com/digital-anatomy/communications-and-conways-law-6a1a9deae32.

Уркарт, Джеймс. «Бұлтты әлемдегі АТ операциялары». CNET, 15 қыркүйек, 2010 жыл. https://www.cnet.com/news/it-operations-in-a-cloudy-world/.

Уордли, Саймон. «Уордлидің ‘Құндылықтар тізбегі’ картасына кіріспе». CIO UK, 19 наурыз, 2015 жыл. https://www.cio.co.uk/it-strategy/introduction-wardley-value-chain-mapping-3604565/.

Уэстелл, Кэтрин. «Co-Op-тағы сервис дизайны туралы айтқанда не айтқымыз келеді». Co-Op Digital Blog, 25 қазан, 2018 жыл. https://digitalblog.coop.co.uk/2018/10/25/what-we-mean-when-we-talk-about-service-design-at-the-co-op/.

Уэббер, Эмили. Сәтті тәжірибелік қоғамдастықтарды құру (Building Successful Communities of Practice). Сан-Франциско, Калифорния: Blurb, 2018.

Вайнберг, Джеральд М. Жалпы жүйелік ойлауға кіріспе (An Introduction to General Systems Thinking), 25 жылдық күміс мерейтойлық басылым. Нью-Йорк: Dorset, 2001.

Винер, Норберт. Кибернетика: немесе жануар мен машинадағы бақылау мен байланыс (Cybernetics), 2-ші басылым. Кембридж, Массачусетс: MIT Press, 1961.

Веструм, Р. 2004. «Ұйымдық мәдениеттердің типологиясы». Quality & Safety in Health Care 13 Қосымша 2 (1961): ii22–27. https://doi.org/10.1136/qshc.2003.009522.

«DevOps дамуы үшін қандай команда құрылымы қолайлы?». DevOpsTopologies.com, қаралған күні: 21 наурыз, 2019 жыл. http://web.devopstopologies.com.

Уайли, Эван. «Pivotal Cloud Foundry-де өзін-өзі ұқсастық арқылы XP-ны масштабтау». Agile Alliance (блог), 28 шілде, 2018 жыл. https://www.agilealliance.org/resources/experience-reports/scaling-xp-through-self-similarity-at-pivotal-cloud-foundry/.

Вомак, Джеймс П. және Дэниел Т. Джонс. Lean ойлау: корпорацияңыздағы шығындарды жойып, байлық жасаңыз (Lean Thinking). Нью-Йорк: Simon & Schuster/Free Press, 2003.

Замбонелли, Франко. «Әлеуметтік-техникалық қалалық суперорганизмдерге қарай». Computer, 2012. http://spartan.ac.brocku.ca/~tkennedy/COMM/Zambonelli2012.pdf.

ЕСКЕРТПЕЛЕР

Алғысөз

Конвей, «Комитеттер қалай өнертабыс жасайды?».

Кіріспе

Скелтон, «DevOps дамуы үшін қандай команда құрылымы қолайлы?».

Скелтон, «Командалардың әртүрлі топологиялары DevOps мәдениетіне қалай әсер етеді».

1-тарау

Шварц және т.б., Ойлау ортасы, 21.

Пфлегинг, Күрделілік үшін ұйымдастыру, 34–41.

Пфлегинг, Күрделілік үшін ұйымдастыру.

Лалу, Ұйымдарды қайта құру; Робертсон, Холократия.

Стэнфорд, Ұйымдық дизайн бойынша нұсқаулық, 14–16.

Конвей, «Комитеттер қалай өнертабыс жасайды?», 31.

Конвей, «Комитеттер қалай өнертабыс жасайды?»; Келли, «Конвей заңы және үздіксіз жеткізу».

Келли, «Конвей заңы мен бағдарламалық жасақтама архитектурасы».

Рэймонд, Жаңа хакер сөздігі, 124.

Льюис, «Микросервистер және кері Конвей».

Пинк, Драйв, 49.

2-тарау

«DevOps Over Coffee – Adidas;» Фернандо Корнаго, авторлармен жеке электрондық пошта байланысы, наурыз 2019 жыл.

МакКормак және т.б., «Күрделі бағдарламалық дизайн құрылымын зерттеу», 1015–1030; МакКормак және т.б., «Өнім және ұйымдық архитектура арасындағы қосарлылықты зерттеу», 1309–1024.

Соса және т.б., «Күрделі өнімді әзірлеудегі өнім архитектурасы мен ұйымдық құрылымның сәйкес келмеуі», 1674–1689.

Малан, «Конвей заңы».

Конвей, «Комитеттер қалай өнертабыс жасайды?», 28.

Форсгрен және т.б., Accelerate, 63.

Найгард, Release It!, 4.

МакКормак және т.б., «Күрделі бағдарламалық дизайн құрылымын зерттеу».

Робертс, Заманауи фирма, 190.

Райнертсен, Өнімді әзірлеу ағынының принциптері, 257.

Малан, «Конвей заңы».

Келли, «Конвей заңына оралу».

Стэнфорд, Ұйымдық дизайн бойынша нұсқаулық, 4.

Соса және т.б., «Өнім архитектурасының сәйкес келмеуі».

Кон, «Scrum командасының құрылымын бағалауға арналған тоғыз сұрақ».

Книберг, «Нақты өмірдегі Agile масштабтау».

3-тарау

Дрискелл және Салас, «Ұжымдық мінез-құлық және командалық өнімділік», 277–288.

МакКристал және т.б., Командалар командасы (Team of Teams), 94.

Розовский, «re:Work — Сәтті Google командасының бес кілті».

Кроуфорд, ашылу цитаталарында. «Amazon-ның ‘Екі пиццалық командалары’».

Данбар, «Приматтардағы топ көлемінің шектеуі ретінде неокортекс көлемі», 469–493.

Сноуден, «5, 15 және 150 ережесі»; Данбар, Бір адамға қанша дос керек?; Беннетт, «Данбар саны, әлеуметтік желілер гуруынан»; Берджесс, Уәделермен ойлау (Thinking in Promises), 87.

Сноуден, «5, 15 және 150 ережесі»; Карлгаард және Мэлоун, Командалық данышпан (Team Genius), 201–205.

Льюис, «Микросервистер және кері Конвей маневрі».

Муннс, «Крис Муннс, Amazon-дағы DevOps».

Брукс, Мифтік адам-ай (The Mythical Man-Month).

Такман, «Шағын топтардағы даму кезектілігі», 384–399.

Келли, Жобалық миопия (Project Myopia), 72.

Хелфанд, Динамикалық команда құру (Dynamic Reteaming), 123.

Найт, «Сатып алу қауымдастығындағы командалық динамика».

Хамбл және т.б., Lean Enterprise, 37.

Дрискелл және Салас, «Ұжымдық мінез-құлық және командалық өнімділік»; Рок және Грант, Неліктен әртүрлі командалар ақылдырақ.

Джанг, «Көпмәдениетті командалардағы мәдени делдалдық және шығармашылық өнімділік», 993–1009; Карайон, «Күрделі әлеуметтік-техникалық жүйелердің адам факторлары», 525–535.

ДеМарко және Листер, Peopleware, 156.

Стэнфорд, Ұйымдық дизайн бойынша нұсқаулық, 287.

Деминг, Дағдарыстан шығу (Out of the Crisis), 22.

Робертс, Заманауи фирма, 277.

Свеллер, «Мәселені шешу кезіндегі когнитивті жүктеме: оқуға әсері», 257–285.

Пирс, «3-күн: Командалық оқу үшін когнитивті жүктемені басқару»; Пирс, «Миды бұзу».

Дрискелл және т.б., «Күйзеліс командалық перспективаны жоғалтуға әкеле ме», 300.

Джей және т.б., «Цикломатикалық күрделілік және код жолдары», 137–143.

МакКристал және т.б., Командалар командасы, 94.

Лим және Клейн, «Командалық ментальді модельдер және командалық өнімділік», 403–418.

Эван Уайли, Хелфандтың Динамикалық команда құру еңбегінде айтылғандай, 121.

Джефф Безос, Лейннің «Amazon-ның табыс құпиясы» мақаласында айтылғандай.

Аксельрод, Ынтымақтастық күрделілігі; Берджесс, Уәделермен ойлау, 73.

Книберг және Иварссон, «Agile-ді Spotify-да масштабтау».

Книберг және Иварссон, «Agile-ді Spotify-да масштабтау».

Форсгрен және т.б., Accelerate, 181.

Джереми Браун, авторлармен жеке байланыс, наурыз 2019 жыл.

Дорли және Уиттхофт, Make Space, 16.

Фрид және Ханссон, Қашықтан жұмыс (Remote), 91.

4-тарау

Стэнфорд, Ұйымдық дизайн бойынша нұсқаулық, 3.

Книберг және Иварссон, «Agile-ді Spotify-да масштабтау».

Книберг және Иварссон, «Agile-ді Spotify-да масштабтау».

Книберг және Иварссон, «Agile-ді Spotify-да масштабтау».

Форсгрен және т.б., Accelerate, 63.

Скелтон, «DevOps дамуы үшін қандай команда құрылымы қолайлы?».

Джон, «Сервис провайдерлеріне арналған DevOps — келесі буын құралдары».

Хасти, «Microsoft-тың бұлттық қарқынға өтуі туралы Сэм Гукенхаймермен сұхбат».

Бен Трейнор, Найалл Мерфидің «‘Сайттың сенімділігі жөніндегі инженерия’ дегеніміз не?» мақаласында айтылғандай.

Доган, «SRE моделі».

Ренсин, «Google тұтынушыларының сенімділігі инженериясымен таныстыру».

Netflix технологиялық блогы, «Netflix-тегі толық циклді әзірлеушілер — құрастырған нәрсеңді өзің басқар».

ДеГрандис, Жұмысты көрінетін ету (Making Work Visible), 82.

Строуд және Хафф, «Agile бағдарламалық жасақтаманы әзірлеудегі тәуелділіктердің типологиясы».

Пулак Агравал, авторлармен жеке байланыс, наурыз 2019 жыл.

Пулак Агравал, авторлармен жеке байланыс, наурыз 2019 жыл.

5-тарау

Луо және т.б., «Иерархиялық өнім ұйымынан ашық платформалық ұйымға өту».

Райнертсен, Өнімді әзірлеу ағынының принциптері, 265.

Лейн, «Amazon табысының құпиясы — ішкі API-лар»; Хофф, «Amazon архитектурасы».

Кроуфорд, «Amazon-ның ‘Екі пиццалық командалары’»; Муннс, «Крис Муннс, Amazon-дағы DevOps».

Крамер, «Amazon-ның ең дұрыс жасаған ісі».

Суссна, Жеткізуді жобалау, 148.

Пинк, Драйв, 49.

Экштейн, «Ауқымды Agile әзірлеудегі архитектура», 21–29.

Роберт Гринлиф, Қызметші көшбасшы ретінде (The Servant as Leader).

ДеМарко және Листер, Peopleware, 212.

Уэббер, Сәтті тәжірибелік қоғамдастықтарды құру, 11.

Боттчер, «Платформалар туралы айтқанда не айтамын».

Экштейн, Ауқымды Agile әзірлеу, 53.

Ньюмарк, «DevOps және өнім командалары — жеңіс пе әлде жеңіліс пе?».

Райнертсен, Өнімді әзірлеу ағынының принциптері, 292.

Вомак және Джонс, Lean ойлау.

Уркарт, «Бұлтты әлемдегі АТ операциялары».

Книберг, «Нақты өмірдегі Agile масштабтау».

Келли, Бағдарламалық қамтамасыз етуді әзірлеушілерге арналған бизнес модельдер, 88–89.

Конвей, «Бірнеше сабақта қолданбаларды әзірлеуді жеңілдетуге қарай».

Шибата, «Платформа командасын қазір қалай құруға болады!».

Шибата, «Платформа командасын қазір қалай құруға болады!».

Бир, Фирманың миы (Brain of the Firm), 238.

Шибата, «Платформа командасын қазір қалай құруға болады!».

  1. Холл, «ITSM (АТ қызметтерін басқару), DevOps (әзірлеу мен пайдалануды біріктіру) және неліктен үш деңгейлі қолдауды свормингпен (мәселені жылдам шешу үшін мамандардың бір топқа жиналуы) ауыстыру керек екендігі туралы».
  1. Форсгрен және т. б. , Accelerate, 68-бет.

6-тарау

  1. Форсгрен және т. б. , Accelerate, 63-бет.
  1. Форсгрен және т. б. , Accelerate, 66-бет.
  1. Бернштейн және Турбан, «„Ашық“ жұмыс кеңістігінің адамдардың бірлескен жұмысына әсері».
  1. Эванс, Domain-Driven Design (Доменге негізделген жобалау).
  1. Фаулер, «Блики: Шектеулі контекст (бағдарламалық жүйенің нақты мағыналық шекарасы бекітілген бөлігі)».
  1. Тьюн және Миллетт, Автономды командалар мен сервистерді жобалау, 38-бет.
  1. Найгард, «Семантикалық байланыстың (код бөліктерінің мағыналық тұрғыдан бір-біріне тәуелділігі) қауіптері».
  1. Хелфанд, Динамикалық ретиминг (команда құрамын өзгерту), 203-бет.
  1. Херинг, Заманауи кәсіпорынға арналған DevOps, 45-бет.
  1. Филлипс, «Бақылануды тестілеу».

7-тарау

  1. Бернштейн және т. б. , «Өзара әрекеттесудегі үзілістер ұжымдық интеллектті қалай жақсартады», 8734–8739-беттер.
  1. Ротер, Toyota Kata (үздіксіз жетілу және басқару әдістемесі), 236-бет.
  1. Ким және Пирс, «Конвергентті (бір дұрыс шешімге бағытталған) және дивергентті (көптеген нұсқаларды іздейтін шығармашылық) ойлау», 245–250-беттер.
  1. Уркарт, «Коммуникациялар және Конвей заңы».
  1. Бетц, Цифрлық басқару, 253-бет.
  1. Берджесс, «Уәделермен ойлау (жүйелердің өзара әрекеттесуін ерікті міндеттемелер арқылы талдау)», 105-бет.
  1. Рейнертсен, Өнімді әзірлеу ағынының принциптері, 233-бет.
  1. Малан, «Конвей заңы».
  1. Келли, «Конвей заңына оралу».
  1. Хелфанд, Динамикалық ретиминг, 121-бет; Уайли, Хелфандтың «Динамикалық ретиминг» кітабында келтірілгендей, 121-бет.
  1. Хелфанд, Динамикалық ретиминг, 13-бет.
  1. Рейнертсен, Өнімді әзірлеу ағынының принциптері, 254-бет.

8-тарау

  1. Форсгрен және т. б. , Accelerate, 63-бет.
  1. Инглес, «Kubernetes-ке тоғысу».
  1. Инглес, «Kubernetes-ке тоғысу».
  1. Суссна, Жеткізуді жобалау, 61-бет.
  1. Коттер, «Үдеу! ».
  1. Друкер, Күнделікті Друкер, 291-бет.
  1. Стэнфорд, Ұйымдық дизайн бойынша нұсқаулық, 17-бет.
  1. Нараян, Agile АТ-ұйымдар дизайны, 65-бет.
  1. Ким және т. б. , DevOps анықтамалығы, 11-бет.
  1. Суссна, Жеткізуді жобалау, 58-бет.
  1. Нараян, Agile АТ-ұйымдар дизайны, 31-бет.

Қорытынды

  1. Конвей, «Комитеттер қалай өнертабыс жасайды? », 31-бет.
  1. Маннс және Райзинг, Қорқынышсыз өзгерістер.

АЛҒЫС ХАТ

Кітап жазу — бұл көптеген адамдардың қатысуын қажет ететін ұжымдық жұмыс, онсыз бұл туындының аяқталуы мүмкін емес еді. Біз кітапқа егжей-тегжейлі кері байланыс беруге уақыт бөлген сарапшы рецензенттерімізге: Чарльз Т. Бетцке, Джереми Браунға, Джоан Молескиге, Ник Тюнге және Рут Маланға алғыс айтқымыз келеді. Сондай-ақ, біздің кейс-стадилеріміздің (нақты жағдайларды зерттеу) және салалық мысалдарымыздың авторлары мен бастамашыларына: Альберт Бертилссонға, Андерс Иварссонға, Энди Хамфриге, Энди Рубиоға, Дэмиен Дейлиге, Дэйв Хотчкисске, Дэйв Уайтқа, Эрик Миникке, Фернандо Корнагоға, Густаф Нилссон Коттеге, Хенрик Книбергке, Ян Уотсонға, Маркус Раутертке, Майкл Ламбертке, Майкл Майбаумға, Мигель Антунеске, Пол Инглеске, Пулак Агравалға, Робин Уэстонға, Стефани Шиханға және Вольфганг Джонға алғыс білдіреміз.

Біз түпнұсқа DevOps Topologies (бағдарламалық жасақтаманы әзірлеу мен АТ-операцияларын біріктіретін командалық үлгілер) паттерндеріне үлес қосқан барлық жандарға, әсіресе Джеймс Беттлиге, Джейми Бьюкененге, Джон Клэпхемге, Кевин Хиндке және Мэтт Францқа алғыс айтамыз. Team Topologies (командалардың өзара әрекеттесу құрылымын сипаттайтын тәсіл) әдістемесіне сырттан бақылаушының құштарлы көзқарасын білдіргені үшін Джон Катлерге және бастапқы DevOps Topologies паттерндерінің аудиториясын кеңейтуге көмектескені үшін Гарет Рашгроувқа ерекше алғыс білдіреміз. Сондай-ақ, Conflux-тағы әріптесіміз Джовиле Барткевичутеге тынымсыз зерттеулері үшін алғысымыз шексіз.

IT Revolution Press командасы, әсіресе Анна Ноак, Лин Браун және басқа да редакторлар мен дизайнерлер таңқаларлық жұмыс атқарды — біз олардың кеңестерін, қолдауын және жұғысты құлшынысын жоғары бағалаймыз. Бізді 2017 жылы Лондонда өткен DevOps Enterprise Summit-те сөз сөйлеуге шақырып, Team Topologies идеяларының құндылығын түсінуге көмектескені үшін Джин Кимге ризашылығымызды білдіреміз.

Соңында, бізді командалар мен бағдарламалық жасақтама арасындағы қызықты байланысқа қызығушылық танытуға шабыттандырған және осы кітаптың шындыққа айналуына көмектескен идеялардың, баяндамалардың және жазбалардың авторларына: Аллан Келлиге, Энди Лонгшоуға, Чарльз Т. Бетцке, Донелла Медоузға, Джеймс Льюиске, Джин Кимге, Мел Конвейге, Мирко Херингке, Рэйчел Лейкокқа, Рут Маланға және Рэнди Шоупқа алғыс айтамыз.

АВТОР ТУРАЛЫ

Image segment 1578

Мэттью Скелтон 1998 жылдан бері коммерциялық бағдарламалық жүйелерді құрумен, орналастырумен және пайдаланумен айналысады. Ол Лондон қор биржасы, GlaxoSmithKline, FT. com, LexisNexis және Ұлыбритания үкіметі сияқты ұйымдарда жұмыс істеген. Conflux (confluxdigital. net) компаниясының консалтинг бөлімінің басшысы Мэттью Continuous Delivery with Windows and . NET (2016) және Team Guide to Software Operability (2016) кітаптарының тең авторы. Мэттью Рединг университетінің компьютерлік ғылымдар және кибернетика бакалавры (BSc), Оксфорд университетінің нейробиология магистрі (MSc) және Ашық университеттің музыка магистрі (MA) дәрежелеріне ие; ол Ұлыбританияның сертификатталған инженері (CEng). Бос уақытында Мэттью трубада ойнайды, хорда ән айтады, музыка жазады және трейлраннингпен (табиғи рельефте жүгіру) айналысқанды ұнатады.

Мануэль Пайс — командалық дизайн, практикалар мен ағындарға бағытталған DevOps және Continuous Delivery (бағдарламалық жасақтаманы автоматты түрде жиі шығару процесі) бойынша тәуелсіз кеңесші. Ол ұйымдарға стратегиялық бағалау, практикалық семинарлар мен коучинг арқылы DevOps және үздіксіз жеткізуді (техникалық және адами тұрғыдан) анықтауға және енгізуге көмектеседі. Мануэль Team Guide to Software Releasability (2018) кітаптарының тең авторы.

Image segment 1581

Мэттью мен Мануэль бүкіл әлем бойынша көптеген клиенттермен заманауи бағдарламалық жүйелерге арналған ұйымдық дизайн бойынша бірге жұмыс істеді. Олардың заманауи бағдарламалық жүйелерге арналған ұйымдық дизайн бойынша тренингтері көптеген ұйымдарға командааралық байланыс пен бағдарламалық архитектураға деген көзқарастарын қайта қарауға көмектесті, бұл жұмыс ағынын және бағдарламалық жасақтаманы жеткізу тиімділігін арттырды.

Пікірлер (0)

Әзірге пікір жоқ.
An error has occurred. This application may no longer respond until reloaded. Reload 🗙