stash を作っていて、途中で開発スタイルが変わった。
最初はインクリメンタルに作るつもりだった。
CLI のコマンド体系を考えて、機能を並べて、一つずつ実装していく。まあ、普通の進め方だと思う。
でも、途中で違和感が出てきた。
機能は増えていく。でも、一番知りたかったことはいつまで経っても分からない。
このツール、本当に使いやすいんだろうか。
例えば検索機能を作る。コマンドを一つ追加する。それ自体はできる。でも、その検索が自然なのか、そのコマンド体系で毎日使いたくなるのかは、実際に使ってみないと分からない。
機能の細かい実装にフォーカスすると、全体の使い心地を試せるのがどんどん遅くなる。
そこで途中から考え方を変えた。
まず動くものを作る。
使う。
違和感があれば、また作る。
そんなことを繰り返していたら、結果としてイテレーティブな開発になっていた。
インクリメンタルとイテレーティブ。
思い返してみると、この二つの間を20年くらい行ったり来たりしている気がする。
インクリメンタルで始めて、途中でイテレーティブに寄っていく。
つまり僕は、反復開発を20年くらい反復している。
実際、stash は何度も姿を変えている。
最初は自分専用の CLI ツールだった。保存先もローカルファイルだった。それが SQLite になり、Neon になり、今は HTTP API を挟む構成になっている。
技術選定の話に見えるかもしれない。
でも、自分の感覚では少し違う。
そもそも、僕は自分が何を作っているのか分かっていなかった。
いや、今も完全には分かっていない。
サービスを作る人としてどうなんだという話ではある。でも、本当にそうだった。
作ってみる。
形にしてみる。
しばらく使ってみる。
そうすると、「ここは違うな」と思う。「こっちの方が自然だな」と思う。
だからまた作り直す。
コードを書き直しているというより、「stash は何なんだろう」を確かめている感覚に近い。
AI コーディングエージェントのおかげで、このやり方はずいぶん取りやすくなった。
少なくとも、初期の作り直しは昔よりずっと気軽だ。
「やっぱり違うな」と思ったら、一度壊して作り直せばいい。
コードを書く時間は短くなった。
その代わり、「何が自然なんだろう」と考える時間は、むしろ長くなった気がする。
結局、自分が何を作りたいのかは、作ってみないと分からない。
だから今日も少し作って、少し使って、「ここは違うな」と思ったらまた作り直している。