非エンジニアが知っておいてほしいーなーと思ったことを書きました。
バグ
ソフトウェアに必ず存在するもの。ソフトウェアが複雑であればあるほどその存在確率は高くなる。そして、もっとも起きて欲しくない時に発見される。なので、エンジニアは常にバグに対応する余力が必要なのだ。
ソフトウェアライフサイクル
ソフトウェアには始まりがあり、終わりがある。死なないソフトウェアはないのだ。変更しないソフトウェアは死なないんじゃないかって?あなたのソフトウェアが変化しなくともあんたのソフトウェアで使われている OS やライブラリ、そしてユーザーまでもが変化していくのだ。今の若者は黒電話を知らないだろう?ソフトウェアが延命するためには常にエンジニアの介護が必要なのだ。
技術負債
世の中の変化はソフトウェアを変化させるよりもずっと早い。COVID-19 がまさに良い例だ。1ヶ月の短い間に世界中に広がり、人々のライフサイクルを変えてしまった。明日なくなるマスクのために我々のソフトウェアはどんな対応できただろうか?
スタートアップは世の中の変化に追いつく程度のアジリティでソフトウェアを開発する必要があり、行き当たりばったりで、余裕のないソフトウェア開発が行われてしまう。そのために少なからず(むしろたくさん)技術負債を抱えることになる。このアジリティが維持できなかったとき、つまり、もし新しい変化をソフトウェアに加えたいときに、想定以上の工数がかかってしまうとき、技術負債を解消するべき時が来たと考えてほしい。
技術選択
エンジニアの技術選択には2パターンがある。未来を見通して技術選択をする場合と、「俺の欲求を満たすためにこの技術を選ぶぜっ!」のふたつだ。前者は真剣に未来を考えた結果で、後者は真剣に言い訳を考えた結果だ。エンジニアは常に真剣なのだ。
銀の弾丸
この世界に完成された方法論なんてないということ。良いプロダクトを作るためには、エンジニアチームの力だけでは足りないのだ。デザイナー、マネージャー、セールス、CS、etc…。良いエンジニアリングとはチームプレイなのだ。それぞれの役職を超えて連携しなければイノベーションなんて起こるわけがないのだ。