これは何
システム開発に関わる人は以下の流れでシステム開発に慣れていくのがよいのではと思ったのでメモする。
悠長なことを書いていると思われるかもしれないが、ある程度は個々のセンス次第でもある。
※タイトルはAIに考えてもらった
社歴ごとのフェーズ
未経験~2年目くらい
このフェーズでは、ひたすら実装経験を積んでコーディング、単体テストに慣れる。また、わからないところは先輩に聞いたり、自分で検索して解決する力を身につける。
新規開発プロジェクトなのか、保守プロジェクトなのか、はあまり問わない。保守プロジェクトといっても、動いているシステムに対して新規機能を追加したり、既存機能を直すプロジェクトであればよい。ひたすら実装経験を積むことが大事と考える。
3年目~5年目くらい
実装に慣れて、問題の解決もできるようになってくる頃。この段階では一度、実際に動いているシステムの保守運用に関わってシステムがどんなふうに動くのか、とか、システムトラブルが起きた時に先輩がどう動くのか、などを体で覚えるのが大事と考える。
また、動いているシステムに対して機能追加を行うとき、また、機能修正を行うときに気を付けないといけないこと、意識しないといけないことを覚えることで、次のステップに進んだ時に動きやすいのではないかと思う。
気を付けないといけないことはいろいろあると思うが、例えば
- とある機能を直したときに、ほかの機能に影響が出ないかどうか
- ほかの機能に影響が出る場合、どのように根回しが必要か
- 既存の処理の流れに新しい機能を追加するとき、どのような対処が必要か
- 新しく追加したい処理はいつ、どのタイミングで動くのか
- いつまでに対応が必要か、また、リリースするときに何か臨時でやらないといけないことはあるか
- 過去の修正履歴をどのように資料として保管するか
などがあると思う。この辺を意識できているかどうかで新規開発プロジェクトに参画した時にだいぶ違うのでは。
6年目~10年目くらい
このあたりになると設計もバリバリできることを期待されるはず。必要な機能をどのようにして実装、テストしやすい形に設計するか、を考えたり、どのようにして運用に載せるか、というリリース後も想定した設計を学ぶ段階と考える。
この時に、動いているシステムを保守運用したことがあるかどうか、で機能設計時の粒度が変わってきそうだな、と最近ちょっと思っているところがある。 あまり保守を経験したことがないと、一つ一つの機能がとてもでっかくて、長くなってしまって開発もテストも修正も全部が大変になってしまう設計をするような気がしている。
10年目以降
区切りよく10年目以降としているが、ある程度の経験を積んだ人は開発を引っ張っていく立場を求められるようになる。この時、できるだけ自分の持ち作業を減らしていくのが大事だと思う。自分が全部見る、というのは結果的に自分がパンクして精神的につらくなる。
システム開発に必要なものとは
個人的な見解だが、システム開発に必要なのは
- 実装、テストの経験(エラーを自分で解決する経験)
- 動いているシステムを保守運用して、どんなふうに動くのかを自分の目で覚える経験
- ユーザーとの会話から必要な機能を幅広く考える経験
- 設計書をわかりやすく書く能力(文章をだらだらと書かない)
ではなかろうかと思う。
特に、動いているシステムを保守運用して、どんなふうに動くのかを自分の目で覚える経験が希薄な状態で大規模開発に参画してしまうと、この機能はどんなふうに動くのか、とか、データ量はこのくらいか、などひらめくのが難しいように思う。
まとめ
大規模開発に設計担当として参画する(参画させる)人は半年から1年は保守運用の経験を積むべき!