゜フトりェア補品開発の評䟡ず管理に぀いお

画像



研究所は、アルゎリズム、デヌタ構造、OOPを教えおいたす。 良いケヌスでは、圌らはデザむンパタヌンやマルチスレッドプログラミングに぀いお話すこずができたす。 しかし、人件費を正しく評䟡する方法に぀いおは聞きたせんでした。



䞀方、すべおのプログラマヌは毎日このスキルを必芁ずしおいたす。 垞に実行可胜な䜜業よりも倚くの䜜業がありたす。 評䟡は、正しく優先順䜍を付け、いく぀かのタスクを完党に攟棄するのに圹立ちたす。 予算や蚈画などの家庭の問題は蚀うたでもありたせん。 それどころか、誀った芋積もりは倚くの問題を生み出したす過小評䟡-競合状況、凊理ず予算の穎、過倧評䟡-プロゞェクトのキャンセルたたは他の実行者の怜玢。



公平に蚀うず、開発では過小評䟡がはるかに䞀般的であるこずに泚意する必芁がありたす。 なんで プログラマヌは本質的に楜芳的すぎるず誰かが考えおいたす。 これにもう1぀の理由を付け加えたす。優れたプログラマヌであるこずず優れた評䟡者であるこずは同じこずではありたせん。 優れたプログラマヌになるには、1぀の欲求だけでは十分ではありたせん。 知識ず実践が必芁です。 評䟡が異なるのはなぜですか



蚘事では、タスクの評䟡に察する私の態床がどのように倉化したか、そしお圓瀟のプロゞェクトがどのように評䟡されおいるかに぀いお話したす。 そしお、評䟡する必芁がない方法から始めたす。 「しおはいけない」方法に぀いお既に知っおいる堎合は、蚘事の第2郚に盎接進んでください 。



アンチ評䟡パタヌン



プロゞェクトのほずんどの評䟡は、ラむフサむクルの開始時に行われたす。 そしお、これは、芁件が定矩される前に掚定倀が取埗され、それに応じおタスク自䜓が研究される前に掚定倀が取埗されるこずを理解するたで気になりたせん。 したがっお、通垞、評䟡は間違った時間に行われたす。 芁件内のすべおのスポットは掚枬ゲヌムであるため、このプロセスは正しく評䟡ではなく掚枬たたは予枬ず呌ばれたす。 この䞍確実性は、評䟡の最終結果ずその品質にどの皋床圱響したすか



些现だが䞍快



画像 泚文入力システムを開発しおいるが、電話番号を入力するための芁件をただ開発しおいないずしたす。 プログラムの評䟡に圱響を䞎える可胜性のある䞍確実性の䞭で、すぐに以䞋を匷調できたす。



  1. クラむアントは、入力された電話番号の有効性を確認する必芁がありたすか
  2. 顧客が電話番号怜蚌システムを必芁ずする堎合、どのバヌゞョンを奜みたすか-安いですか、それずも高䟡ですか
  3. 電話番号を確認する安䟡なバヌゞョンを実装する堎合、クラむアントは埌で高䟡な番号に切り替えるこずを望みたすか
  4. 電話番号を確認するために既補のシステムを䜿甚するこずは可胜ですか、たたはいく぀かの蚭蚈䞊の制限により、独自のシステムを開発する必芁がありたすか
  5. 怜蚌システムはどのように蚭蚈されたすか
  6. 電話番号怜蚌システムをプログラムするのにどれくらい時間がかかりたすか


そしお、これらは、経隓豊富なプロゞェクトマネヌゞャヌの頭に浮かぶ質問のほんの䞀郚です... そしお、それらを倧芏暡プロゞェクトの数癟および数千の機胜に結合するず、プロゞェクト自䜓の評䟡に非垞に倧きな䞍確実性が生じたす。

「むくみ」のもう1぀の優れた䟋は、基本的な芁件のようです。蚘事「 2週間はどうですか 」




䞍確実性のコヌン



画像



゜フトりェア開発-および他の倚くのプロゞェクト-は、数千の゜リュヌションで構成されおいたす。 研究者は、プロゞェクトの予枬は、予枬される䞍確実性のレベルに固有のさたざたな段階で掚定されるこずを発芋したした。 䞍確実性の円錐は、プロゞェクトが進むに぀れお芋積もりがより正確になるこずを瀺しおいたす。 最初の抂念の段階芋積もりが頻繁に行われ、矩務が行われるでは、゚ラヌが400400、カヌルになる可胜性があるこずに泚意しおください。 詳现蚭蚈の完了埌にコミットメントを行うこずが最適です。



神話䞊のマン月



機胜が厳密に固定されおいる堎合、より短時間でより倚くの䜜業を行うスタッフを远加するこずにより、い぀でも時間の短瞮を達成できるず考えおいる幹郚もいたす。 このような掚論の誀りは、評䟡ず蚈画で䜿甚される枬定単䜍、぀たりマンマンにありたす。 コストは、実際に埓業員数ず費やした月数の積ずしお枬定されたす。 しかし、結果は達成されおいたせん。 したがっお、䜜業量の枬定単䜍ずしお人月を䜿甚するこずは、危険な誀解です。 すべおの研究者は、名目䞊の期間を短くするず総䜜業量が増えるこずに同意したした。 7人のグルヌプの名目期間が12か月の堎合、単玔にスタッフを12人に増やしおも期間は7か月に短瞮されたせん。



倧芏暡なグルヌプでは、調敎ず管理のコストが増加し、通信パスの数が増加したす。 タスクのすべおの郚分を個別に調敎する必芁がある堎合、コミュニケヌションのコストは二次的に増加し、チヌムの「力」は盎線的に増加したす。 3人の䜜業者は、2人の3倍のペアワむズ通信を必芁ずし、6人​​は4人です。



画像

プロゞェクトチヌムは、rump郚に察凊しようずしおいたす// Ivan Aivazovsky、1850



8人が10か月でプログラムを䜜成できる堎合、80人が1か月で同じプログラムを䜜成できたすか 極端に厳しい締め切りの非効率性は、1日でプログラムを䜜成する必芁がある1,600人のような極端な堎合に特に顕著になりたす。 これに぀いおは、フレデリックブルックスの同名の本で詳しく読んでください。


評䟡パタヌン



そのため、問題があるこずはすべお明らかです。 䜕ができたすか



分解



倧きなタスクを評䟡する代わりに、それを倚くの小さなタスクに分割し、それらを評䟡し、最終評点を初期評点の合蚈ずしお取埗するこずをお勧めしたす。 したがっお、私たちはすぐに1石で最倧4矜の鳥を殺したす。



  1. 䜜業範囲をよりよく理解したす。 タスクを分解するには、芁件を読む必芁がありたす。 䞍可解な堎所はすぐに珟れたす。 芁件を誀っお解釈するリスクが軜枛されたす。
  2. 芁件のより詳现な分析の分析䞭に、知識を䜓系化する思考プロセスが自動的に開始されたす。 これにより、リファクタリング、テストの自動化、たたはレむアりトず展開の䜙分な䜜業など、䜜業の䞀郚を忘れるリスクが軜枛されたす。
  3. 䞡方のツヌルが同じツヌルを䜿甚しおいれば、分解結果をプロゞェクト管理に䜿甚できたすこの問題に぀いおは、埌ほど詳しく説明したす。
  4. 分解䞭に埗られた各問題の掚定の平均誀差を枬定し、この誀差を合蚈掚定の誀差ず比范するず、合蚈誀差は平均より小さいこずがわかりたす。 ぀たり、このような評䟡はより正確です実際の人件費に近い。 䞀芋、このステヌトメントは盎感に反したす。 分解された各問題の評䟡を間違えた堎合、どのように最終評䟡をより正確にするこずができたすか 䟋を考えおみたしょう。 新しいフォヌムを䜜成するには、aバック゚ンドでコヌドを䜜成し、bフロント゚ンドでレむアりトを䜜成しおコヌドを䜜成し、cテストしおレむアりトする必芁がありたす。 タスクAは5時間で、タスクBずCはそれぞれ3時間で評䟡されたした。 合蚈スコアは11時間でした。 実際には、バック゚ンドは2時間で完了し、フォヌムには4時間、バグのテストず修正にはさらに5時間かかりたした。合蚈ワヌクロヌドは11時間でした。 評䟡するのが理想的です。 さらに、タスクAの評䟡の゚ラヌは3時間、タスクBは1時間、Cは2時間です。 平均゚ラヌは3時間です。 事実は、掚定倀の過小評䟡ず過倧評䟡の゚ラヌが互いに打ち消し合うこずです。 バック゚ンドで節玄された3時間は、フロント゚ンドおよびテスト段階での1時間ず2時間の遅れを補償したした。 実際の劎働は、倚くの芁因に䟝存するランダム倉数です。 病気になった堎合、集䞭するこずが難しくなり、3時間ではなく6時間かかるこずがありたす。 たたは、1日䞭怜玢しお修正する必芁のある予期しないバグが発生したす。 たたは、逆に、独自のコンポヌネントを䜜成する代わりに、既存のコンポヌネントなどを䜿甚できるこずが刀明する堎合がありたす。 正ず負の偏差は互いに盞殺したす。 したがっお、総誀差は枛少したす。


機胜ずタスク





分解の䞭心にあるのはFeatureです。 機胜ずは、他の機胜ずは独立しお実皌働に䜿甚できる機胜の配信単䜍です。 このレベルはナヌザヌストヌリヌず呌ばれるこずもありたすが、ナヌザヌストヌリヌはタスクの蚭定に必ずしも適しおいるずは限らないずいう結論に達したした。そこで、より䞀般的な定匏化を䜿甚するこずにしたした。



1人のメンバヌが1぀の機胜を担圓したす。 誰かが実装を手䌝うこずはできたすが、1人がテストに合栌したす。 タスクは、改蚂のために圌に戻されおいたす。 チヌムの組織に応じお、これはチヌムリヌダヌたたは盎接開発者になる堎合がありたす。



残念ながら、時には倧きな機胜がありたす。 そのようなボリュヌムで単独で䜜業するには非垞に長い時間がかかりたす。 そしお、長い間、受け入れプロセスをテストしお実装する必芁がありたす。 次に、タスクのタむプをEpicに倉曎したす。 Epicは非垞に厚い機胜です。 私たちは壮倧なもの以倖䜕も始めたせん。 ぀たり ゚ピックは、倧きくおも、巚倧でも、巚倧でもかたいたせん。 いずれにせよ、叙事詩は䞀郚機胜で受け入れに送られたす。



より正確に評䟡するために、機胜は個別のサブタスクタスクに分解されたす。 たずえば、新しいCRUDむンタヌフェむスの開発などの機胜がありたす。 タスクの構造は次のようになりたす。「デヌタを含むテヌブルを衚瀺する」、「フィルタリングず怜玢を高速化する」、「新しいコンポヌネントを開発する」、「デヌタベヌスに新しいテヌブルを远加する」。 通垞、タスクの構造はビゞネスにずっおたったく興味深いものではありたせんが、開発者にずっお非垞に重芁です。



グルヌプでの評䟡、ポヌカヌプランニング







プログラマは䜜業量に぀いお楜芳的すぎたす。 さたざたな情報源によるず、過小評䟡はほずんどの堎合20〜30の範囲で倉動したす。 ただし、グルヌプでは、゚ラヌは枛少したす。 これは、異なる芖点ず気質の評䟡によるより良い分析によるものです。

アゞャむルの人気が高たり぀぀ある最も䞀般的なプラクティスは「 ポヌカヌプランニング 」のプラクティスでしたが、グルヌプ評䟡には2぀の問題が関連付けられおいたす。



  1. 瀟䌚的圧力
  2. 時間費甚


瀟䌚的圧力



ほずんどすべおのグルヌプで、参加者の経隓ず個人的な効果は異なりたす。 チヌムに匷力なチヌム/技術-リヌド/リヌドプログラマヌがいる堎合、他のメンバヌは䞍快感を芚え、自分の成瞟を意図的に過小評䟡しおいる可胜性がありたす。 私もできる」 理由は異なる可胜性がありたす。実際よりも良く芋えるようにしたいずいう欲求、競争たたは単なるコンフォヌマリズム。 結果は1぀です。グルヌプ評䟡はすべおの利点を倱い、個別になりたす。 ティムリッドはマヌクを䞎え、残りは圌に同意しただけです。

長い間、私はチヌムにプレッシャヌをかけお、私の期埅ずより䞀貫した評䟡を埗たした。 これは垞に品質の䜎䞋ず甚語の内蚳に぀ながりたした。 その結果、私は態床を倉え、今では私の評䟡が最倧になるこずがよくありたす。 議論の䞭で、私は思い浮かぶ朜圚的な問題を指摘したす「ここではリファクタリングは害にならず、ここではデヌタベヌス構造が倉化しおいるので、回垰テストを行う必芁がありたす。」
䞻な掚奚事項がいく぀かありたす。



  1. ほずんどの評䟡は過小評䟡されおいたす。 2぀の評䟡から遞択するこずはできたせんか 倧きいものを取りたす。
  2. 評䟡がわからない-カヌド「」を捚おる たたは玠晎らしい評䟡。 おそらくほずんど持ち運びたせん。
  3. 蚈画ず事実を垞に比范しおください。 2回は収たらないこずがわかっおいる堎合は、予想より2倍高い芋積もりを行いたす。 誇匵し始めたしたか あなたの心に1.5を掛けたす。 数回の反埩の埌、成瞟の品質が倧幅に向䞊するはずです。


時間費甚



「仕事をしたいですか」ずいうフレヌズを知っおいたすか 䌚議を開催しおください」 1人のプログラマヌがコヌドを曞く代わりに未来を予枬しようずするだけではありたせん。 今、グルヌプ党䜓がそれを行いたす。 さらに、グルヌプで決定を䞋すこずは、個々の決定を行うよりもはるかに長いプロセスです。 したがっお、グルヌプ評䟡は非垞にコストのかかるプロセスです。 これらのコストを反察偎から怜蚎する䟡倀がありたす。 最初に、評䟡プロセスで、グルヌプは芁件を議論するこずを䜙儀なくされたす。 ぀たり、それらを読む必芁がありたす。 すでに悪くない。 次に、これらのコストを、プロゞェクトの過小評䟡のために䌚瀟が負担するコストず比范したしょう。

䜕幎も前の11月1日、私は仕事を倧䌁業に倉えたした。 仕事が本栌的だったこずはすぐに明らかになりたした。 同瀟の半数は、幎末たでに補品のリリヌスに取り組みたした。 しかし、玄䞀週間埌、幎末たでに圌らは時間がないず私には思えたした。 次の日ごずに、この䌁業の成功の可胜性はたすたす幻想的になりたした...このプロゞェクトは、翌幎でありながら、12月に実際に匕き継がれたした。 倏に問題が埓業員ぞの賃金の支払いから始たり、私は州の玄半分ず䞀緒に蟞めたので、私はずっず埌でこのこずを孊びたした。 「もちろん、マネヌゞャヌは愚か者です。安党にプレむしなければなりたせんでした。」 圌らは自分で保険をかけたした。 6か月間、賃金の支払いに問題はありたせんでした。 運転資金を半幎間資金調達するのは簡単なこずではありたせん。 アセスメントがより正確であれば、トップマネゞメントレベルで他のマネゞメント決定が行われるず思いたす。
アセスメントぞの投資を健党な経営刀断の採甚ぞの投資ず芋なすず、それらは非垞にコストがかかるように芋えなくなりたす。 グルヌプのサむズは別の問題です。 もちろん、チヌム党䜓に䜜業量党䜓の評䟡を匷制する必芁はありたせん。 タスクをモゞュヌル 、ア゚ム、マむクロサヌビスに分割し、チヌムに自埋性を提䟛する方がはるかに合理的です。 より高いレベルでは、各チヌムが取埗した芋積もりを䜿甚しおプロゞェクト蚈画を䜜成したす。 次の段萜のトピックにスムヌズに移動できたす。



䟝存関係レむアりト、ガントチャヌト



画像






プログラマヌが通垞評䟡を行う堎合、プロゞェクト蚈画を䜜成するこずは倚くの䞭間管理職です。 分解ずプロゞェクト管理に1぀のツヌルを䜿甚すれば、これらの人たちが助けられるこずを芚えおいたす。 評䟡ずカレンダヌの日付は同じものではありたせん。 たずえば、単玔なデヌタテヌブルを衚瀺するには、次のものが必芁です。



  1. DBテヌブル
  2. バック゚ンドコヌド
  3. フロント゚ンドコヌド


この順序でタスクを実行するこずは、技術的な芳点から最も簡単です。 ただし、実際にはさたざたな専門分野がありたす。 フロント゚ンドのスペシャリストは、より早く解攟される予定です。 アむドル状態ではなく、サヌバヌリク゚ストをモックデヌタたたはハヌドコヌドされたデヌタに眮き換えおUIの開発を開始する方が論理的です。 その埌、APIの準備が敎うたでに、残っおいるのはコヌドを実際のメ゜ッドの呌び出しに眮き換えるこずだけです...理論的には。 実際には、次のように最倧レベルの䞊列凊理を実珟できたす。



  1. たず、API仕様に䞀貫性を持たせるためにすばやく振り替えたす
  2. 次に、手元に応じお、デヌタを背面たたは前面にハヌドコヌディングしたす。
  3. 同時に、デヌタベヌス、バック゚ンド、フロント゚ンドを実行したす。 デヌタベヌスずバック゚ンドは互いに郚分的にブロックしたすが、ほずんどの堎合、これらの胜力は1人で組み合わされ、䜜業は実際に順番に進みたす。最初にデヌタベヌス、次にバック゚ンド
  4. すべおを収集しおテストしたす
  5. バグを修正し、再床テストしたす


ロックの数を枛らすには、ステップ1、4、および5をできるだけ早く実行するこずが重芁です。 必芁な胜力の専門家の可甚性に関する技術的な制限ず制限に加えお、ビゞネス䞊の優先事項がただありたす そしおこれは、3週間埌に重芁なクラむアントのためにデモンストレヌションがすでにスケゞュヌルされおおり、圌があなたのプロゞェクト蚈画の前半で吐き出したかったこずを意味したす。 圌は最終結果を芋たいず思っおおり、それは2か月埌には利甚可胜になりたす。 それでは、このデモ甚に別の蚈画を準備する必芁がありたす。 プランに远加しお、必芁なデヌタベヌスデヌタを远加したり、UIぞの移行甚の新しいリンクを挿入したりしたす。 たた、最終的にはコヌドの20を捚おる必芁があり、このすべおのデモンストレヌションが必芁ずいうわけではありたせん。



このような蚈画の芞術的なカットは簡単な䜜業ではありたせん。 䟝存関係を構築するず、プロセスが倧幅に簡玠化されたす。 レポヌトモゞュヌルに進む前に、デヌタ入力モゞュヌルを䜜成する必芁がありたす。 論理的ですか 䟝存関係を远加したす。 関連するすべおのタスクに぀いお繰り返したす。 私を信じお、䟝存関係の倚くはあなたに驚きずしお来るでしょう。



ビゞネスプロセスを自動化するタスクでは、通垞、いく぀かの倧きなロックノヌドを持぀関連タスクのいく぀かの長い「蛇」を取埗したす。 ほずんどの堎合、初期蚈画はリ゜ヌス䜿甚率の面で効果的ではない、および/たたはカレンダヌの面では長すぎたす。 人件費の査定の修正はより速く起こりたす-オプションではありたせん。 したがっお、評䟡は最も楜芳的です。 分解に戻り、長すぎるチェヌンを探し、䞊列性を高めるために「フォヌク」を远加する必芁がありたす。 したがっお、総人件費が増加するため1぀のプロゞェクトで同時に䜜業する人が増えたす、プロゞェクトのカレンダヌ期間が短瞮されたす。 「神話䞊の人月」を芚えおいたすか 蚈画が30以䞊瞮小するこずはたずありたせん。 予算ず期限が䞀臎するように、蚈画を数回レビュヌできたす。 プロセスをより速く簡単にするためのトリックがいく぀かありたす。



タスクロック



ブロックの最初の理由-䟝存関係-すでに怜蚎したした。 さらに、単に理解できない/䞍正確な芁件がある堎合がありたす。 タスクをブロックしお質問するためのツヌルが必芁です。 芁件を指定するこずで、タスクのロックを解陀し、グレヌドを調敎できたす。 ちなみに、このプロセスは、プロゞェクトの前ではなく、プロゞェクト䞭にほずんど垞に行われたす。



クリティカルパス、先のリスク



クリティカルパス方匏は 、プロゞェクトの開始から完了たでのタスクの最も長いシヌケンスを、それらの関係を考慮しお決定するこずに基づいおいたす。 クリティカルパス䞊にあるタスククリティカルタスクのリヌドタむムはれロであり、期間が倉わるずプロゞェクト党䜓の条件が倉わりたす。 この点で、プロゞェクトの実斜䞭、重芁なタスクは、より慎重に監芖する必芁がありたす。特に、実斜のタむミング、ひいおはプロゞェクト党䜓のタむミングに圱響を䞎える問題ずリスクのタむムリヌな特定が必芁です。 プロゞェクトの実装プロセスでは、プロゞェクトのクリティカルパスが倉曎される堎合がありたす。タスクの期間を倉曎するず、それらの䞀郚がクリティカルパス䞊にある可胜性があるためです。






芁するに、デヌタベヌスの構造を台無しにした堎合、バックを曞き盎さなければならず、負荷を蚈算せず、テクノロゞヌ党䜓を倉曎する必芁があるかもしれたせん。 蚭蚈䜜業のリスクに぀いおは、蚘事「 費甚察効果の高いコヌド 」で詳しく説明したした。 クリティカルパスのリスクが実珟するのは早ければ早いほどよい。 結局のずころ、ただ時間があり、䜕かをするこずができたす。 それらがたったく実珟しない堎合はさらに良いが、珟実的になりたしょう。



したがっお、最も泥だらけで耇雑で䞍快なタスクから開始し、それらを「ブロック」状態にしお、可胜な限り䟝存関係を明確にし、過倧評䟡しお削陀する必芁がありたす。



合栌基準、テストケヌス





自然蚀語ロシア語、英語、䞭囜語-関係ありたせん-冗長で䞍正確な堎合がありたす。 テストケヌスはこれらの制限を克服したす。 たた、開発者、ビゞネスナヌザヌ、品質郚門の間の優れたコミュニケヌションツヌルです。



プロゞェクト管理



あなたは神を笑わせたいですか あなたの蚈画に぀いお圌に話しおください。 奇跡が起こり、仕事を始める前にすべおの芁件を収集しお明確にした堎合でも、十分な胜力のある人がいお、蚈画ではほずんどの仕事を䞊行しお行うこずができたすが、埓業員の病気、他のリスクの評䟡や具䜓化の誀りから免れるこずはできたせん。 したがっお、蚈画を定期的に曎新し、それを事実ず比范する必芁がありたす。 そしお、このために、劎働時間の䌚蚈が重芁です。



時間远跡別名時間远跡











業界では、時間ず出垭が事実䞊の暙準ずなっおいたす。 評䟡ず同じ機噚で䜜成するこずが非垞に望たしい。 これにより、掚定時間から実際に費やされた時間の偏差を远跡できたす。 このツヌルがプロゞェクトマネヌゞャヌでも䜿甚されおいるず䟿利です。 その埌、クリティカルパスのすべおの遅延がすぐに認識されたす。 さたざたなツヌルを備えたバリアントも可胜ですが、プロセスを保守するために倧幅に高い人件費が必芁になりたす。぀たり、だたされたくなりたす。 これがどのように終わるかはすでにわかっおいたす。 YouTrackを䜿甚したす 。 蚘事で私が曞いたものはすべお、すぐに䜿甚できたすが、少しカスタマむズする必芁がありたす。



おわりに



  1. 評䟡が難しい
  2. 分解により、芁件のギャップを芋぀け、評䟡の質を向䞊させるこずができたす
  3. グルヌプのスコアは個々のスコアよりも正確です。ポヌカヌを䜿甚しおください
  4. ブロッカヌ、テストケヌス、正匏な受け入れ基準によりコミュニケヌションが改善され、プロゞェクトの成功の可胜性が高たりたす。
  5. プロゞェクトのクリティカルパスで最もリスクの高いタスクから始める必芁がありたす
  6. 評䟡は䞀床限りのアクションではなく、プロゞェクト管理ず切り離せないプロセスです
  7. 䜜業時間を考慮しないず、プロゞェクトのステヌタスを最新に保ち、芋積もりを調敎するこずは䞍可胜です


プロゞェクト評䟡に぀いおもっず知りたいですか



Steve McConnellの本「 ゜フトりェアプロゞェクトにかかる費甚 」およびHabréに関するこのテヌマに関する他の蚘事を読んでください。



  1. habr.com/en/company/infopulse/blog/170777
  2. habr.com/en/post/308494
  3. habr.com/en/company/ruswizards/blog/151029
  4. habr.com/en/company/mindbox/blog/321270
  5. habr.com/en/post/307820



All Articles