PoohSunny's blog

生きるために食べるのか、食べるために生きるのか。

【翻訳】ソフトウェア見積もりのパラドックス

はじめに

このエントリーは、Chris Lucianさんの Software Estimation Paradoxを許可を得て翻訳したものです。また、 Recruit Engineers Advent Calendar 201820日目のエントリーでした。盛大に遅れましたごめんなさい。 誤訳等の指摘歓迎です。

ソフトウェア見積もりのパラドックス

人は以前に何度も完了したものの見積もりは上手にできる。

ソフトウェア開発者は、繰り返せるものや、時間のかかることは自動化する。

上手に見積れるものは、以前になんども繰り返して、自動化していないものである。

なぜソフトウェア開発者は、以前になんども繰り返したことを自動化しなかったのだろうか?

見積もりはムダだろうか?

ソフトウェア見積もりのパラドックスからすると、簡単に自動化できたソフトウェアは自動化できたかもしれない、といえます。また、見積もりが締め切りになってしまう環境下では、作りこまれるムダの量が増加するとも言えるでしょう。これはリーンソフトウェア開発の中核的なコンセプトに本質的に反しています。

どうやってムダを減らす?

ムダを減らすには、インセンティブの構造を変える必要があります。良い設計、継続的デリバリー、継続的インテグレーション、垂直的な区切り、遅延コストに基づく小さな機能の優先順位づけを組み込むことで、価値を素早く実現し、劇的にムダを減らすことができるようになり始めます。

次に何をすべきか?

https://3.bp.blogspot.com/-bfIoJ9XBPV0/W1dY8p-U7xI/AAAAAAAAceY/SLsqCYUxzEgcunubQiNKeN7YVRbbtm_hQCLcBGAs/s1600/HowToPrioritizeSoftwareDevelopment.PNG

元記事からそのまま転載しています。そのうち訳します。

もし、次にやるべき機能を全てやろうとしていたら、継続的デリバリーと、垂直的なスライスを利用することで、その機能の遅延コストに基づいて機能を選ぶことが可能になります。機能を選んだ後は、今までに利用したことがない技術を含んでいたり、未知の設計を選択した機能を検証します。我々はこれを「既知の未知(known unknowns)」と呼びます。従来の見積もりのプロセスでは、これらの見積もりをするための調査期間を設けていただろうということに注意してください。もし、既知の未知が見つかった場合は、もし、既知の未知が見つかった場合は、コンセプトの証明のために時間をとるか、現状の我々の知識ではその機能の作成は不可能だと結論づけます。ひとたび、全ての既知の道がなくなったら、新たな未知の未知が見つかるまで機能のデプロイを進めます。もし何か未知の未知が見つかった場合は、再びその未知が消えるまでコンセプトの証明を行います。この時点で、デプロイし、次の機能に取り掛かります。このプロセスを、基本となる開発プロセスに組み込みむことで、コードはより高品質であることを維持し、途中でも効果を出し続けられるようになるでしょう。

https://2.bp.blogspot.com/-Sl0JIHmxrGU/W1dbdNb-MUI/AAAAAAAAcek/Y0YKSaeI63U4y6HlD9FVSrgbyku0rPWZgCLcBGAs/s1600/TheCoreDevelopmentProcess.PNG

元記事からそのまま転載しています。そのうち訳します。

どうやって安全にムダを削減する?

この方向性をサポートするプロセスや技術はたくさんあります。下記のプロセスをゆっくりと組み込めば、徐々に変化していくことに気づき始めるでしょう。

  1. アジャイルなふりかえり
  2. ラーニングセッション
  3. カンバン
  4. WIP制限1
  5. ユニットテスト
  6. 超最小のMVP
  7. 継続的インテグレーション
  8. Zaroboogz1
  9. 自動化された受入テスト
  10. 継続的デリバリー
  11. 遅延コストに基づいたイテレーション

フィードバックがありますか? コメントでディスカッションに参加してください! そしてtwitterの #NoEstimates ハッシュタグもチェックしてください。


  1. [訳注]すいませんこれ何かわかっておらず質問中です。わかる人いらしたら教えてください。

「パパ、ぼくコンピュータが欲しい」

そう長男に言われたので、あぁ子どももこういう年になったんだなぁ。というわけで、その時のエピソードです。
エンジニア父としては、せっかくコンピューターに触れるのであれば、仕組みとかにも興味持てる形にしたいな、と思うわけです。

そこでRaspberry Piですよ!

というわけで、やっぱりラズパイがいいな、と思って購入しようかと思ったら、なんと同僚のRYoMa@牛勢(@RyoMa_0923)さん | Twitter さんがRaspberry Pi 2 Model Bを譲ってくださるとのこと。というわけでありがたくいただいてしまいました。感謝!

f:id:swimming_pooh:20181210154523j:plain

とりあえず見せてみる

父「この前コンピューター欲しいって言ってたじゃん?」
長男「うん」
父「これ、なんだかわかる?」
長男「わかんない」
父「これがコンピューターなんだよ」
長男「えええっ!」

というわけでなかなか反応は上々。ちなみに各パーツの話をしようとしたらつまんなそうにしたんでまだその時じゃないんだな、と思って次回としました。

セットアップ

実は私自身がラズパイを触るの初めてだったので、ググりながら。

f:id:swimming_pooh:20181210154846j:plain

順調にRaspbianが入りました。(本当は起動直後に電源落ちて入れ直した)子どもたちにはOSの説明とか軽くしてみました。直後に外に遊びに言ってました。
インストールが終わる頃、「そういえばなんでコンピューター欲しかったの?」と聞いてみることに(今更)
そしたら「マイクラがやりたい」とのこと。

え、マイクラってRaspbianに入るのかな....

イクラ入ってた!!

そわそわしてググってみたら、なんと
Pi Edition | MinecraftがRaspbianで動作する、ってかデフォルトで入ってるというではありませんか!

起動

というわけで早速起動します。このあたりで長男に加え次男も混じり大歓喜

父はコマンドでチートを教えてみる

Pi Editionのマイクラは、教育目的で作られているようでPythonコードで色々動かせるとのこと。
というわけで素手でやったら数時間かかるであろう処理(100立法のブロック積んでみる、とか)をコマンド書いて実行してみました。

父、長男、次男「おおおおおおおおおお!!!!」
歓喜です、本当にありがとうございます。その他、歩いたところに花を植えるなどして楽しみました。

子どもたちもやってみる

コードをちょろっと教えてみたところ、早速カンバンの塔を作成していました。好奇心すごいなぁ。

f:id:swimming_pooh:20181210155329p:plain

さいごに

というわけで我が家で長男が初めてコンピューターと戯れた日のエピソードでした。
これをいい機会にしてコンピューターに興味持ってくれるといいなぁ。

最後に、このエントリーは子育てエンジニア Advent Calendar 2018 - Adventarの10日目の記事でした。
前日のエントリーはすくすく!子育てエンジニアMeetUpが自分を救ってくれた話 – 株式会社GEEKクリエイターズブログで、明日はirotoris - Adventarさんのターンです。よろしくお願いします。