みなさん、こんにちは。
私は20年以上にわたり、主に営業の立場として様々なソフトウェア開発の現場に身を置いてきました。
この経験を通じて、多くのソフトウェアエンジニアの方々と共に仕事をしてきましたが、一貫して強く感じていることがあります。
それは、「ソフトウェアエンジニアに本当に期待されている役割」について、エンジニア側の認識が狭すぎてギャップがあるのではないか、ということです。
誤解を恐れずに言えば、私は「単に実装だけをするエンジニア」という働き方に対して、疑問を感じています。これは決して、エンジニアの技術力や努力を否定するものではありません。むしろ、エンジニアが持つ素晴らしい技術と知見が、もっと本質的な部分で活かされるべきだと願っているからです。
これまでの開発プロセスと「エンジニア」の役割
私が経験してきた受託開発や自社パッケージ開発の現場では、おおむね以下のような流れで仕事が進みます。
受託開発の場合
- 営業が顧客の課題を聞き、解決策を共に考えます。
- 既存技術で対応可能ならそのまま提案書を作成しますが、新しいシステム化が必要な場合は、まずエンジニアに「実現可能性」を相談します。
- 技術的に実現可能そうであれば、提案書をまとめて顧客に提案し、要望を聞きながら内容をブラッシュアップしていきます。
- 最終的な仕様が固まり、難しい部分があれば機能の見直しなどを経て、最終的な工数見積もりをエンジニアに依頼し、それに基づいて提案書と見積書を作成し、顧客との交渉に入ります。
自社開発の場合
- 基本的にはパッケージ販売が主ですが、顧客からの要望をエンジニアにフィードバックし、ユーザー数増や単価向上に繋がるようであれば、新たな開発を依頼します。
私が感じてきた「ギャップ」
これらのプロセスにおいて、私が長年感じてきたのは、多くのエンジニアが「顧客の課題を、技術でどう解決するか」という最も重要な部分に深く関わっていなかった、ということです。
もちろん、「営業が吸い上げてきた要望に関し、できるかできないかを判断し、納期内に実装する」という役割は、システム開発において非常に重要です。しかし、それだけでは不十分だと感じています。
中には、「要望を聞けば、別の解決策を提案できることもある」と言ってくださるエンジニアの方もいました。
しかし、それは往々にして、ご自身が知っている既存技術の応用範囲を伝えるにとどまり、「本当に顧客が何に困っているのか、その根本的な課題を、ひょっとしたら技術で解決できるかもしれない」という、提案の解像度を上げてくれるような踏み込んだものではなかったのです。
多くのエンジニアは、「答えが出ていること(=仕様が固まっていること)に対して、最適なやり方で実装する」ことを得意とし、そこに情熱を注いでいるように見えます。
レガシーコードの改善、パフォーマンス調整、プログラミング言語の選定など、技術的な最適解を追求することは素晴らしいことです。
しかし、残念ながら、「答えが出ていない課題」に対しては、協力的な姿勢が見られないことがほとんどでした。言ってみれば、「仕様が決まってから話を持ってきてほしい」と言われているようでした。おそらく多くの開発組織で同じような状況が見られるのではないでしょうか。
開発部という組織に所属するエンジニアは、顧客の課題を解決する方法を発見することは、自身の仕事ではないと考えている人たちの集まりのようでした。
「技術力」の定義が変わりゆく時代に
確かに、スタートアップの創業者兼開発者のように、顧客に刺さる解決策が会社の存続に直結するような立場であれば、課題解決に深くコミットするのは当然です。しかし、多くの「サラリーマンエンジニア」は、未だ答えのない課題を技術で解く、という視点を持たないまま、「技術力の向上」「スキルアップ」と称して、世の中ですでに答えが出ている問題の最短での解決ばかりに注力しているように見えます。
しかし、時代は大きく変わろうとしています。
すでに私は、実装の大部分をAIに任せています。単なる実装能力だけを追求するエンジニアの役割は、今後ますますAIに代替されていくでしょう。これは悲しいことではなく、むしろ「実装だけをやりたいエンジニア」との付き合い方が変わるという意味で、私にとっては歓迎すべき変化です。
これからソフトウェアエンジニアに期待したいこと
これからのソフトウェアエンジニアに本当に求められるのは、「顧客自身も気づいていない潜在的な課題を発見し、それを技術の力で解決する」という、より上流工程への参画ではないでしょうか。
それは、単に与えられた仕様を正確に実装するだけでなく、顧客のビジネスや業務を深く理解し、「どうすれば顧客の課題を根本から解決できるのか」を、自らの技術的な知見と発想力で共に考え、具体的な提案にまで落とし込んでいくことです。
いや、ビジネス課題でなくてもよいのです。社会の課題、地域の課題、あるいは人々の生活をより豊かにするための課題など、幅広い視点で「課題」を捉え、それを技術で解決する力が求められています。それは、単なる「実装力」ではなく、「課題発見力」と「課題解決提案力」といった、より本質的な技術力です。
AIが実装を効率化する現代において、人間であるエンジニアにしかできない「課題発見力」と「課題解決提案力」こそが、真に価値ある「技術力」として求められていくと私は信じています。
ぜひ、ソフトウェアエンジニアとしての素晴らしい技術を、もっと大きな視点で、顧客や社会の課題解決のために活かしてください。それが、これからのソフトウェアエンジニアが輝き続ける道だと、私は思うのです。
もしソフトウェアエンジニアで、このブログを読んでくださった方がいれば、ぜひ、ご意見を聞かせていただけると幸いです。
本日も最後までお読みいただき、ありがとうございました。
それでは、よい開発ライフを!