私の職場は組み込み製品開発を行っています。
システムアーキテクトって何?っていう人があまりにも多いので、うんざりしています。
ここでは、システムアーキテクトという謎の業務について説明します。
本題の前に、私の体験談
私は学生時代にソフトウェア工学などを学び、基幹システムのソフトウェア開発業務を10年経験した後に、自動車関連の組み込みソフトウェア開発を行う職場に転職し、今に至ります。
組み込みソフトウェアというものがどういうものなのかわからない状態で、組み込み業界飛び込みましたが、当初はカルチャーショックを受けました。
当時は、設計書も存在せず。そもそも設計をしていない?各担当者がコーディングを行って、実行して、うまく動かなければ修正して、うまく動けば製品コードにマージしてという環境でした。テストについてもルールは無く、各担当者にお任せの状態でした。良く製品ができあがるものだと、不思議に思いました。
その職場では、達人気質のエンジニアが数人いて、数人の気合と根性で製品ができあがっていました。そして、達人が退職すると、誰もメンテナンスできない状況になっていました。
中途入社して、いろいろな方に設計書の在り処を訪ねたのですが、どこにもありませんでした。
「組み込みソフトウェア業界ってすげぇな」って思いました。
現在は、設計書がなんとなく存在していますし、テストもなんとなくできる人達が増えてきています。
しかし、どのような設計書が必要なのか、作成するべきなのか、どのようなテストをするべきなのか理解して説明できる担当者は皆無です。
こういった問題点を解決するために、ソフトウェア開発プロセスを整理してルール化する部門がありましたが、今現在は解体されてしまっています。実際、ソフトウェア開発経験の無い人達が集められて、なんとなくプロセス定義して、ルール作っているだけでしたので、解体されるのも無理はないのです。
外部のコンサルタントを入れてテコ入れをしようとした時期もありました。しかし、基礎がわかっていない人達が選んだコンサルタント企業です。目的も意味も理解できず、コンサルタントに言われたプロセスを適用して、頓挫しました。
都度、私も頑張ってサポートしたり、フォローしたりしてきましたが、会社全体に浸透させることを業務の片手間で行うのは無理があります。
私が関わったプロジェクトのメンバーには、設計とは何か、開発プロセスとは何か、テスト手法などを都度説明しながら理解してもらって、プロジェクトをすすめていくことを頑張ってきました。
組み込みソフトウェア業界に入ってから、いくつもの製品開発を行うプロジェクトを行いましたが、一つも失敗していません。
だがしかし、育ったエンジニアのほとんどは、卒業していきました。
毎回プロジェクト立ち上げ時に、プロジェクトのメンバーにソフトウェア開発プロセスの説明して、成長してもらいながら、一緒にプロジェクトを進めるという状態を繰り返してきました。
ルールブック作っても、読んだだけでは理解できるものでは無いというのを実感しています。やはり、基本的なソフトウェア開発の知識を持った状態で、実作業を行うと理解が早いものです。
新規の技術が必要なプロジェクト立ち上げ時には、技術教育等も実施してから作業してもらったりと、いろいろな工夫を繰り返しながら、現在に至ります。
しかし、基本的なソフトウェア開発業務はできるようになってはきたものの、システムアーキテクトという業務については教えようがありませんでした。
システムアーキテクトって必要なの?
システムアーキテクトとは、本当に曖昧なお仕事です。場合によっては、全く必要無いかもしれません。
プロジェクトマネージャーというのは良く耳にする役割と思います。プロジェクトのスケジュールの進捗を管理したり、全体の予算を管理する役割を持った人です。私がいままで携わってきたプロジェクトにも、必ずプロジェクトマネージャーは存在していました。しかし、あたりまえですが、プロジェクトマネージャーは技術的な知識は皆無です。ソフトウェア開発の基礎的な知識も無い方がほとんどでした。私の立場から言えば、プロジェクトマネージャーって必要だったのか疑問に感じます。
私が携わっていない、隣のプロジェクトではプロジェクトマネージャーは存在していますが、システムアーキテクトの役割で動く人は居ませんでしたので、いずれも炎上しています。
システムアーキテクトって何?
IPA 情報処理推進機構では、以下のように定義されています。
詳しくはLINK先を見てください。
IPA 独立行政法人 情報処理推進機構:制度の概要:システムアーキテクト試験
〔組込みシステム・IoTを利用したシステム〕
組込みシステム・IoTを利用したシステムの要件を調査・分析し、機能仕様を決定し、ハードウェアとソフトウェアの要求仕様を取りまとめる業務に従事し、次の役割を主導的に果たすとともに、下位者を指導する。
(1) 組込みシステム・IoTを利用したシステムの企画・開発計画に基づき、対象とするシステムの機能要件、技術的要件、環境条件、品質要件を調査・分析し、機能仕様を決定する。
(2) 機能仕様を実現するハードウェアとソフトウェアへの機能分担を検討して、最適なシステムアーキテクチャを設計し、ハードウェアとソフトウェアの要求仕様を取りまとめる。
(3) 汎用的なモジュールの導入の妥当性や開発されたソフトウェア資産の再利用の可能性について方針を策定する。
これが組み込みシステムにおけるシステムアーキテクトの業務と役割として記載されています。
しかし、残念ながら、これは非常に小さな組み込みシステムでのシステムアーキテクトの定義です。
一つのシステムの開発に、数十名から数百名規模のエンジニアが関連する組み込みシステムにおいては、システムアーキテクトの役割は変わってきます。
情報システムで定義されるシステムアーキテクトの要素も入ってきます。
〔情報システム〕
(1) 情報システム戦略を正しく理解し、業務モデル・情報システム全体体系を検討できる。
(2) 各種業務プロセスについての専門知識とシステムに関する知識を有し、双方を活用して、適切なシステムを提案できる。
(3) 企業のビジネス活動を抽象化(モデル化)して、情報技術を適用できる形に再構成できる。
(4) 業種ごとのベストプラクティスや主要企業の業務プロセスの状況、同一業種の多くのユーザー企業における業務プロセスの状況、業種ごとの専門知識、業界固有の慣行などに関する知見をもつ。
(5) 情報システムのシステム方式、開発手法、ソフトウェアパッケージなどの汎用的なシステムに関する知見をもち、適切な選択と適用ができる。
(6) OS、データベース、ネットワーク、セキュリティなどにかかわる基本的要素技術に関する知見をもち、その技術リスクと影響を勘案し、適切な情報システムを構築し、保守できる。
(7) 情報システムのシステム運用、業務運用、投資効果及び業務効果について、適切な評価基準を設定し、分析・評価できる。
(8) 多数の企業への展開を念頭において、ソフトウェアや、システムサービスの汎用化を検討できる。
これも良くわからない説明だと思います。
大規模から中規模な、多くのエンジニアが関わるソフトウェア製品においては、何を作るのかを要求分析して決めることは非常に重要です。
システムアーキテクトの担当者のみでは、当然できる物量ではありませんので、各プロフェッショナルな担当者と連携して作業していく必要があります。
ソフトウェアとして、何を作らなければいけないかを決めなければ、スケジュールも建てられませんし、予算も想定できません。ソフトウェアの開発スケジュールや予算を立案できるのは、ソフトウェア開発担当者しかできないのです。
そして、開発が始まったあと、進捗状況を確認しながら、遅延が生じた場合や、品質に問題が発生した場合、課題を刈り取ったり、対策を検討することは、ソフトウェア開発の知識が必要不可欠です。もしかしたら、設計をみなおした方が良いのかもしれません。共通のライブラリを別Teamで構築することで遅延を排除できるかもしれません。対策は、状況によって、いろいろな策になってきます。
そういったシステム開発における指揮、管理を行う担当者をシステムアーキテクトと言います。
だから、ソフトウェア開発現場で、ソフトウェア開発における問題の解決が、技術知識の無いプロジェクトマネージャーには不可能なのです。(PMにできるのは現場に喝入れるくらい?嬉しくない。)
システムアーキテクトの役割をまとめているのは、実はこっちの資料!
以下のLINK先に、情報処理推進機構が作成した「システムアーキテクト試験 シラバス」というものがあります。
実は、ここにシステムアーキテクトという担当者が開発フェーズ毎に求められる役割が事細かに記載されています。前述した「システムアーキテクトとは?」っていうところの内容とは違ってきます。それぞれ毎に「要求される知識」というのも記載されています。内容が非常に濃いです。
この資料は、私が現場で体験してきたシステムアーキテクトという役割業務を見事にまとめてあると思います。
https://www.jitec.ipa.go.jp/1_13download/syllabus_sa_ver5_0.pdf
システム開発において、システムアーキテクトの役割がいかに重要かを理解するためには、一番良くまとまっている資料ですので、興味のある方は、一度リンク先の資料に目を通してみてください。
これがシステムアーキテクトの基本です。
しかし、これだけではありません。
システム開発の課題を解決するためには、システム全体で、どのようなソフトウェアが存在し、それぞれがどのような役割をもっているのか把握していなければ、解決できない問題もあります。システムの品質を求める場合に、システム全体の複雑性を極力排除するように統率していく必要もあります。
そういったことができる担当者を多く育てた方が、プロジェクトは上手く廻ります。
結局、私が長年業務の経験から思うには、
システムアーキテクトとは、多くのプロフェッショナルな方をまとめる映画監督やプロデューサーのようなものです。
もしくは、文化祭実行委員長。クラスの企画のとりまとめ役。
そういった経験のある方は、システムアーキテクトの役割が理解できますし、向いています。
ちなみに、私は全部経験してます。