<blockquote><p><a href="http://twitter.com/milkcocoa/status/22081081899">Twitter / Shu MASUDA: 改めて読む。 http://d.hatena.ne. ...</a></p>
<p>改めて読む。 <a href="http://d.hatena.ne.jp/kaz_ataka/touch/20081018/1224287687">http://d.hatena.ne.jp/kaz_ataka/touch/20081018/1224287687</a></p>
<p>約7時間前 Twitter for iPhoneから</p></blockquote>
<p><a href="http://twitter.com/milkcocoa">@milkcocoa</a>さんのTweetで改めて僕も読んだ。以前ホッテントリに入ってたので読んだけど、僕がアホなので文章が難しく、自分なりの言葉に直して理解してみたいなと考えてたのを思い出した。</p>
<p><a href="http://github.com/komagata/pyha">今作っているブログ・CMS</a>を具体例にして簡単な言葉でソフトウェアの開発についての方法論として解釈してみました。</p>
<h3>解決する問題の設定</h3>
<p>まずどんな問題を解決するソフトウェアなのか一言で表す。自分が作るソフトウェアだと近視眼的になり易いが、例えばMOONGIFTや百式で自分のソフトやサービスが紹介されるとしたらこういうタイトルが付くだろうなという視点から考えると客観的に付け易い。</p>
<h4>今作ってる<a href="http://github.com/komagata/pyha">Pyha</a>で言えば…</h4>
<p>「Heroku/GAEでも動くRuby製ブログツール」</p>
<h3>仮説を立てる</h3>
<p>何故そのソフトウェアは上記の問題を解決できるのか。その根拠となる仮説を立てて表明する。仮説なので自明でないことを言い切ってしまうことが大切。破綻したらプロジェクトの存在意義が無いぐらいの重要な仮説にする。実際に破綻したらプロジェクトを辞めるか、大きく方向転換する必要がある。</p>
<h4><a href="http://github.com/komagata/pyha">Pyha</a>で言えば…</h4>
<ol>
<li>クラウドサービスはより普及する。</li>
<li>WordPressはクラウド対応(各種DB対応)しない。</li>
<li>WordPressユーザーは格安レンタルサーバーよりも無料のクラウド(Heroku、GAE等)を好む。</li>
<li>RubyのWebアプリケーションはユーザーに受け入れられる。</li>
<li>CMSより、CMS機能があるブログツールの方がWebデザイナにとって分り易いので受け入れられる。</li>
</ol>
<h3>技術的課題を設定する</h3>
<p>そのソフトウェアを作るのにキーとなる技術的課題を設定する。重要なものから順番にプロトタイプを作って検証する。これは殆どの開発者が頭の中でまず考えることだと思う。これよりも「解決する問題の設定」と「仮説を立てる」を優先するところが僕らがいつもやってることと違うところだと思う。</p>
<h4><a href="http://github.com/komagata/pyha">Pyha</a>で言えば…</h4>
<ol>
<li>今回採用するORM(DataMapper)は設定ファイルの修正レベルの差異だけでSQLite3、MySQL、PostgreSQL、BigTable、MongoDBに対応できるか?</li>
<li>ファイル書き込みが出来ないクラウド環境でファイルアップロード機能は実現できるか?(外部サービスとの連携が実用レベルに達するか?)</li>
</ol>
<p>(メッセージドリブンに対応する項目はまだ上手く理解できてないので保留)</p>