最近、実装中にライブラリの内部実装はどうなっているのか、プロトコルの下の層はどう動いているのか、そもそも電磁波って何...のような細かいことを考えすぎて全く実装が進んでいない時間がありました。
思考が深く潜っていた
PJ内では小さめな改修だとガチガチな設計はせずに手を動かしていくので、既存コードを読みながらそもそもこの設計は本当に最適なのか、他の実現手段について調べたり考えたりしてしまっていました。
実装のタスクは進んでいないけど、既存の構成の理解も進んだし、新しいことも学んだからいいか!と思っていましたが、チームメンバーから「⚪︎⚪︎の構成変えていいですか?」と質問を受けて「リファクタリングや構成を変えるのは別タスクに切り出そう」とアドバイスした自分を見て”あ、いつも自分がやってることだ。”と気づきました。
ものづくりには二重人格が必要
設計が大事なのは前提として、それでも、実装する際にトランジスタのことは考えるべきではありません。
そんなときに「ものづくりには二重人格が必要」みたいな言葉があったな〜と思い出して色々検索してみるとKent Beckの'Make it work, make it right, make it fast.'という言葉が引っかかりました。
これは単なる開発手順の話ではなく、「フェーズを分けろ」というメッセージなんだと改めて思いました。
今の自分は、まだ動いてもいないコードに対して「正しいか」「美しいか」「将来困らないか」「後続のエンジニアにダサいと思われたくないな~」を同時に問い続けてその機能の1から10まで理解しようとしていました。
この言葉を思い出した瞬間、やるべきことが一気に単純になって集中できるようになりました。
気づいたこと
細かい設計の迷いや、システム全体のことは一旦脇に置いて、とにかく形にすることに集中しました。結果として、最初に頭の中でこねくり回していたよりも、短時間で形になって、無駄なマルチタスクの疲れも軽減されたと感じました。
細かいことを考えすぎて止まってしまったときは、今はどのフェーズなのかを考えて、またこの言葉に戻ろうと思いました。物事をモジュール化して分けて捉える、という話とも繋がっている気がします。
学んだこと
この格言は、エンジニア目線だけでなく、ビジネス目線でも良い作用をもたらします。
まず動くものを素早く作り、フィードバックを受けて改善していく。これはアジャイル開発の考え方そのものです。
最初から完璧な設計や最適解を目指すよりも、まず形にして現実と向き合う方が、結果として遠回りになりません。
ものづくり全体のスピード感を早められる姿勢なのだと思いました。