ロッククライミング

求められるライブ設計力!

私が勤めているソニックガーデンでは、ライブ設計力というものが求められます。 というのも、お客さんの要望を聞いている間に、ある程度自分の中でデータの構成を考えて、 ミーティング中に実装で必要な情報が揃っているのかを常に考えなければなりません。

ソニックガーデンでは、受託開発で 要件定義をしない ことを実践しています。毎週ミーティングをして、 その週に必要な開発だけを実装します 。そのため、

要望を聞く

一度会社に戻ってタスクの見積もりを出す

これでよいか顧客先に尋ねる

という流れを同じミーティング内でおこない、その場で設計ができていないといけません。

なぜ、この方法でうまくいくのか気になった人は弊社代表倉貫の著書に詳しく書かれていますので ご一読下さい(ステマ?)。 「納品」をなくせばうまくいく ソフトウェア業界の“常識”を変えるビジネスモデル

私は修行中の身で、技術的にも知らないことが多いです、そんな状態ではその場で構築していくライブ設計は難しいです。 ではどうやってライブ設計力を鍛えていくのかというと、そこで スパイク の登場です。

スパイクを打つとは

スパイクはアジャイル開発やXP(エクストリームプログラミング)の用語なんですが、 もともとはロッククライミングの時に打ち付けるSpike(命綱を止めておくために岩に埋め込む金属)が由来だそうです。 ロッククライミングではスパイクを打つことでリスクを減らし、プログラミングでは技術的判断の見積もりのリスクを減らしてくれます。

プログラミングにおいて スパイクを打つ とは、簡単に説明するなら

分からない所が無くなるまでタスクを分割し、実装に取り掛かる

ただ、それだけです。

スパイクを打つ流れ

スパイクを打つ際の流れを図にしてみました。それぞれを順に見ていきます。 スパイクを打つ流れ

①タスクのゴールを決める

最初にタスクのゴールを決めます。これは、以前の記事 認識合わせで注意したいこと(チケット管理のタスク編) で書いた、 チケット(タスク)作成者が何を実現しようとしているのかを理解する 必要があります。 このチケットで最終的に実現したいことができるようになるには? を考えてゴールを決めます。

②タスクを分割

ゴールを決定したら次に、ゴールまでの実装を考えてみます。細かくしてUnknownの部分がなくなるまでタスクをバラしていきます。 ロッククライミングで例えるならスパイクの打ち忘れは死をまねきます。 そんな、意気込みでタスクを分割するといいです。 目安としては、 ソニックガーデンでは実装するコードが思い描けている状態まで落としていきます

しかし、タスクを分割していると、自分の触ったことのない技術だったり、実装方法が分からない状況にぶつかる と思います。 その際は、実際に技術調査をおこない、簡単なサンプルプロジェクト等を作ったりして、実際に動くことを確認してからタスクにしていきます。 この部分は、時間に追われていたりすると面倒な作業ですが、行き当たりばったりで実装していると、 途中で実装方法が無理だと気づいて大きな手戻りが発生する場合があるので、このような事態も防ぎたい です。

③コードのみの状態

この状態までなったら、コードの状態までタスクが分かれているので、実装するだけです。 しかも、他のメリットとして、細かくタスクが分かれている&疑問点が一つもない状態なので、 精度の高い全体の見積もりが可能です。 余談ですが、とあるソニックガーデンの岡山県に住むプログラマはコードまで頭の中でできているので、 実装中は喋りながらでもプログラミングができるらしいです。すごいですね。

スパイクをしっかり打っていくと

こういった、スパイクを毎回しっかり打っていくと、最初のうちは調査や実際に動くのか確認する作業に時間を取られていきますが、 徐々に大きなタスクのままでも実装できて、技術調査やタスクバラシの時間が減っていきます。 すると、最初の目的であったライブ設計力が身に付いていて、お客さんとの要望を聞いている最中に設計ができ、 足りない情報や必要のない部分に気づくこともできるようになってきます。