起業した新人エンジニアが1年間でやったこと

Qiita Advent Calender2016 「新人エンジニア」12月11日参加です。

自己紹介
株式会社CotoLab.で取締役兼エンジニアをしています山田祐真ともうします。
エンジニア歴は丁度一年（16年12月時点）です。

##対象
大体ここらへんの方に向けて書いています。
・エンジニア未経験で起業したい
・プログラミングスクール通った（ている）が、その後どうするか考え中

##なぜ書こうと思ったのか
###周りにそういう人がいたから
自分の接している人達から感じ取った肌感なのですが、IT業界で起業したい、エンジニアとして自分のサービスを作りたい、という人が結構いたからです。
私自身もその一人で、自分のやりたい分野業界をエンジニアという立場で貢献出来ないか、と考えていました。
ただ、全くスキルもなければ経験もないわけで、そのなかでどのように行動すればいいのかがよくわかりませんでした。
そのため、スキルがないけど起業してエンジニアの立場でソリューションを提供したいという方の為になれば、と思い書いてみようと思いました。

###中長期的な新人エンジニアの記録（特に起業目線）がなかったから
また、長いスパンの経験を記録した記事はあまりないのではないか、と感じたからです。ブログやプログラミングスクールでの体験談は短期的な行動の指針となるかもしれないですが、そこからどうするか、どのようになっていったのかという点は継続して身をもって経験しないとわからない点です。ゼロからプログラミングをはじめて、起業してCTOに就いた人の話などを個人的に聞いた時に自身のモチベーションに繋がった事もあったため、こうした記録は新人エンジニアの励みになるのでは、との考えに至りました。

なので、あの人はこんなことやってたから、自分はこういうことをやれば今の状況を打破できそうだ、とか考え方の枠を広げられるような記事が書ければ、と思っています。

##やったこと
###1.プログラミングスクールに参加する
一番最初はやっぱりちゃんとした所で勉強したいなと思いプログラミングスクールに参加しました。
オンラインで学ぶことの出来るツールやサービスがあることにはあるのですが、やはり断片的な情報であることや、専門的な用語が出てくるといちいち調べるなどして結構時間がかかること、モチベーションが続かなくなることもあり、お金を払って経験のある人にすぐに聞ける環境で学習するべきだと考えました。
過去私が参加したことのあるスクールです

TECH::CAMP
https://tech-camp.in/

スクールではRails(Ruby)を中心に学習していました。
オンラインカリキュラムを進めていくタイプなので、自分のペースで進められる点、またメンターにすぐにアドバイスを貰える体制が整っています。


###2.制作案件を受注する
プログラミングスクールで学んでから1ヶ月後、スクールでの学びを活かし、取り敢えず実際に学んだことを実践に移してみようという段階になり、まずは制作案件から安定した収入を確保しようと考えました。
とはいえ、自分の足で営業してweb制作案件などを受注して制作するという営業サイドと制作サイドを両方やるのはかなり大変です。
そこで、クラウドソーシングという形式で制作案件に応募し、採用されたら制作に移るという形式で受注していきました。
エンジニアのクラウドソーシングサイトは[ランサーズ](http://www.lancers.jp/)や[クラウドワークス](https://crowdworks.jp/dashboard)が有名所ではないでしょうか。

####ただ、スクールで学んだRailsは全く使いませんでした
というのも、
・ Rails案件はまず中規模~大規模なものが多く、最初にやるにはハードルが高かったこと
・ ポートフォリオが無いこと（スクールで作ったものはあるが、応用できない）
・ 要件定義やソフトウェアテスト等スクールでやっていないことも大抵業務の範囲に入っていたこと

から、かなりきついものでした。
そのため、比較的簡単な静的ページのweb制作やCMSを使用したweb制作案件を中心として応募していくことにしました。

とはいえあまり単価の高いものはなく、受注できている案件の平均単価は5~10万程度でした。
因みに制作案件で月50万の収入(確定)を目標としていたのですが、最低月5件以上は案件を獲得する必要がありました。また、応募しても受注率は1パーセント強程度だったため、週最低70件、多いときで週100件程度応募していました。

###3.コミュニティに参加する
コミュニティというと意味合いが広いですが、イベントやアクセラレータプログラムといったコミュニティに参加することで技術的な知見は勿論ビジネスにつながるアイディア、考え方を得られるきっかけにもなるかと思います。
エンジニア系の勉強会、イベントですと以下のようなサイトで見つけられます。

dots.
https://eventdots.jp/
他の勉強会、イベントプラットフォームサイトをまとめているような総合的なサイトという印象です。

connpass
https://connpass.com/

doorkeeper
https://www.doorkeeper.jp/

ATND(アテンド)
https://atnd.org/

###4.プロダクトを作る
やはり自社サービスを出さなければ起業した意味は無いです。
ただその際に迷ったのは「自社でやるか、やらないか」ということでした。

ざっと自社でやる場合、外部でやる場合はこのような利点、課題が有るのではないでしょうか。

####自社でやる場合
#####メリット
・費用がかからない
・コミュニケーションに要する時間がかからない
・ある程度仕様書が曖昧でも設計できる
#####デメリット
・プログラミング技術を新しく身につける為の時間がかかるため、ビジネス的側面が疎かになる。
・受託開発との兼ね合いが大変
・身につけた技術以上のことを行う必要が多く、時間的コストが見積もれない

####外部でやる場合
#####メリット
・納期優先＆費用をもらっているため時間の見積りがはっきりしている
・コードを書く時間を取られないので、他のことに時間を回せる。

#####デメリット
・自社で同程度の技術を持つ人がいない場合、[技術的負債](https://ja.wikipedia.org/wiki/%E6%8A%80%E8%A1%93%E7%9A%84%E8%B2%A0%E5%82%B5)の判断が出来ない
・自社で同程度の技術を持つ人がいない場合、完全に内製化できない
・仕様をはっきりさせる必要がある。

(上記は開発メンバーが2,3人程度の場合を前提としています)
開発手法やどの規模で行うかなどによりますが、このようなメリット・デメリットがあるのではないでしょうか。
起業当初は完全自社で開発を行うスタイルでしたが、後々外部と連携して開発する形態を採りました。
（思い返せばデータベース≒サーバーだと思っていたり、JavaとJavaScriptは親戚みたいなものだと思っていたレベルなので無茶でした。）

というのもこっちはあくまでビジネスをやるためにプロダクトを作るのであり、自分の技術力を上げることが一番の目的ではないからです。
勿論自分で作れない事は何となく悔しいですが、外部のエンジニアのコードを見て自分なりに組み替えたり、そのコードを真似て簡易なシステムを作成してみるなどして自身の技術としてストックする方がより短期間での成長に繋がるのではないかと思います。

##まとめ
記事にしてまとめると順調に進んでいるように映るのですが、正直一人の力では無理でした。案件を取ったり、コミュニティに参加したり、自社でプロダクト開発をするのもたくさんの方が手伝っていただいたおかげです。そうしたたくさんの方々の行動に結びついて、今ある自分自身の行動の結果が伴っているのだと改めて実感しています。