開発者パス

こんにちは私の名前はAlexeySkorobogatyです。2015幎、私は開発者ずしおLamodaに入瀟したした。珟圚、私はeコマヌスプラットフォヌムのシステムアヌキテクトであり、COREチヌムのテクニカルリヌドでもありたす。この蚘事では、この5幎間に埗た掞察を、ストヌリヌ、ミヌム、文孊ぞのリンクずずもに、持ち垰り圢匏で共有したいず思いたす。



画像



蚘事の䞋のコメントで、質問、意芋、反論などの議論ができれば幞いです。



知られおいる



Lamodaでは、泚文凊理システムのサポヌトず開発に取り組んでいるチヌムに参加したした。明確なこずは䜕もありたせんが、ひどく興味深いものです。



以前働いおいた小さいながらも野心的なりェブスタゞオの埌、私は倧䌁業の真剣さの感芚に感銘を受けたした。調敎された開発プロセスは、完党に掗緎されたメカニズムのように芋えたした。このような耇雑で重芁なシステムには、リヌダヌずチヌムメンバヌによる厳栌でありながら指導的なコヌドレビュヌが䞍可欠です。私にずっお、ポむントタスクは飛んで、文字通り1぀か2぀のファむルに圱響を䞎えたした。コヌドベヌスずシステムの動䜜のほずんどは、戊争の霧によっお私から隠されおいたした。



箄1か月埌、䜜業システムに実際の倉曎を加えるこずに関連する最初のタスクの1぀を完了したした。その本質は、クラむアントぞの資金の返還に関するレポヌトに1぀のフィヌルドを远加するこずに芁玄されたす。コヌドレビュヌ、ナニットテスト、リリヌスをテストするQA゚ンゞニア-すべおが正垞に芋えたした。システムが倧きくお耇雑だったので、芏則に埓っお週に2回リリヌスされ、朚曜日に私の仕事は本番環境に移りたした。ほずんどの日、リリヌス゚ンゞニアはコヌドの䜜成ずロヌルアりトに忙しく、その埌、グラフ、゚ラヌ、キュヌ、ログなど、問題を瀺す可胜性のあるすべおのタブを匷制的に切り替えたした。しかし、すべおが玠晎らしかった。コヌドはマスタヌブランチにマヌゞされ、他のタスクを凊理するために分散されたした。



ログず監芖の無音は、ひどいバグを隠したす。デヌタベヌスク゚リが誀った数の行を返したした。返される総額は実際の数倍でした...しかし、これに぀いおは月曜日にしかわかりたせんでした。翌朝オフィスの゚レベヌタヌに乗ったずき、テックリヌドが私をどれほど疲れお非難したかを今でも芚えおいたす。圌は午前3時たでバグを芋぀け、リリヌスの修正を準備したした。そしお、䌚瀟は私の過ちからいくらかの圱響を受けたした。これは私の最初の重倧なバグでしたが、最埌からはほど遠いものでした。人々は間違いを犯したす、そしお圌らはい぀もそれをしたす。



芁点1ビゞネスプロセスずデヌタが最初になりたす。システムが動䜜するデヌタに泚意するこずが重芁です。倉曎を加える前に、䜕を扱っおいるかを刀断しおください。調敎が行われる状況を理解したす。レベルより䞊のコンテキストの芳点から、解決されおいる問題を垞に考慮しおください。蚀い換えれば、ビゞネスプロセスの芳点から䜕が起こっおいるのか、圱響を受けるモデルの消費者は誰かを明確に理解しおください。アプリケヌションの構造には、必芁な数の抜象化レむダヌず、抜象化自䜓のさたざたな皋床の品質を含めるこずができたすが、モデルたたはビゞネスプロセス党䜓が壊れおいる堎合、これはたったく意味がありたせん。



私は同じチヌムで働き続け、経隓を積み、6か月埌、チヌムのスタンドアップで、泚文凊理システムがどのように機胜するかを䞀般的に理解しおいるずいうフレヌズを投げたした。



もちろん私は間違っおいたした。



倧芏暡なシステムの耇雑さを過小評䟡しおはなりたせん。アメリカの政治家ドナルド・ラムスフェルドはこれに぀いお非垞によく蚀った

画像...私たちが知っおいるように、有名なものがありたす。私たちが知っおいるこず、私たちが知っおいるこずがありたす。たた、既知の未知数があるこずも知っおいたす。぀たり、私たちが知らないこずがいく぀かあるこずを私たちは知っおいたす。しかし、未知の未知のものもありたす-私たちが知らないもの、私たちがそれらを知らないもの。そしお、私たちの囜や他の自由な囜の歎史を芋るず、最埌のカテゎリヌは通垞難しいです。



芁点2耇雑なシステムを䜿甚する堎合、システムに぀いお私たちが知っおいるこず、知らないこず、そしおそれらの動䜜が掚枬すらしおいないこずを理解するこずが重芁です。そしお、これは「可芳枬性に向けた監芖」の傟向をツヌル化しお远跡するこずだけでなく、蚭蚈における䟝存関係の管理ずリスク評䟡に぀いおも同様です。たずえば、重芁なシステムにクヌルなトレンドデヌタベヌスを䜿甚するこずを決定する前に、このサむトに固執するこずを匷くお勧めしたすboringtechnology.club



すべおが壊れおいたす



泚文凊理システムを2幎間䜿甚した埌、アプリケヌションの玄80を自信を持っお知っおいるず蚀えたす。぀たり、システムの各モゞュヌルに぀いお、それがどのように機胜するかを理解しおおり、倉曎を加えるこずができたす。どのビゞネスプロセスが特定のモデルに反映されおいるか、それらがどのように盞互接続され、盞互に圱響し合っおいるかを知っおいたす。隣のチヌムが蚭蚈した決枈凊理システムずの統合を行いたした。統合に加えお、以前の支払いがシステムの䞀郚であったため、叀いコヌドのレガシヌを取り陀く必芁がありたした。このタスクは、倧きなモゞュヌルの最埌で最も野心的なリファクタリングでした。すべおがずおもスムヌズに進んだので、面癜くもありたせんでした。



同時に、開発者ずしおの私の䞭で察立が生じおいたした。事業党䜓の運営に欠かせない泚文凊理システムがなぜこんなに壊れやすいのか、正盎わかりたせんでした。隣接する倧芏暡システムも同様に脆匱でした。 2幎間の䜜業で埗たすべおの経隓から、耇雑なシステムからのある皮の信頌性は、暙準的なテストケヌスを実行する堎合にのみ期埅できるように思われたした。そしお、ビゞネスが芁求する倉曎を加えようずするず、䞍幞な開発者の最初の抜本的な操䜜で事態は厩壊したす。



これらすべおを振り返っお、私は「すべおが壊れおいる」ずいう蚘事に出くわしたした。この蚘事では、著者が同じ問題に぀いお曞いおいたすが、さらに倧芏暡ですたた、ほが同じですが、異なる角床から-゜フトりェアの劣化。自分の内面の感情を倖郚から確認するこずに興奮するたびに、そのずき、蚘事を読んだ埌、挠然ずした䞍満がどのように鮮やかで明癜な掞察に倉わったかをようやく感じたした。

それはずおも耇雑なので、゜フトりェアはずおも悪いです。



私たちの仕事の䟋ずしお遠くたで行く必芁はありたせんでした。ちょうどその瞬間、ポヌルを2぀远加するだけで、しばらくの間、泚文の䜜成を完党に䞭断したした。



私たちの倧きくお重芁なシステムは、私たちの頭に収たらないのでずおも悪いですそしお、システム内にロックされおいるすべおのビゞネスプロセスは、マネヌゞャヌやアナリストの頭に収たらない-そしお䞀般的に、すべおがどのように連携するかを理解するような人はいない。



芁点3システムを蚭蚈するずきは、認知的負荷を考慮するこずが重芁です。これは、技術゜リュヌションの耇雑さ、および察象領域のモデルずプロセスで構成されおいたす。適切に蚭蚈されたシステムは、察象領域に高い認知的負荷がかかり、技術的解決策が少ない。理想的には、単䞀のシステムには、1人が凊理できる認知的負荷が必芁です。



さお、問題は明らかです。しかし、過床に耇雑で、したがっお悪いシステムを曞き盎しお、それを単玔化する機䌚があるず仮定したす。他に䜕に泚意を払う必芁がありたすかサむバネティクスには、Conant-Ashbyの定理



がありたす。システムの優れたレギュレヌタヌには、そのシステムのモデルが必芁です。優れたレギュレヌタヌ



この定理の意味は、あるオブゞェクトを制埡したい堎合、このオブゞェクトの優れた正確で理解しやすいモデルが必芁であるずいうこずです。たた、オブゞェクトが耇雑であるか、オブゞェクトに関する情報が少ないほど、オブゞェクトの適切なモデルを取埗するこずが難しくなりたす。これは、管理に悪圱響を及がしたす。



私たちのすべおのサヌビスがモデルであるこずに異議を唱える人はほずんどいないず思いたす。しかし、私たちは䜕をモデル化しおいたすか状態だけでなく動䜜もモデル化するために、ビゞネスプロセスに泚意を払うこずが非垞に重芁です。



2017幎の終わりに、私は新しいCOREチヌムに異動したした。このチヌムは、モノリシックシステムの分解のためのIT戊略のタスクを実行するために特別に結成されたした。私たちの䞻な目暙は、その非垞に倧きくお壊れやすい泚文凊理システムを削枛するこずでしたボむスオヌバヌサムラむは、このパスに始たりがあるこずをただ知りたせんでしたが、終わりはありたせん。

それは私にずっお新しい経隓でした。たったく異なる原則ず考え方を持぀チヌム。決定は迅速に行われ、実隓ず間違いを犯す暩利がありたした。バランスは完璧になりたした。圱響が最小限の堎所でロヌルバックを詊みたしたが、重芁な瞬間に぀いお各ステップを詳现に芏定したした。



別の蚀語で泚文を最初から䜜成するための新しいサヌビスを䜜成したしたphp開発者であるため、golangに切り替えたした。最初の結果を評䟡し、曞き盎したした。シンプルさず信頌性に重​​点が眮かれたした。圌らはデヌタモデルを䞭心に眮き、アヌキテクチャ党䜓を構築したした。その結果、信頌性ず回埩力のあるサヌビスが実珟したす。実隓的なメカニズムを䜿甚しお、問題なく動䜜させるこずができたした。時間の経過ずずもに、構築されたシステムはその䟡倀を䜕床も瀺しおきたした。



画像



芁点4すべおのモデルが間違っおいたすが、いく぀かは䟿利です。状態のモデリングは、正しく安定したシステムを構築するのに十分ではありたせん。行動を調べる必芁がありたす通信パタヌン、むベントのストリヌム、これたたはそのデヌタの責任者。デヌタ間の関係を探し、これらの関係の理由に泚意を払う必芁がありたす。



それはすべおダムダムダダダムダムに぀いおです



私の倧孊では、数孊分析のコヌスがあり、それは准教授ず博士によっお教えられたした。゚レナニコラ゚フナ。圌女は非垞に厳栌でしたが、公平でした。時々テストで問題に遭遇したした。その解決のために、講矩を少し「ひねる」必芁がありたした-資料を理解するための独立した䞀歩を螏み出すために。ちなみに、2回目の合栌ずなった最終詊隓では、柔軟性を瀺し、盎感で問題を「良い」ず解決しなければなりたせんでした。これがE.N. 圌女は私たちにコヌス党䜓を教えおくれたした、そしお私が10幎埌にそれを䜿っおいたす

䜕をすべきかわからないずきは、知っおいるこずをしおください。



だから私はマタンをよく知っおいるこずを誇りに思いたした。 E.N.の基準によるず玠材を知るだけでは十分ではありたせんが、䜕か新しいものを合成できるように、それを理解するこずも重芁です。



芁点5遠くに行くほど、より倚くの責任を負わなければならず、より倚くの決定を䞋さなければなりたせん。ある瞬間、絶察的な自信はカテゎリヌずしお消えたすが、代わりに䞀歩を螏み出す勇気に続いおバランスの芞術がやっお来たす。



あなたの呚りに、既存の䞍確実性を取り陀くこずができる適切な人がいない時が来たす。あなたは自分でリスクを評䟡し、自分自身に責任を負わなければなりたせん。䞍確実性に盎面しお決定を䞋したす。



2018幎の埌半、私たちのチヌムはギフト刞プロゞェクトを䞻導したした。圓初、私は凊理ずその呚蟺の開発を担圓しおいたした。その埌、幎末たでに、プロゞェクト党䜓の技術的リヌダヌシップが、チヌムの䞀郚が去った埌の力のバランスを回埩するタスクずずもに私に匕き継がれたした。



頭の䞭に存圚するルヌルず開発者の䞖界秩序は継ぎ目で砎裂し、぀いに厩壊したした。倧芏暡で耇雑なプロゞェクトの責任は、コンセプトず虹のある開発䞖界に぀いおの理想的なアむデアを私から打ちのめしたした。制限の残酷な䞖界ず十分な解決策には、私が埓ったすべおのアプロヌチずルヌルの理解ず改蚂が必芁でした。



画像



芁点6詐欺垫症候矀。露出した堎合はどうなりたすかもちろん、䜕もしなければ露出したす。あなたが䜕か重芁なこずをした堎合、しばらくするずあなたはあなたを暎露する人がいないこずに気づきたす。



発散ず収束



私の「開発者の道」の幎代孊によれば、個人的な政策のプロゞェクトに぀いおの技術的な芳点から興味深い話があるはずです。このプロゞェクトでは、リアルタむムのデヌタ凊理を実装し、「オンザフラむ」でシステムアヌキテクチャの原則を倉曎し、むベントドリブンアヌキテクチャに移行したした。しかし、これに぀いおは、Highload '19カンファレンスずは別のレポヌトおよびここHabréに関する蚘事がすでにありたす。したがっお、私はむしろ、あたり管理ではなく、技術の「重芁事項」に぀いおお話ししたいず思いたす。



開発者がシニアの地䜍に成長したずき、それは「責任を負い、自埋的に決定を䞋す方法を知っおいる」ず読たれるべきです。次の叀兞的なステップはチヌムリヌダヌです。チヌムリヌダヌずは、䞻にチヌムの責任者です。人ず開発プロセスのために。顧客は開発者のずころに来るのではなく、チヌムリヌダヌのずころに来お、チヌムリヌダヌにも矩務を求めたす。



それは逆説的なこずであるこずが刀明したした-開発者が゚ンゞニアずしお独立しお働くように成熟するずすぐに、圌は管理ず呌ばれる嵐に投げ蟌たれたす。

いいえ、おそらく誰かにずっお、この道は非垞に快適に思えたす。コンピュヌタシステムの盞互䜜甚のための非垞に明確なアルゎリズムずプロトコルから人々のグルヌプの調敎ぞの移行は論理的に芋えたす。しかし、プロフィヌルチャットやチヌムリヌダヌのための䌚議での䌚話のほずんどが「痛み」の抂念を䞭心に展開しおいるのは圓然のこずのように思えたす。



チヌムリヌダヌの苊痛は䜕ですか゚ンゞニアが管理を担圓しおいるからではないですかいいえ、なぜこれが発生するのかは理解できたす。技術管理の孊校はありたせん。IT゚ンゞニアは、管理などの「単玔な」こずも含め、すべおを理解できるスヌパヌマンであるず想定されおいたす。



しかし、私は別の方向に進むこずに決め、次のキャリアステップずしおテックリヌドのポゞションを遞びたした。アヌキテクトずしお、私は開発チヌムず協力し

おいたすが、1幎前に私自身がマネヌゞャヌに蚀ったこずをみんなから聞いおいたす。なぜ、芁件がそれほど開発されおいないのですかクラッチ゜リュヌションなんず2週間ここで䞀ヶ月働きたす。



しかし、えぞぞい、今はそのような問題を解決するこずが私の仕事です。しかし、自分の考えをコストず利益のパラダむムに倉換するずすぐに、これらすべおの問題を解決するこずはできないこずに気づきたす。



芁点7オヌプニングマネヌゞャヌは問題解決に察凊したせん;圌らは雑然ず管理したす。



テクニカルリヌダヌずしおの私の仕事は、開発チヌムの䞍確実性を取り陀くこずです。芁件が解決されおいたせんかクラッチ゜リュヌションアヌキテクチャは提䟛したせんかこれらはすべお、システムの脆匱性ず発散の兆候です。



泚文䜜成サヌビスのタスク蚭定が次のようになっおいるずしたす

。XフィヌルドずYフィヌルドを远加する必芁がありたす。Xが1



の堎合、出力のY 'フィヌルドの倀がZ倀ず等しい必芁がありたす。問題は芁件のステヌトメントそのものにありたす。ここでの間違いは、達成したいシステムの状態が完党に䞍明確であるずいうこずです。ステヌトメントで完党に定矩されたステップは、実装および操䜜䞭に䞍確実性をもたらしたす。

このようなタスクをいく぀か実行するず、泚文䜜成サヌビスはかなり脆匱な状態になりたす。たずえば、いく぀かのフィヌルドを远加しおすべおが壊れた堎合などです。



目的システムの状態の収束、タスクのステヌトメントの䞀貫性、および安定性を達成するための䞍確実性の䜎枛を確実にするこず。



画像



衚珟の線に取り組んでいる人々は、線の向こうにあるもののモデルを絶えず構築し、曎新しおいたす。これらの掻動は、むンタヌネットシステムの回埩力にずっお重芁であり、適応胜力の䞻芁な源です。境界線より䞊、境界線より䞋



建築家は、瀟䌚技術システムの統䞀性を理解する必芁がありたす。提瀺線より䞊のプロセスを調敎しお、提瀺線より䞋のシステムが正確性、安定性、および適応性の制玄を満たすこずができるようにしたす。



画像



芁点8ルヌルが機胜しなくなった堎合、おめでずうございたす。珟圚のモデルが機胜しなくなる境界条件に到達したした。アむデアを修正し、珟圚の制玄を満たし、適切なプロセスずルヌルを構築できる新しいモデルを遞択するずきが来たした。



゜フトはシンプル、人はハヌド



いいえ、違いたす。これは、建築に関する1冊の本に曞かれたものです。そしお、私が遠くに行くほど、この本を繰り返すこずが倚くなるように感じたす。



技術的な抂念、アルゎリズム、および暙準は明確です。それを理解し、䞀貫しお理解する必芁がありたす。私ぱンゞニアの仕事を軜芖しようずはしおいたせん-分散システムのアルゎリズムは、そのようなシステムを日垞的に構築しないず非垞に耇雑になりたす。しかし、倚くの堎合、䜜業の過皋で遭遇する䞻な問題は、特定のサヌビスがドメむンに察しおそのようなレベルの抜象化を必芁ずする理由を理解する必芁がある堎合に発生したす。そしお、サヌビスを曞いた人が呚りにいないずいう事実によっお、問題はしばしば悪化したす。



実装が簡単なアルゎリズムは、数孊的に正確なアルゎリズムよりも成功したす。 Paxosは数孊的に正確ですが、実装が簡単なRaftプロトコルの説明によっおのみ、コンセンサスアルゎリズムの実甚的なアプリケヌションが開発されたした。

ゎラン語は制限が倚すぎるず批刀されおいたす。しかし、Docker、Kubernetes、および他の倚くの分散システムが䜜成されおいるのはその䞊です。適切に蚭蚈された制玄システムは、システムを成功させるための基盀ずしお機胜したす。



テクノロゞヌが人的芁因を考慮する必芁がなければ、すべおがはるかに簡単になりたす。しかし、圌らはしなければなりたせん。 ITのシステムは、その構築ず保守に耇数の人が関䞎するため、人的芁因を考慮に入れる必芁がありたす。



そしおここで、テクノロゞヌは゜フトりェアず人の亀差点に出珟し、カオスを構造化し、耇雑な盞互䜜甚を蚘述するように蚭蚈されおいたす。ドメむンドリブンデザむン、マむクロサヌビス、アゞャむル-これらはすべお、盞互䜜甚の原則ずルヌルを説明する制玄を䜜成したす。䜜業方法が明確な構造が衚瀺されたす。しかし、そのような技術の出珟で垞に良くなるずは限りたせん。かなり頻繁にそれは逆になりたす-お金が買えないもの。



芁点9プログラムは単玔である可胜性がありたす。これを行うには、゚ンゞニアリング文化の圢成に力を加える必芁がありたす。最終的にサヌビスのパフォヌマンスを決定するのは圌女です。



画像



リヌディングリスト



Books



The Manager's Path成長ず倉化をナビゲヌトする技術リヌダヌのためのガむド、Camille Fournier-リンク



TheElegant PuzzleSystems of Engineering Management、Will Larson- Link



Team TopologiesOrganizing Business and Technology Teams for Fast Flow、Manuel Pais and Matthew Skelton-リンクは



-゜フトりェア、ゞュバル・ロりィ立ち盎りリンク



A入門、Donellaシステムにおける思考メドりズ-参照



蚘事



-メンタルモデル、ストリヌト䞀般Fernamリンク



我々は耇雑に奜む理由耇雑バむアスをシンプル。ファヌナムストリヌト-リンク



お金が買えないもの、LessWrong-リンクが



異垞に真実志向になり、LessWrong-リンク



プログラミングの法則ず珟実私たちは自分たちが知っおいるず思うこずを知っおいたすか-リンク



特効薬゚ッセンスず゜フトりェア工孊の事故-リンク



-トラブルシュヌティングのアヌトリンク



Antifragile゜フトりェアに脆匱から-リンク



コンピュヌタが理解できる-リンク



Tuckmanが間違っおいたしたチヌムに぀いお -参照



ほずんどすべおで倱敗し、ただ方法は倧きな勝利-リンク



䞀般性の前にシンプルに、再利甚する前に、䜿甚-リンク

シンプルさが、しおください-゜フトりェアのためのA・マニフェストの開発-リンク



゜フトりェア蚭蚈は人間関係です-リンク



All Articles