mizdra's blog

ぽよぐらみんぐ

遠い未来の話をする理由、それは自信を持って前に進むため

id:mizdra は時々仕事で「今の時点で結論を出す必要はない、遠い未来の話」をすることがあります。1年後に考えれば良いことを、今考える、とかです。それをするのは何故か、という話を今日はします。

長期プロジェクトを段階的に進めていくには、不安が付き物

現在 id:mizdra はレガシーな Web アプリケーションへの Next.js の導入を仕事でやっています。新規実装部分から少しずつ Next.js を導入していて、段階的に Next.js 化を進めています。全部一気に Next.js 化するとなると、「レガシーな技術スタックでやってたアレは Next.js/React でどうやるの?」という問いが絶え間なく発生して全く前に進めなくなります。しかしスコープを小さくすれば、少しずつ問いに答えていって、進行できます。途中で方針転換もしやすいし、最初の機能をリリースするまでの時間も短くなります。プロジェクト全体のリスクを下げるためにも、段階的に進めていくことはとても重要です。

一方で段階的に進める場合、最初から全ての方針が決まりきっている訳ではないので、不安に駆られることがあります。最初のフェーズで先送りにした問題は、結局後で向き合うことになります。スコープを小さくするためには必要なことなので、それ自体は悪くないです。ただ、こうした疑問も抱くと思います。

『先送りにして、ちゃんと後から解決できるのか?』

結局後から解決できないと、全部イチからやり直す必要があるのではないか。今やっている作業が全部無駄になるのではないか。そうした不安に駆られます。その結果、日々の作業や意思決定に迷いが生じたり、手が止まってしまったり、議論が発散して決着が着かなくなってしまいます。不安は、目に見えない形でプロジェクトの進行によくない影響を与えていくことになります。だから「そうした不安を感じることもあるよね」で済ませるのではなく、ケアしていくことが重要です。

見通しを良くすることが大事

この問題をケアするには、いくつかの方法があります。例えば「技術ロードマップを敷く」とかです。Next.js 化で言えば、この順で問題を解決していって、古いページを Next.js 化していけばスムーズに進めるだろう、みたいな長期的な計画を立てます。ロードマップを描くと、課題に取り組むタイミングを皆がイメージできるようになって、安心感が生まれます。

また、まだ結論が出し切れていない細部の設計を紹介することも有効です。「先送りにして、ちゃんと後から解決できる保証は当然ないのだけど、何も考えていない訳ではなくて、多分できますよ、それなりに自信がありますよ。」という意思表明でもあります。たとえ荒削りのものであっても、これがあるのと無いのとでは、安心感が全然違います。

まとめると、先行きに対する見通しを良くすることが大事です。

見通しが良いと、自信を持って前に進める

こうして見通しが良くなると、日々の作業や意思決定に迷いが生じることもなくなり、結論も出しやすくなります。なにより自信を持って長期プロジェクトを進行できるところが大きいと思います。長期に渡ってずっと不安に駆られるのは大変ですからね。

まとめ

  • 長期プロジェクトを段階的に進めていくには、不安が付き物
  • 未来への見通しを良くすると、不安を軽減できる
    • 技術ロードマップを敷く
    • 結論が出し切れていない細部の設計をあえて紹介する
  • 見通しが良ければ、自信を持って前に進める
  • 段階的に進めることと、未来への見通しを良くすることは直交する概念ではない
    • 一気に全部やるわけではないけど、未来も見据える
    • バランスを取ることが大事

おまけ

この記事で書いたことと全く同じ話が、以下の記事でも軽く触れられていて、良いなと思ったので紹介します。Rust の実験的機能「GATs (generic associated types)」という機能があるのですが、その一部をそろそろ安定化させますよ、という内容の記事です。既存の全ての言語機能と一気に結合するのが難しく、段階的に結合と安定化をしようとしていて、それに対してコミュニティから「安定化を後回しにした部分は、後から問題が出て安定化できなくならないか?」「安定化させるなら、全部一気に安定化できるまで待つべきでは?」という疑問が出ていて、それに対するアンサーが書いてあります。

The goal of this blog post is to try to imagine a “shiny future” where we have GATs. It’s to consider a couple of the patterns that people want GATs for, how we might want to integrate GATs into standard library traits, and a few issues that don’t work today that we want to work in the future. We want this so that we have a future to strive for after stabilization. There are known shortcomings with GATs right now, but that’s okay. They’re already powerful and, as you’ll see, we have some thoughts on how to make them more powerful and ergonomic in the future.

DeepL 翻訳:

このブログ記事の目的は、GATがある「輝やかしい未来」を想像してみることです。人々がGATを欲しがっているいくつかのパターン、>GATを標準ライブラリのtraitに統合する方法、そして現在機能していない問題のうち、将来的に機能するようにしたいいくつかの問題について考えることです。これは、安定化した後に目指すべき未来があるようにしたいのです。今、GATには既知の欠点がありますが、それでもいいんです。すでにパワフルですし、ご覧のように、将来的にもっとパワフルで人間工学に基づいたものにするための考えもあります。

「try to imagine a “shiny future” (輝かしい未来を想像してみる)」「We want this so that we have a future to strive (目指すべき未来があるようにしたい)」という言葉がとっても良いと思います。

ポケットモンスター・ポケモン・Pokémon・は任天堂・クリーチャーズ・ゲームフリークの登録商標です.

当ブログは @mizdra 個人により運営されており, 株式会社ポケモン及びその関連会社とは一切関係ありません.