開発現場での起こるうっかりミスは、誰しもが経験しますよね。しかも、ちょっとした手違いが、後々の大きな手戻りやプロジェクトの遅延につながることも少なくありません。経験や知識に対する自負が裏目に出る可能性を考えると、なんだかゾッとしませんか?
実は、経験豊富な「デキる人」ほど意外な落とし穴にはまりやすい…かもしれないんです。
今回は、実力派のエンジニアでもついハマってしまいがちなミスの体験談とNucoが実際にやっている対策をまとめてみました!ぜひ最後までご覧ください。
「デキる人」ほどハマりがちな3つのミス
ここからは、Nucoの現役社員の実体験を交えながら、実力者ほど陥りやすい“あるある”なミスとその背景にある問題点を深掘りしていきます。
①知識の属人化
問題点:ナレッジの共有ができていない
特定の社員しか知らない情報や技術が存在すると、その人が不在の際に業務が滞ったり、他のメンバーが同じような問題に直面しても解決までに時間がかかってしまったりという問題が起こります。頼りになる人はありがたい存在ですが、その人に頼りきりになるのは組織としてあまり良い状態とは言えません。
これが組織全体の効率低下に直結しており、プロジェクト進行を妨げる大きな要因となることを考えればナレッジの共有が非常に重要だということはお分かりいただけるでしょう。
現場の声:社員の体験談
Aさん「特定のドメイン知識が極めて広範囲にわたり、経歴の長い自分に知識が集中したことがあります。仕様を理解するだけでもキャッチアップコストが膨大になったのでドキュメントの整備が検討されたんですが、対象範囲が広すぎて整備の工数を見積もらなければならないほどでした。この経験から、プロジェクトが始動したら将来のためにREADMEなどドキュメントを作成しておくべきという学びを得ました。」
Bさん「仕事が立て込んでいると、テキストやドキュメントに残すことが手間に感じられるんですよね。記録が残っていなかったことでコミュニケーションコストが増大したり、プロジェクトやタスクの調査に必要以上に時間をかけたりしたことがあります。特に喫緊のタスクの場合だと焦りで別のミスが発生したこともありました。テキストやドキュメントに残すことはチームのためでもあり、自分のためでもあることを学びましたね。」
②設計の複雑化
問題点:過度な抽象化で読み手が理解しづらい
「良い設計」を追求するあまり、過度に抽象化してしまうと、後の不必要な苦労に繋がります。ただでさえ複雑な設計に良かれと思ってコメントをつけ過ぎたり、逆にコメントが少な過ぎると、後から他の人が理解しようとする際や実際に開発を行う際に、設計の意図が伝わりにくくなってしまいます。
結果として、変更が困難になったり、意図しないバグを生んだりする原因にもなりかねません。不必要なまでの複雑化は避け、伝わりやすさを意識した設計をすることが重要なんです。
現場の声:社員の体験談
Aさん「シンプルなCRUD機能の実装をしたとき、将来の拡張性を考慮しすぎて複数のデザインパターンを採用してしまったことがあります。ファイル数が膨大になって、新メンバーが処理の流れを追うだけで数日かかるコードが完成してしまいました。このことから何事もバランスが大事だと痛感させられました。」
Iさん「本来ならStep Functionsで直列処理・分岐・リトライをまとめられる構成だったものを、Lambdaに慣れていたチームが複数のLambdaを手動で連携する設計を採用したんです。API GatewayやEventBridgeを駆使したら、結果的にコードとインフラに制御ロジックが分散してしまいました。可視性もなく、エラー時の追跡が困難になってしまったんです。後になって『素直にStep Functionsを使えばよかった』とチーム全体で反省したのは苦い思い出です。」
③技術の偏重
問題点:新しいものなど特定の技術の採用が優先される
目覚ましい技術の進歩に伴い常に新しい技術が登場する現在、現場で先進技術に触れる機会が多い人ほど向上心からそれを使いこなせるようにと努力する場合が多く見られます。しかし、そればかりに固執すると、プロジェクトの目的から乖離してしまう可能性があることに気をつけなければいけません。
結果として、開発したシステムが顧客の要望に応えられず、開発後に大規模な手戻りが発生することもあり得るので、フラットな視点で最適な技術を選択することが求められています。
現場の声:社員の体験談
Aさん「LLMが出始めた当初は、精度も現在と比べると頼りないことに加え、処理にも時間がかかりましたが、『LLMを用いたコンテンツのレコメンド手法を試したい』という意見がでたため採用を検討したんです。 検証と実装をあれこれ試したものの、結局既存の実装であったルールベースでのコンテンツ提示の手法のほうが処理も高速で成績が良かったんです。最新の技術は常に最善の解決策になるわけではないという学びを得ました。」
Iさん「AI推論基盤をAmazon EKSで構築したことがありまして、スケジューリングやAuto Scalingも備えた理想的な構成だったんですが、そこでEKSの起動コストが問題になりました。数ヶ月で「EKSである必要はない」と判断し、GPUサーバーを直接調達することになり、最終的には物理リソースのフル活用と固定コスト化によってコスト削減を実現できました。」
もう繰り返さない!ミスの再発防止策3選
続いて、この章ではNucoで実践されているものを事例に、開発現場で今日から実践できるミス対策を3つご紹介していきます!
①コミュニケーション
良好な関係性の構築
良好なチーム開発には、円滑なコミュニケーションが不可欠です。知識のギャップを埋め、プロジェクト進行の遅れやズレを減らすことが可能です。メンバーが日頃からコミュニケーションを取りあうことで良好な信頼関係を築き、ミスを未然に防ぐことにも繋がるでしょう。
これに限らず、最も効果的だと言えるのは今すぐ着手できるものから始めることです。
適切なドキュメンテーション
大規模な開発では口頭での情報共有だけでは限界があります。適切なドキュメンテーションを行うことで、情報の伝達ミスや認識の齟齬を防ぎ、スムーズなプロジェクトへの参画のためにも役立ちます。また、混乱の原因を除くため、定期的に見直してコードとの整合性を保つことも必要なことです。
プロジェクトの大小を問わず、ドキュメンテーションをするのは面倒に感じられる方も多いと思いますが、思いがけないところで足元を掬われないためにも、READMEなどを使用する際には必要最低限の情報(プロジェクトの目的、セットアップ方法、主要なコマンドなど)の記録を習慣化しておくと安心です。
②情報共有
フラットな組織構成
スキルレベルの異なるメンバー間でも共通の理解レベルを保つことで、コミュニケーションをスムーズにします。経験の浅いメンバーも質問できる環境を作り、組織的にサポートすることで、チーム全体の能力を底上げすることに繋がります。
また、認識をすり合わせておくことで、初期段階の小さな課題を発見しやすくなり、不必要な手戻りを防げるので開発効率が向上します。
過度な複雑化は混乱を招きますが、時には多少難しくてもその方法を採択するしかないという場合もあり得ます。そんな時、なるべく早い段階から情報共有を均質化しておくことで、再説明などのロスタイムを減らすことが可能です。
個人的な成長
さらに言えば、本人しかわからない抽象化などをしやすい傾向にある人が、自身を顧みて気付くきっかけになることもメリットの一つだと言えるでしょう。メンバーが都度質問と応答を繰り返し、ミスにつながりやすい部分を修正することでより良いパフォーマンスを発揮できるようになることが組織の構成員として求められます。
③レビュー体制
俯瞰的な意思決定
上司やベテランなど、第三者による俯瞰的な視点からの確認により、セルフチェックの段階では気づけなかったミスや改善点を発見することができるため、品質を向上させることができます。
例えば、最新技術ならば最適なはず、という決めつけや、自分の得意分野だけでシステムを組みがちな傾向など、個人の思い込みやバイアスによるミスを防ぐことができます。バイアスは誰にでも可能性があり、自覚するのはとても難しいことですが、そんな時役立つのがレビュー体制です。
相互作用的な働きかけ
レビューを通じて、レビューする側もプロジェクトの状況や技術的な知識を共有することができます。あるいは、自分の知識や経験だけに当てはまらない、各メンバーの個人的な考え方や経験に基づいたシステムに触れることでレビューする側のアップデートにも繋がることが期待できます。
また、この体制はレビューのプロセス自体が情報共有の場となるため、結果的に情報伝達にかかる時間を短縮することが可能となります。
「ミスから学ぶ」PDCAサイクル
ミスは誰でも起こし得るものです。重要なのは、そのミスを「ただのミス」で終わらせず、次へと活かせるか、ということです。チーム単位での定期的な振り返りを実施することで、ミスの原因を特定し、再発防止策を検討するのがこのサイクルの要です。
また、個々のミスから得られた教訓をチーム全体で共有し、集合知として蓄積していくことで、組織全体のレベルアップにつながります。
ミスを恐れるのではなく、改善へとつなげる文化を醸成することで、組織全体の課題解決能力が向上し、より強固な組織へと成長します。交流を通じて得られた知見をナレッジベースなどに記録し、いつでもアクセスできるようにすることで、新メンバーの研修などにも役立つでしょう。
また、カジュアルな社内イベントを通じて異なるチームや部署のメンバーとも交流を深めることで、横断的な情報共有が促進され、組織全体の連携がさらに強化されることが期待できます。
今回は開発現場のあるあるミスとその対策について、社員の方々にお聞きしました!
開発現場におけるミスは避けられない部分もありますが、適切な対策と「ミスから学ぶ」文化の醸成で、その発生を最小限に抑え、品質の高いシステムを生み出すことができます。Nucoでは、密なコミュニケーションとチームワークを重視し、各社員が安心して働ける環境作りに取り組んでいます。
Nucoは、成長を続けるエンジニアの皆様からのご応募をお待ちしています!