ボクココ

サービス開発を成功させるまでの歩み

開発手法を学ぶことに意味を感じない件について

ども、@kimihom です。

開発手法について議論されたり、発表するような場があったりする。例えば “弊社ではアジャイル開発手法を用いて最先端の開発を実践しています。” 的な話ね。最近はアジャイルじゃなくて何て言うのかよく知らないけども。 それらの話に関してなぜ私が意味を感じないと思うのかを書いていこうと思う。

事前に一つ注意していただきたいのは、私は開発手法に関する話は1,2冊程度しか読んだことがない。だから開発手法を極めればこんなことができるようになる!みたいなのは是非教えて欲しい。開発手法に関する本を読んで、それが全く見えなかったから興味が沸かなかったので。

それより実際に開発しようぜ

基本的にあまり開発をしない方々が、開発手法に関して話しているような感じがする。開発しない立場でチームの開発をとりまとめる立場であるために、何か良い方法を模索している感が漂ってくる。はて開発手法通りにやったところでチームの技術力が上がったり、良いプロダクトができるのだろうか?他のプロジェクトのやり方を真似したり参考にしたところで、本当に自分たちの開発手法とマッチしているのだろうか。

私は技術力のない集団が先端的な開発手法を取り入れれば良いプロダクトができるなんて思わない。反対に技術力のある集団が、開発手法を学ばなくても良いプロダクトは確実にできると思っている。

例えば開発のできない集団がリリースサイクルを細切れにして継続的にデプロイしますってことをしていても意味がない。開発品質もテスト品質も未熟なので、中途半端な機能を継続的にリリースするだけだろう。それだったらじっくり設計をやってレビューもらって開発してってので1ヶ月時間をかけたほうがいいはずだ。テスト駆動開発やってますって話をしたところで、中途半端なエンジニアが適当なテストコードでカバレッジを満たしていればそれでいいのだろうか。優秀なエンジニアがやるからこそそういう開発手法ってのは意味が出るのであって、ただ単に開発手法だけを学んでプログラミングが不得手な集団がやっていたら何の意味もない。無駄にガチガチのコードになって逆に変更に柔軟に対応できない鎖に結ばれたようなシステムになるだろう。プログラミングをたくさんやってたくさん失敗して学んでいかない限り、開発の理想を実現するのは困難だ。

開発できる人ってのはちゃんと設計してプログラミングしてテストしてってのを繰り返して顧客に価値を届けるってことを当たり前のようにやっている。んで、そういう顧客に価値を届ける開発をたくさんやった経験をした人こそが、開発手法で本来目指していると思われる理想的なチームに次第になっていくのではないだろうか。例えば繰り返しデプロイをやってきた経験を通して、そこは自動化できるよねだとか、毎回同じテストを手動でやってたら、ここはテストコード書いてみようだとか勝手になっていくものではないか。開発手法の理論から始めた人では本当にテストコードを書いたほうがいい理由なんて見えてこない。テスト書こうぜ!って言って同意してくれるのは、実際にテスト書くことに意味を感じたことのあるくらいプログラミングと手動テストをたくさんやってきた人のはずなのだ。

つべこべ言わないでまず開発しようぜってのは、開発し続けた先にこそ、自分たちだけの答えがあるのではないかってことが言いたいからである。そして開発手法を勉強する時間があるくらいなら、プログラミング全般を学んだり、そもそも何かを作るてことをした方が圧倒的に大切だと思うのである。

開発の経験こそが、次なる素晴らしいプロダクトを作り上げる条件だ。 私は実際そう信じて続けてきたことでより良いプロダクトを作り上げることができた。だからこの方法は正解だと今では思っている。

チームとしての開発よりも自律的な開発を

チームとしてみんなで1つのを開発していこうぜ的なアプローチって非常に難しい。何かするたびに変更が入って、メンバーと確認してどうするか決めて・・。みたいな流れが発生することだろう。

こんなことになるくらいだったら優秀な1人のエンジニアが開発したほうがよっぽど早くいいものができたと言われるのがこのパターンである。実際1人で開発するってのは本当にスピーディーに良いものが作れる。では大人数で開発するってことで少人数で開発するよりもパワーが生まれるのはどんなときだろうか。

私の一意見に過ぎないけども、自律的な組織こそがそれを可能にすると考えている。つまり、このシステムは1~3人のあなたたちだけでお願いね と完全に分離させるやり方だ。特に web/api/スマホ などで少人数で分担し、最終的に一つのプロダクトを作り上げるような組織がいいんじゃないかと思う。そうすれば一人一人が主体的になってそれぞれが開発に集中できる環境が生まれる。

結局は優秀な少人数で開発すれば OK って話になってしまうんだけど、結局そういうことだと思う。だからこそ、それぞれが優秀なエンジニアになるためにまずはプログラミングをひたすら学び、開発し失敗しよう。やがてチームごとの開発手法ってのは勝手に生まれてくるものなのだから。今回は言いたかったのはそこんところ。

終わりに

今回は開発手法に関するお話が出てくるたびにモヤってたのでそのことについて書いた。

皆さんの意見を聞かせていただければ幸いである。