「フリーランスエンジニアになったはいいけど、これからどんなスキルをどうやって伸ばしていけば良いのだろう?」
こんな悩みはないだろうか。
筆者もフリーランスとして活動し始めた時は、周りに頼れる先輩がおらず、成長の実感も薄くなっていたため同じように悩んだことがあった。
そのため、この記事は当時の筆者と同じ境遇にいるフリーランスエンジニアの方の参考になればと思って書いている。どういうスキルが必要で、そのためにはどうやってそれを身につけていけば良いのかを解説していく。
それでは詳しく見ていこう。
フリーランスエンジニアとして必須のスキル5つ
まずフリーランスエンジニアとして必須のスキルを5つ紹介する。それが以下の5つだ。
コーディング力
まず一番わかりやすいのがコーディング力だ。
コーディングでは、事前に決められた要件や設計に基づいて、それを具体的なコードに落としていく。エンジニアとしては当たり前のスキルだ。
もちろん案件ごとに難易度の差はある。しかし、やることが決まっているという点において、一番具体的な作業に近い領域だ。
例えば、「こんなUIの機能を持つアプリを作りたい。」という要望をコードで実現していくイメージだ。
設計力
設計力は実現したい機能がある時にどうやって作るべきかを考えるスキルだ。
設計力に関しても案件ごとに難易度の差はある。例えば、コードレベルの設計もあれば、データベースの設計やプロジェクト全体のアーキテクチャの設計などもある。
しかし、どう作るべきかを意思決定するという点において、コーディング力よりは一段階レベルの高い技術力が求められると言える。
例えば、以下のような与件を与えられたとする。
・想定ユーザー
・想定ユーザーが抱える課題
・これから開発する機能を使うことで、ユーザーが得られるメリット
・想定される使い方
・想定利用者数
この時に以下のようなアウトプットを出すのがこの作業の要点だ。
・画面設計
・データ構造
・処理のシーケンス
ビジネス理解力
ビジネス理解力はそもそも何を作るべきなのかを考えるスキルだ。要件定義力といっても良い。
ビジネス的な実現したい内容をもとに、何を作るべきで何はいらないのかについて考える。
例えばインフルエンサーのプロフィールを一覧で見れるサービスがあったとする。そして、想定する閲覧者は企業の企画担当者だったとしよう。
ここで検索機能をつけたいと言われた時に、次のように考えてアウトプットを出す。
コミュニケーション力
コミュニケーション力は要件定義をする人にだけ必要だと思われがちだ。しかし、実際はそうではないと考えている。
これは全てのエンジニアに必要なスキルだ。
コーディングをメインにやる人は、チームメンバーやリーダーと連携して相談しながら進める必要がある。そのためには、自分の状況をきちんと伝わりやすい形で要約して相手に伝える必要があるからだ。
例えば、進捗をわかりやすく報告したり、詰まっている所を質問する際に状況と試したことを簡潔に伝えるスキルが必要になる。
また、設計をメインでやる人は、要件と自分自身の認識に齟齬がないか、要件に隠れた前提がないかなどを要件定義をした人に確認しながら進める必要がある。
さらに、要件定義をメインでする人は、ビジネス側の人と作りたい世界観の認識を合わせるために議論をする必要がある。
例えば、検索機能を作りたいと言われた時に、そのまま作るのではダメである。そうではなく、具体的にどういうユーザーがいて、その人はどういう時にその機能を使いたいのかなどの認識を合わせていく必要がある。
プロジェクトマネジメント力
プロジェクトマネジメント力は、プロジェクトを成功に導くためにありとあらゆることをやるスキルと気持ちだ。
プロジェクトの成功のためには、多様なタスクを実施していく必要がある。例えば、タスクの優先順位をつけたり、タスクを最適なメンバーにアサインしたり、メンバーのタスクの進捗管理をしたり、メンバー間で溢れてしまうタスクを拾ったりする。また、進捗が遅れて来れば期限の延長かスコープの縮小をクライアントと協議する必要がある。
営業力は必要か?
営業力は多くの人が必要だと思っているが、実際は必要ないと考える。
確かに、フリーランスになると仕事を自分で獲得する必要がある。そのため、一見すると営業力が必要かのように感じる。しかし、新規をどんどん開拓していく必要はないだろう。
それよりは、今ある一つ一つの仕事を丁寧に仕上げて、今いるクライアントの満足度をあげることに集中するのが一番大切だと考えている。それが長期的には次の仕事を呼び込むし、自分のスキルも上がっていくからだ。
そのため、想像しがちな営業力というものは不要だと私は考えている。むしろ本当に必要なのは仕事に対する丁寧さと質の高さだと言える。つまり、一つ一つの案件で全力を注ぎ、クライアントの予想を超えたアウトプットを出し続けるということだ。
駆け出しエンジニアのスキルアップの方法2つ
ここでは駆け出しエンジニアのスキルアップの方法を2つ紹介する。それが以下の2つの方法である。とにかく実践的な知識と体系化された知識を獲得するサイクルをぐるぐる回すのが重要だ。
ここでいう駆け出しエンジニアとは、具体的にはコーディングをメインでやっているようなエンジニア経験2〜3年目の方を想定している。
実践経験を積む(案件を掛け持ちする)
まずはなんといっても実践経験を積んでいくことが重要だ。
その際には、自分でコーディングする機会を持つのも良いが、やはり仕事としてコーディングする時間を増やすのが重要だ。そのため、案件を複数掛け持ちすることをお勧めする。
筆者も駆け出しの頃は本業とともに副業を複数していた。その結果、ある現場で良いと思ったコーディングのプラクティスを他の現場に持ち込むことでバリューを出すことができたり、単純にコーディングの量が増えたのでアンチパターンやベストプラクティスについて肌感覚として体験することができた。
本を読んでベースの知識を習得する
実践経験を積むだけではなく、本などで体系的な知識を獲得するのも同時にできると良い。
なぜなら、実践で得られる経験はどうしても断片的なものになってしまうからだ。実戦で感じたよくないコードなどをもとに、関連する内容を本で体系的に学ぶことができれば自分自身の成長が加速する。
つまり、実戦によって具体的な悪いコードについて学び、それを本などで体系的に学ぶことによって知識の幅を広げていくというサイクルを回すのが重要なのだ。
ミドルエンジニアのスキルアップの方法2つ
ここではミドルエンジニアのスキルアップの方法を紹介する。それが以下の方法である。とにかくコーディング以外の業務を意図的に増やしていくことが重要だ。
ここでいうミドルエンジニアとは、具体的には設計をメインにこれからやっていきたいと思っている方を想定している。
設計書を書いてレビューしてもらう
設計の仕事を受けようと思ったら、設計のアウトプットをなんでもいいから出していくのがいちばんの近道だろう。
なぜなら、クライアントは何も実績がない人に対して仕事を依頼するのは失敗のリスクがあるので避けがちだからだ。そこを逆手にとって、勝手に設計のアウトプットをどんどん出していけば良い。これによって、実績もできるし、自分自身でも設計のスキルがついていくことが実感できるはずだからだ。
その際は、アウトプットを出すだけではなく、チームのリーダー的な人にレビューまでしてもらうのが良い。そうすることで嫌味のないアピールになり、設計の仕事を任せてもらいやすくなるからだ。
要件定義に挑戦したいエンジニア向けのスキルアップ方法2つ
ここでは要件定義に挑戦したいエンジニアのスキルアップの方法を2つ紹介する。それが以下の2つの方法である。とにかく実践的な知識と体系化された知識を獲得するサイクルをぐるぐる回すのが重要だ。
PM案件にエンジニアとして挑戦する
要件定義はとにかく場数を踏むことが重要だ。そのため、PM案件に挑戦するのが良い。
PM案件であれば、業務として要件定義をやる割合がかなり上がるからだ。さらに、PM案件で要件定義の内容を先方と話す際には、非エンジニアとやり取りをすることになり、コミュニケーション能力とビジネス的な考え方が身につきやすい。
本を読んでベースの知識を習得する
コーディング力を上げたいエンジニア同様に、実践だけではなくそれを補完する意味で体系的な知識を入れるのも重要だ。
要件定義に関する本については以下の記事におすすめを詳しく書いているので参考にしてほしい。
【レベル別】要件定義が学べるおすすめ本4選
まとめ
フリーランスエンジニアのスキルとその上げ方について説明してきた。
この記事が「今後どうやって自分のスキルを上げていけばいいかわからない」と思っていたエンジニアの助けになれば幸いである。