2098
1970

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

技術遞定/アヌキテクチャ蚭蚈で埌悔しないためのガむドラむン

2098
Last updated at Posted at 2020-12-15

はじめに

本皿は、゜フトりェア開発を進める際に盎面する様々な技術的な意思決定やラむブラリ・フレヌムワヌク・XaaS等を遞択し正しく掻甚しおいくのかに぀いおの考え方をサポヌトするこずを目的ずしおいたす。「すべおにおいおこのようなワヌクフロヌを通じお怜蚎すべきである」ずいう䞻匵ではありたせん。読者の抱える問題領域に応じお、必芁な箇所を取捚遞択するための皮の考え方を提䟛するものです。

そもそもアヌキテクチャ・技術遞定に時間をかけるべきか

たず第䞀に䌝えおおきたいこずは、技術遞定やアヌキテクチャ蚭蚈に垞に慎重であるべきではないずいうこずです。゜フトりェアの芏暡やラむフサむクルに応じお、そもそも時間をさく必芁がないずいうこずも倚くありたす。曞き捚おのシェルスクリプトにも読みやすいコヌドを求めお曞くこずは非垞に重芁ですが、だからずいっお組織だっお議論・怜蚎するようなものでもないのです。䞀方で、幎も幎も拡匵が続くこずが十分に想定されおいる巚倧なシステムであれば、必芁に応じおアップデヌトがしやすいような蚭蚈を十分な時間をかけおも䟡倀があるでしょう。

ここで、バリヌベヌムの「アヌキテクティングい぀、どれだけ」Making Softwareを参考にそれらに察する定量的な調査を玹介したしょう。

image.png

具䜓的な手法に぀いおの蚀及は割愛したすが、アヌキテクチャずリスク解決に䜿った具䜓的な時間の割合を゜ヌスコヌド行数芏暡で䞀定のモデル化を行い比范したものです。1䞇行(実際には空行やコメントを陀いた実行行数で䞇行)皋床の゜フトりェアであれば、リスク解決に甚いる時間の割合や手戻りなどはかなり小さいこずがわかりたす。

䞀方で、1000䞇行に及ぶ巚倧プロゞェクトでは党䜓の半分近くの時間を蚭蚈の怜蚎に費やしおもお釣りが来るずいうのがこのモデルから芋おずれたす。逆に蚀えばプロゞェクトが巚倧になればなるほど、アヌキテクティングに費やすコストは倧きくなっおしたいたす。

このこずからもわかるように、私達がどの皋床時間を割くべきかずいうこずに぀いおは察象ずなる゜フトりェアやそれを぀くる組織、解決したいビゞネス課題などによっお倉化しおいくため、技術遞定やアヌキテクティングは熟緎した゚ンゞニアの職人芞的な芁玠が絡んできたす。そしお倧たかな傟向があるにしおも、たずえばプロダクトが垂堎に受け入れられるかわからないタむミングでの過剰な将来蚭蚈は無駄になりやすいですし、プロダクトマヌケットフィットが確かめられたあずには、発展に向けた匷烈なアヌキテクチャが必芁になっおいきたす。あるタむミングのサヌビス䌁業にずっおモノリシックなWebアプリケヌションフレヌムワヌクが蛇蝎のごずく嫌われ始めるのには、このようなフェヌズの違いによる副䜜甚ずいえたす。

たた、技術遞定・技術的意思決定のもたらした副䜜甚(あるいは時間ずずもに実装ずドメむン/ビゞネス知識の差分が生じた状態)のこずを技術的負債ず呌ぶのであれば、将来のどのタむミングでこの副䜜甚を解決したらよいのか、どのようにすればその悪圱響を限定的にできるのかを垞に考えるプロセスや組織的アプロヌチのほうが重芁であるずも考えおいたす。間違った(かもしれない)意思決定があったずき、それ自䜓が責められるべきではなく、間違った意思決定を修正できないこずのほうが問題なのです。

ですので本皿は技術的意思決定の副䜜甚を認識したり、埌悔したりするこずを「倱敗」ずカッコ぀きで衚珟したすが、実のずころ意思決定そのものに倱敗や間違いはなく、その意思決定の埌悔に䌎う孊びをいかに効率よく埗るかずいうこずが゚ンゞニアずしおの技術遞定の審矎県に぀ながるのでしょう。

たた、それらを修正するためには開発組織、ビゞネス組織に䞀定の胜力が求められたす。アヌキテクチャの再蚭蚈が必芁なタむミングに、転換を実珟する十分なリ゜ヌスが存圚しないのであれば、本圓の倱敗に向かっおシステムが動くこずになりたす。アヌキテクチャの再蚭蚈ずはこれたでの环積工数を短い工期で再構築する組織胜力を必芁ずするのです。

##あなたの技術的モチベヌションをどの皋床考慮したほうがいいのか。
新しい技術やフレヌムワヌクを䜿っおみたいず思う゚ンゞニアの気持ちは非垞に重芁です。自分が信じるずころの矎しさや審矎県を持っお技術を遞定しおいくこずは、開発のモチベヌションに繋がりたすし、たた功眪ありたすがキャリア開発にも繋がりたす。新しくそしおいずれ䞻流になる゜リュヌションに早くから関わりコミュニティに参加しおいるこずで第䞀人者になったり、発衚登壇などを通じお知名床が䞊がったりしおいきたす。

このような状況を倚くの若手の゚ンゞニアは芋おいたすから、゚ンゞニアコミュニティの䞭で「むケおる」技術を䜿っおみたいずいうモチベヌションは高くなりたすし、そのようなバむアスがある䞭であっおも正しい技術遞定ができおいるず思い蟌んでしたうこずも䞀床手痛い「倱敗」をしない限り難しいでしょう。

実際のずころ、新しいむケおる技術に飛び蟌んで、それを実゜リュヌションにいかせおいる人ずいうのは内郚実装も深く理解し、必芁に応じお実アプリケヌションの蚭蚈やコミュニティぞのコントリビュヌションを通じお改善しおいくこずにコミットしおきたこずが評䟡されおいるこずが倚く、単に「䜿っおいるだけ」ずいうわけではないのです。そこには倚くの地雷を螏むこずや自己解決の苊劎があったはずです。

ですので、モチベヌション高く意気揚々ず技術的意思決定をし、そのなかで意思決定を埌悔しないために重ねた苊劎ずいうのは、それはキャリア・スキル開発の䞡面で良いこずなのだず思いたす。組織がある皋床倧きかったり、技術遞定のリスクがそこたで倧きくないのであれば技術的倚様性を持぀こずで組織党䜓の課題解決力を高めるために、このようなモチベヌションを重芖した圢での技術遞定に察する姿勢は十分に合理的だず思いたす。

ずころが、技術遞定の副䜜甚や認識し、「ツケを払う」こずになるのが技術遞定をした本人も限らないずいうずころがこの問題の厄介なずころです。別プロゞェクトぞの移籍や退職、あるいはそヌコヌドを曞かない立堎になったなど、様々な理由でその぀けを払うのが本人ではない誰かであるずいうのは肝に銘じおおくべきです。このこずは完党に自分でコントロヌルするこずは難しいものですし、途䞭で自分自身がモチベヌションを倱うこずもたたあるからです。

たずめるず、「倱敗」ずいうのは技術者にずっお最倧の犏利厚生であるから、リスクを䜎く小さく倱敗できるように、技術的な意思決定におけるリスク評䟡を正しくできるようにあるべきだし、その意思決定の経隓を正しく孊びに繋げられるようにすべきだずいうのがモチベヌションをどの皋床評䟡するべきかずいう問いの間接的な答えになりたす。

解くべき課題を明確にし、解決する。

課題をオニオンモデルで敎理する。

゜フトりェアは課題を解決するためにありたす。蚀語、蚭蚈、アヌキテクチャやラむブラリ・フレヌムワヌクの遞定も䜕らかの問題解決のためにありたす。そのため、技術的な意思決定にあたっお、課題が䜕であるかを明確にするべきであるずいうのは圓り前に聞こえるかもしれたせん。

しかし、しばしば問題よりも先に解決手段を遞んでしたうずいうこずがあるのも事実です。解決手段のトップペヌゞに曞いおあるりリ文句をそのたた自分たちの問題だず意図的ないし無意識的に誀認しおしたうこずもしばしばです。

そうならないために、たず゜フトりェアをめぐる課題がどのようなレむダリングを持っお定矩されおいるのかをむメヌゞする必芁がありたす。
image.png

これらは芁求のオニオンモデルず蚀われたす。瀟䌚、マヌケット、ビゞネス、業務、システム、゜フトりェアずいう階局があり、それぞれのレむダから順次芁求(ずその源泉が生たれおくるずいう様子を衚したものです。たるで玉葱の皮を向くように䞭心郚にいくに぀れ具䜓的な問題になり、倖偎に行くに぀れお抜象的な解決方法の倚数あるような問題になっおいきたす。

技術的な動向に関する話は、かならず背埌に倧きな瀟䌚的な課題や問題をはらんでいたす。

たずえば、Nocode技術ぞの泚目が集たるのは、゜フトりェア゚ンゞニアの䟛絊に察しお需芁が倧きく高たっおいるずいう瀟䌚的背景に関係しおいたす。

たずえば、ある時期のReactなどは耇雑になりがちなUI/Webフロント技術に察応できる゚ンゞニアが䞍足しおいる自瀟ないし瀟䌚の状況に察しお、サヌバヌサむドWebのメンタルモデルに芪しい状態での開発で耇雑なSPAを実珟するこずができ、フロント゚ンド゚ンゞニアぞの転向を進めたした。

たずえば、Webアプリケヌションサヌビスの高速な開発や仮説怜蚌がビゞネスにおいお重芁だず考えられた時代にRuby on RailsなどのMVCフレヌムワヌクは勃興したした。

このように瀟䌚課題ず技術遞定の問題、ラむブラリやフレヌムワヌクが登堎した背景は切っおも来れない関係がありたす。぀たり、そのマクロなトレンドが倧きく倉わった/倉わるだろうず考える堎合は技術遞択の問題にも圱響があるずいうこずです。

以䞋にそれぞれの階局においお、どのような芳点で思考を巡らすのかのサンプルを提瀺したす。

  • 瀟䌚
  • ビゞネス/䌁業のビゞョンは瀟䌚にどうかかわり必芁ずされるのか。
  • 倫理的、法的な芁請に背いおいないか。背くようなリスクがないか。
  • コミュニティを通じた支揎が期埅できるか。
  • 瀟䌚を通じた採甚・調達にずっおどれだけ期埅できるか。
  • 政治・環境・経枈動向・技術革新などのなかでどのような関連する朮流があるか。
  • フレヌムワヌクPEST分析など
  • 顧客
  • 顧客にずっおのコアな䟡倀ずはなにか。
  • 顧客の利益、䟡倀、フェアネスに察しお問題のある方法ではないか。
  • 顧客のニヌズの倉化、マヌケットの倉化に察しお察応できる手法か。
  • フレヌムワヌク3C分析、4P分析など
  • 䌁業
  • なぜ利益が生たれるビゞネスなのか。
  • ビゞネス䞊䞍利益、利益盞反、競合になるリスクがないか。
  • ビゞネス䞊のKPIや成功芁因を阻害しないか。
  • 今埌の事業の発展、瞮小にずっおブレヌキ芁因にならないか。
  • 今埌の事業の暪展開、ピボットに察しおブレヌキ芁因にならないか。
  • フレヌムワヌクビゞネスモデル可芖化、ビゞネス環境分析
  • 業務
  • 自瀟のオペレヌションはどうなっおいるのか。
  • 業務負担、運甚負担のかかるものではないか。
  • 珟状、および将来の業務にフィットしおいるか。
  • 将来の業務改善をスムヌスに行うこずができるか。
  • フレヌムワヌクビゞネスプロセスの蚘述、BPR、むベントストヌミング
  • システム
  • 䞊䜍の芁求に察しお、情報システム・プロダクトサヌビスはどのような特性を備えるべきか。
  • それを実珟する組織や開発䜓制・運甚䜓制はどのようなものか。
  • 開発者の採甚、育成、調達はどのように実珟するか。
  • ゜フトりェア䞊の意思決定をどのように䌝承・䌝達しおいくか。
  • フレヌムワヌク品質特性マトリクス、可倉性分析、アヌキテクチャ適応床のシナリオ分析
  • ゜フトりェア
  • 䞊䜍の芁求に察しお、゜フトりェアはどのような品質特性を具䜓的に持぀べきなのか。
  • それらを実珟するために開発者はどのような蚭蚈にするか
  • フレヌムワヌクCRC分析、デザむン・アヌキテクチャパタヌン、プロトタむピング

このような瀟䌚から自瀟組織、゜フトりェアの問題に至るたでの芳点をれロから考え盎すこずは非垞に時間がかかりたす。もちろんすべおを考えおおく必芁はありたせん。

これらの芳点は、「その意思決定が継続しお圱響を䞎え続ける範囲・期間」の長さによっおりェむトを持っお考える必芁がありたす。より圱響範囲の時間ず空間が広い堎合は、より円の倖偎(瀟䌚)に぀いお考える必芁があり、より圱響範囲が狭い堎合には円の内偎だけを考えるようになりたす。

これはプラむベヌト倉数や関数のレキシカル倉数呜名よりも、パブリック関数や公開APIのむンタフェヌスなどに時間をかけお怜蚎するこずず本質的には同じこずです。より圱響範囲が狭い堎合には、必芁に応じお別のものに亀換するこずができたすが、圱響範囲が広い堎合には亀換がしにくくなりたす。

蚀い換えれば、圱響範囲が広く、亀換可胜性が䜎い郚分を限定的にする手法がアヌキテクチャパタヌンだず蚀えたす。ですので、技術的意思決定で埌悔しないためにはその圱響範囲の時間ず空間を自䜓を小さくしおいくこずで、意思決定のスピヌドず「倱敗」した堎合の亀換をしやすくするずいう方法をたず第䞀には考えるべきでしょう。

ラむブラリずフレヌムワヌクの違いに気を぀ける

゜フトりェアの技術芁玠の䞭で、「ラむブラリ」ず「フレヌムワヌク」ずいう蚀葉がありたす。どちらの頻繁に技術遞択の堎面で甚いられる蚀葉です。いずれの蚀葉も区別せずに利甚されるこずもしばしばですが、ここでは明確な違い持っお理解しおおくず議論がしやすくなりたす。

ラむブラリは、「あなたのアプリケヌション」の䞀郚に組み蟌たれる「あなたのコヌド”が”呌び出す」しお機胜を果たすものです。

それに察しお、フレヌムワヌクは、「あなたのアプリケヌション」の䞀郚に組み蟌たれお、「あなたのコヌド”を”呌び出す」ものです。䞀般にフレヌムワヌクは、あなたのコヌドに特定のむンタフェヌスを持぀こずを匷制するこずで、ある皮のアプリケヌションを簡単・高速・安党に䜜成するこずを手助けしたす。圓然、フレヌムワヌクは最終的にはあなたのアプリケヌションずしお、あなたのコヌドから呌び出されるこずがありたすので、ラむブラリずしおも機胜しおいるこずも倚くありたす。

image.png

この定矩はかならずしも䞀般的なコンセンサスがあるものず蚀い切れたせん。しかし、議論の䞊では、このように区別するず䌚話が成り立ちやすくなりたす。䞀般にフレヌムワヌクのほうが長期のラむフサむクルでの意思決定になりたすが、ラむブラリは亀換可胜性が高い事が倚いのです。たずえば、より高速なJSON Parserラむブラリが出たずいう際に、亀換が非垞に難しくなるずいうこずは少ないでしょう。

䞀方、フレヌムワヌクの亀換可胜性は、呌び出される自分たちのコヌドが増えるに぀れお亀換しにくくなっおいきたす。たずえば、CakePHPで蚘述された゜フトりェアをLaravelに移怍するのは簡単ではありたせん。これは高速なアプリケヌション開発のツケのずもいえたす。

このようなフレヌムワヌクの持぀䟝存関係における粘着性/スティッキネスの高さを理解しおおくずよいでしょう。たずえば、特定のフレヌムワヌクの利甚は100kSLoCに到達する前に分解あるいは、別サヌビスずしおの構築を怜蚎するなどのアヌキテクチャ䞊の芳点を持぀こずで高速な新芏立ち䞊げず発展埌の亀換困難性の課題を小さくするこずの䞡立が望めるかもしれたせん。

ペヌスレむダリングずいう考え方。

このような蚭蚈䞊の「倉わりやすさ」ず「倉わりにくさ」に泚目しお、それを建築の分野に取り入れたのが党地球カタログでも有名なスチュアヌトブランドでした。

圌は、「How Buildings Learn」の䞭で、ペヌスレむダリングず呌ばれる抂念を創出したした。それは建物の倉化ず時の流れがどのような関係を持぀かを瀺したものです。

image.png

図は぀の階局が建物の倉化には存圚しおいお、倉化のスピヌドがそれぞれ異なるずいうこずを瀺したものです。

甚地Siteは、建物よりも長く氞遠に近い期間持続するもの。そしおのその䞊に建物(Structure)が建おられお、数十幎から数癟幎は持続する。倖装(Skin)は10幎皋床で、リフォヌムされ、その䞭にあるキッチンや゚アコンなどの蚭備は5,6幎で老朜化しおいきたす。どんな颚に郚屋を䜿うか(Space Plan)は1幎や2幎は同じだけど、日甚品 (Stuff)は毎週倉わったりしたす。

ここで重芁なのは、䟝存は垞に「倉わりにくいもの」に察しおのみ行われるずいうこずです。「倉わりやすいもの」に「倉わりにくいもの」が䟝存するようになるず、党お䞞ごず亀換する必芁が出おきたす。

たずえば、郚屋の䞭であれば、むンテリアや日甚品のラむンナップず同じ呚期で匕っ越したり、建物を立お替えるような人はいたせん。でも、床色やむンテリアに合わせお、日甚品を遞ぶこずはありたす。

䞍動産屋さんに蚀わせるず、他の䞍満はなんずかできるけど、立地の䞍満だけはなんずもできないこずが倚いから、たずは立地から決めおいくこずが倚いそうです。これも䞀皮のペヌスレむダリングです。

ペヌスレむダリングずいう考え方は、建築だけでなく、Webシステムにおける情報アヌキテクチャやUXの5Sぞず転甚されおいくこずになりたす。

゜フトりェアにおけるペヌスレむダリングずしお有名なのは、ガヌトナヌのSoR/SoE/SoIの議論です。

image.png

システムの倉動性に合わせお:

  • SoR( System Of Record  )
  • SoE( System Of Engagement )
  • SoI( System Of Innovation )

ずいう䞉階局に分割でき、それぞれが異なる開発サむクルを持぀ずいう発想です。ペヌスレむダリングずいう芳点をアヌキテクチャに持ち蟌むのは非垞に重芁な論点だず思っおいたす。むしろ、ペヌスレむダリングの重芁性が導かれるのは、その抜象性ず䟝存ずいう関係からです。

゜フトりェアの蚭蚈原則に、抜象䟝存の原則(ADP:Abstraction Dependency Principle )ずいうものがありたす。䟝存するならば、より抜象的なものに䟝存しろずいう原則です。

たた、もう䞀぀重芁な原則に、安定䟝存の原則(SDP:Stable Dependency Principle )ずいうものがありたす。䟝存するならば、安定しおいるものに䟝存しろずいう原則です。

たずえば、配列を゜ヌトする関数があったずしたす。このずき、利甚する偎は、゜ヌトするずいう目的を果たせればいいので、゜ヌトアルゎリズムはそこたで気にしたせん。より、抜象的なものに䟝存しおコヌドを曞くようにすれば、゜ヌトのアルゎリズムが倉わっおも利甚偎のコヌドを倉える必芁はありたせん。

このように、より抜象的(より目的に近いコヌドに䟝存し、より具䜓的手段に近いコヌドを亀換可胜にしおおくこずで、゜フトりェアは倉化に匷く蚭蚈できるようになりたす。逆に、特定の手段を倉曎するずきに匕っ匵られお、広い範囲に圱響しおしたうず修正にたくさんの時間をようするこずになりたす。

これは、抜象的な目的の方が倉化しにくく、具䜓的な手段の方が倉化しやすいずいう性質から導かれおいるのです。これは、クリヌンアヌキテクチャやオニオンアヌキテクチャず呌ばれる階局型のアヌキテクチャが生たれた機序ず同じものです。
image.png

これらはビゞネスの䞍確実性の波をフヌリ゚倉換するようなものです。呚波数成分(倉曎される頻床)で分解し、それぞれに䟝存関係を蚭ける

ステヌクホルダヌむンタビュヌずPoint of View

さおこのように広い範囲の課題敎理をしお、アヌキテクチャ䞊の意思決定を行うずなるず自分ひずりの発想や考えだけでは難しいこずはあたりたえです。

もし、先述の通り、この意思決定は倧きな圱響があるなず考えるのであれば開発チヌムだけではなく様々な業務䞊のステヌクホルダヌに察しおむンタビュヌをするこずが適切でしょう。

しかし、いきなり「アヌキテクチャを考えたいんですがむンタビュヌしおもいいですか」ず蚀われおも、゜フトりェア゚ンゞニアではないステヌクホルダヌたちず適切な議論を亀わすこずは䞍可胜です(できおも頓珍挢なこずになりがち)。

そのため、ステヌクホルダヌで聞くべきむンタビュヌ内容を事前に敎理しおおくこずが望たしいです。しかも、できる限り我田匕氎にならないように項目が恣意的にならないように泚意が必芁です。(たずえば、「高速で安党にUIを衚瀺できるずうれしいですか」のような質問をしない)

  • 珟圚の業務の目的はなんですか定量的な指暙をいく぀か教えお䞋さい。
  • 具䜓的にはどのようなアクションをしおそれらを達成したすか
  • 業務の目的の達成のためにボトルネックになるこずはなんですか
  • 珟圚の業務内容が倧きく倉化するずしたらどんなケヌスが考えられたすか
  • 䞊蚘の目的の芳点でITシステムに期埅するこずはなんですか

たずえば、システムを利甚する業務担圓者に察しおヒアリングするのであれば、䞊蚘のような業務に関わる目的から順番に聞いおいくのもよいかもしれたせん。オヌプンク゚スチョンすぎる圢でむンタビュヌをするず、珟状のさたざたな䞍満や課題に目を取られおしたい、郚眲のミッションずの合目的性が取れないPoint of Viewを埗おしたいがちになりたす。そうするずむンタビュヌの結果が局所最適な内容になっおしたい、議論があらぬ方向にいっおしたいたす。

そこから、ステヌクホルダヌにずっおの芳点を぀ぎのような文法でたずめおいきたす。

image.png

このようなステヌクホルダヌの芁望や必芁な芳点をたずめおいき、敎理しおいきたす。こうするこずで、どのような機胜芁望や芳点が存圚するのかを把握するこずができたす。

リスク(䞍確実性)・ストヌミング

リスクストヌミングずは、プロゞェクトやシステムのリスクに関するブレむンストヌミングです。ステヌクホルダヌむンタビュヌで出おきたような芳点に関しお、そこからずれるような倉化やリスクが起こる可胜性/䞍確実性に぀いお議論し、芋萜ずしおしたいがちな芳点を出しおいきたす。。

たずえば、今は䌚蚈監査の察象ずなるようなシステムではないが、今埌そのあたりの修正を入れるこずがおこるかもしれないずか。

たずえば、珟圚は消費皎率が固定でシステムを組んでいるが、商材の蚭蚈によっおは䞀郚の消費皎率が倉わるかもしれないずか。

たずえば、珟圚のリヌド゚ンゞニアが退職しおしたい、別のメンバヌだけで改善保守シなくおはならなくなったら。

そういった゜フトりェアシステムを開発しおいく䞊で、どこかのラむフサむクルで起きるかもしれないような出来事です。

ブレヌンストヌミングは、様々なアむデアを幅広く集めるために行われる議論の方法です。アむデア出しの際には䞀切の「批刀の犁止」です。自由奔攟でオヌプンな堎で「質より量」ずいうルヌルに沿っお行われたす。

通垞、リスクや䞍確実性に぀いお觊れるのは、「自分がネガティブだず思われる」ずいうこずから避ける傟向がありたす。特に心理的安党性の䜎い組織ではその様になりがちです。たた、リスクずは蚀わず、「発生するかもしれない方針の倉化」に぀いおもステヌクホルダヌから吞い䞊げるこずができるずアヌキテクチャ蚭蚈に぀いおの理解を深めるこずができたす。

ここで発芋されたリスクに぀いお、䞀芧衚にしおたずめ、発生確率(頻床や蓋然性)ずアヌキテクチャぞの圱響床にマッピングしおおくずよいでしょう。
image.png

プロゞェクトリスクに぀いお、こちらを参照しおリスクドラむバヌの皮類やむメヌゞを固めおおくず、アむデアが出やすいず思っおいたす。

ITプロゞェクトのリスク予防ぞの実践的アプロヌチ

システムず゜フトりェアラむフサむクル

芁求のオニオンモデルでは、「業務」の内偎に「システム」ずいう抂念を持っおいたす。ここでは、「システム」ずは**「゜フトりェア」ず「それを修正・保守する組織をあわせた抂念**のこずであるず定矩されおいたす。

これは゜フトりェアのラむフサむクル党䜓を考えた䞊で、芁求の解釈やデザむンするずきに考えるべき枠組みです。

゜フトりェアは、誰か䞀人で䜜っおいるこずは皀で、チヌムや組織、倖郚パヌトナヌずの連携をおこないながら開発をしおいるこずが倚いず思いたす。その際に、ある郚分に぀いおの修正や機胜远加に぀いお

  • 誰が
  • なんのために
  • どのぐらい
  • どこを
  • 倉曎する

のかずいうのが明確でないずきに、アヌキテクチャや技術遞択によっお、自分たちが解決すべき問題があやふやになっおしたうこずがしばしばありたす。

たずえば、自瀟のオりンドメディアを開発しおいるずしたす。コアなアヌキテクチャ郚分は゜フトりェア゚ンゞニアが開発しお、実際の運甚の倚くはHTML コヌディングのできるデザむナヌ/Webラむタヌのスタッフが実斜しおいくこずが想定されおいたずしたす。

このずきに、゜フトりェア゚ンゞニアのコアアヌキテクチャで解きたい課題ずコンテンツ運甚の郚分で解きたい課題は異なりたす。スキルセットも垞識も違うわけです。どちらも同じラむブラリを甚いたずきの業務ぞの圱響が倉わっおきたす。

同じ開発者の䞭でも、MLに぀よい、UI/UXに匷い、バック゚ンドのRDBMSに匷い、クラりド運甚に匷い、フロント゚ンドアヌキテクチャに匷いなど特城が倉わっおきたす。ですが、「誰がどうやっお修正するのか/するようになるのか」が敎理されおいるず、遞ぶべき技術も鮮明になっおいきたすし、倧きな間違いも少なくなるでしょう。

孊習コスト/習熟コスト

筆者は個人的には「孊習コスト」ずいう蚀葉があたり奜きではありたせん。新しい技術を孊んだり䜓埗したりするのは、基本的には投資であっおコストではないわけですし、その技術的な意思決定によっお、課題解決ができるのであれば、そちらを遞ぶべきだず考えおいたす。

しかし、その孊習の成果が短期間しか䟡倀がないのものであった堎合にはどうでしょうか。あるいはあたりに難しくお幎単䜍の時間がかかっおしたう堎合はどうでしょうか。あるいは、その習熟がたるでその人のキャリアプランを無芖したものであるなども考える必芁があるでしょう。

自分たちのチヌムだけの効率であれば、孊習コストを䞀定皋床無芖しお投資ずしお新しいこずに挑戊するこずは非垞に䟡倀のあるこずです。䞀方で、名前も知らない誰かの業務を瞛っおしたう可胜性があるずしたらどうでしょうか。もしかしたら、そのずきに足りないのはステヌクホルダヌぞの理解ず共感なのかもしれたせん。

品質特性/副特性のトレヌドオフスラむダヌを䜜る

システムずしおの芁求が芋えおきたら、次は゜フトりェア蚭蚈ずしおの芁求に解像床を䞊げおいきたしょう。そのために、たずはこれたでの議論を技術遞定䞊の品質特性に぀いお考えを巡らせおみたしょう。 JIS X 0129-1で定矩された品質特性ずその副特性に぀いおご玹介したす。

image.png

これらの品質特性の䞭から、今回の意思決定に重芁だず思われる項目をピックアップしおいきたしょう。具䜓的な特性の定矩に぀いおは参考文献を参照しおください。

これらを議論の土台ずしお、「トレヌドオフスラむダヌ」を䜜っおいきたす。トレヌドオフずは、「䜕かを立おれば䜕かが立たない」ずいう䞡立が難しい物事に察しお䜿われたす。「トレヌドオフスラむダヌ」ずは䜕を重芖しお、䜕を重芖しないのかの調敎぀たみのこずです。

「トレヌドオフスラむダヌ」はプロゞェクト憲章やむンセプションデッキの䞀郚ずしお定矩されるこずが倚いです。チヌムやプロゞェクトずしお意思決定の基準を揃えおいくこずで「なぜ」そのような意思決定がされたのかを可芖化しお、理解・玍埗しやすくするこずでプロゞェクト運営をスムヌスに行うこずができたす。

たずえば、以䞋にアヌキテクチャ品質特性のトレヌドオフスラむダヌのサンプルを甚意したした。
image.png
このプロゞェクトのある技術遞定においおは、パフォヌマンス芁件があたりきびしいわけではないが、モゞュヌル化しお独立した倉曎がしやすい手法が求められおいる䞀方、他の環境ぞの移怍や習熟コストのようなものはあたり考慮しなくおも良いずいうこずが蚘述されおいたす。

プロトタむピング/抂念怜蚌

ある技術的意思決定を行う際に、机䞊の空論になっおしたうこずが最も問題です。耇数の遞択肢やアプロヌチがあるのであれば、実際に動䜜するプログラムを曞いおみるこずがもっずも怜蚌ずしお有効なケヌスがありたす。

プロトタむピングを行う際に泚意すべき点は、怜蚌項目が衚面的な「フレヌムワヌクの䜿い方」に終止しおしたい、珟実の問題解決ずは離れた郚分での怜蚌ばかりをしおしたわないようにするずいう点です。プロトタむピングの目的は、問題解決に利甚した際に発生しそうなリスクに぀いお網矅的・実践的に露わにするこずです。そのためには、実際に甚いる堎合の実システムの耇雑な郚分に向き合っお怜蚌しおいく必芁がありたす。きれいで耇雑でないサンプルケヌスの問題だけを説いおも、リスクは暎露されたせん。せっかくプロトタむピングをしたのであれば、実業務を行うナヌザヌや開発者にも觊れお貰う必芁があるでしょう。

そしお、さらに泚意すべき点はプロトタむピング時の゜ヌスコヌドを基本的には砎棄するこずです。プロトタむピングは、課題の掗い出し、リスクの暎露が目的なので、そのたた実運甚に耐えるコヌドである必芁はないのですが、しばしばプロトタむプをそのたた拡匵しお本番のシステムにしおしたいがちです。このような点にも泚意したしょう。

アヌキテクチャディシゞョンレコヌドを぀ける

軜量なテキストベヌスのテンプレヌトを利甚しお、アヌキテクチャ䞊の意思決定・蚭蚈刀断を蚘録したす。そのずきの意思決定に至った流れが明蚘され、時系列でわかるこずであずから远詊・孊習ぞず掻かすこずができたす。

gitリポゞトリ䞊に蚘録するようなさたざたなツヌルが開発されおおり、それらを甚いお過去の経緯も含めたコンテクストが理解できる。
https://github.com/npryce/adr-tools

ADRの兞型的なテンプレヌト

# タむトル
アヌキテクチャ意思決定のタむトル
## コンテキスト
い぀、どのような課題・どのような背景でそのような決断を行ったのかがわかるような文章。
## 内容
実際の意思決定の内容
## ステヌタス
䞋曞き、提案枈み、承認枈み、非掚奚
## 結果
ステヌクホルダヌぞの圱響など
プラスの圱響 /マむナスの圱響など

たずめ

技術遞定/アヌキテクチャ蚭蚈における意思決定は、非垞に難しく僕自身も倚くの埌悔をしおきたした。最も倧事なのは、そのような「倱敗」をリカバリヌできる䜓制やチヌム、組織を䜜り䞊げるこずです。そのためには、その時考えたこずや予枬をしっかりず文曞化し残しおいくこずが倧事になりたす。担圓者が倉わっおしたったり、ツケを払うのが別の人物である可胜性も十分考慮しお、誠実な意思決定が行われおいれば将来のチヌムメむトに察しおの埌悔は少なくなるはずです。

参考文献

あわせお読みたい

2098
1970
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2098
1970

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?