Lean Baseball

No Engineering, No Baseball.

自分プロジェクトを挫折せず続ける技術 - 個人開発をはじめよう!

職業としてエンジニアをやりたい・やってるけど(サーバーサイド→アプリエンジニア, インフラ→機械学習エンジニア的な)ジョブチェンジをしたいという方は結構いらっしゃると思います(かつての私もそんな人達の一人でした*1).

エンジニアをやりたい, 別の領域のエンジニアにジョブチェンジしたいというときに,

  • 仕事終わった後, 週末などに個人学習をする
  • 勉強会やイベントに参加したりコミュニティーのメンバーになって仲間を増やす
  • 一念発起?して自分でWebサイト・サービスやiOS/Androidアプリを作ってリリースする

といった, 「自分プロジェクト」言い換えると「個人開発」をすると思いますが, これって中々続かない事多くないですか?

少なくとも私は上手く行かなかった時期がありましたし, 今は上手く行ってるものの, たまにこの手の相談を受けます.

そんな中, 奇しくも今年の4月に「個人開発をはじめよう!」というこのテーマにピッタリな良い本が出版されました.

一言で言うと個人開発・プロジェクトの事例集で, 私のこのブログの話も事例の一つとして紹介いただいています.

というわけでこのエントリーでは, 「個人開発・自分プロジェクトを挫折せず続ける技術」についてちょっと書きたいと思います.

なお対象読者は,

  • スキルアップや今後のキャリアのために自学自習に励んでいる方
  • 一念発起的に思いついたアイデア・企画を形にしようとしている方
  • これらの活動・思考について携わっていたり支援している方や企業(つまり生業にしている人)

あたりを想定しております.

TL;DR

  • なにはともあれ, Done is better than perfect(完璧よりもさっさと終わらせろ)である.
  • さっさと終わらせるために「完了可能な計画」「時間と状況を作る」「道具と場所に可能な限り投資」すると良き.
  • 自分用の「これってときの勝ちパターン」を用意しておくとなお良いし駄目ならしばらく寝かせて諦めよう.

おしながき

自分プロジェクトで挫折あるある

あくまで私の主観・オピニオンですが, 「スキルアップのための活動・学習(自学自習)上手く行かない」「個人開発で挫折したわー」のパターンは以下の三つに分類されるかなと思っています.

  • アイデアや企画に起因する問題
  • やりたいんだけどさ...時間がないンゴ
  • 途中までやってたんだけど気が乗らなくなって挫折

他にもありそうな気がしますが, この3つについて軽く言及します.

アイデア・企画の問題

まずスタートしたときは気合入ってるので, アイデアをメモしたり人に語ったり, 実現に向けての準備(本を買って読む, 色々とリサーチするなど)で盛り上がると思うんですよ.

で, 実際半日一日手を付けてみて, 「あれ?思ったとおりにならんぞ?」「最初に考えた・調べたときと違う...」などなど, いろんなトラブルでやる気がやりはじめた時の1/334になったりする.*2

なんて経験は誰しもあると思います. 私はそんな理由で企画倒れになったアプリのネタがたくさんあります.

その他にも, 「学習をはじめたものの, ゴールが見えない」「学んだのはいいけど何したいかわからない」なんてこともあると思います.*3

これらは最初のアイデアや企画に何かしらの問題があるパターンと自分は思っています.

時間が無い

就職(転職*4じゃなくて)・結婚・育児・家を持つなどなど, ライフステージそのものが変わる*5不可避なものはしょうがないとして.

  • 仕事が忙しい(おそらく一番多いやつ)
  • 休日に時間を取ろうにも予定が(おそらく二番目に多いやつ)
  • やろうと思ったんだけど友達/同僚と予定が...

(緊急事態宣言が解除されているとは言え)今もStay Homeな風潮が続いて比較的時間は作りやすい状況だとは思いますが, 未だにこの辺って解決していない印象あります.

気が乗らないからの挫折

アイデア・企画の問題にせよ, 時間が無い問題にせよ, これらが解決しないと気が滅入ってそのうち自然に挫折しちゃいます.

これが「自分プロジェクト」「個人開発」が挫折するメカニズムです.

自分プロジェクトを挫折せず続ける3つの技術+2

そんな, 豆腐のように柔らかい・壊れやすい「自分プロジェクト」「個人開発」をいい感じに継続して挫折しないノウハウが私なりにあります.

自学自習を兼ねてプロダクト作ったり発表したりするような生活をかれこれ9年ぐらいしてきた中で上手くいくパターンがあって,

  • ちゃんと終わる, 「完了可能」な計画を立てる
  • 鉄の意志で時間と状況を作る
  • 計画, 時間, 状況に寄与する道具と場所に可能な限り投資する

この3つが上手く回るといい感じになります.

1. 「完了可能な計画」を立てる

私を含めた世界中の3,340万人ぐらいがイキって引用してるであろうこれ.

Done is better than perfect(完璧よりもさっさと終わらせろ)

顔本を作った人が発した有名すぎる名言ですが結局これがすべてで, 「完了可能な計画」の元「さっさと終わらせろ!」が基本かなと.

「Web広告とPythonを完璧に覚えてからDjangoでサイト作ってGoogle AdSenseつけてAWSでローンチだ!」とか, 「Deep Learningを完璧に覚えてからKaggleやってスコア上げて転職だ!」とかとか, 「完璧」ってワードが入った時点で爆死(世にいう地雷ワード)です.

そもそも「完璧」ってなんやねん?的な. 上司に「おう, 完璧にやってから報告しろよ」とか言われたらムカつくじゃないですか*6. それと同じです.*7

個人開発をはじめよう!」の事例全てに共通するのですが, ちゃんと終わることをやってるんですよね, 初手でイケてる技術を使わなくても, 汚いコード・クリーンアーキテクチャとは程遠いコードを書いていてもしっかりバリューを残す的な.

というわけで, 完了するためには雑にやって全然構わないので「終わらせることを見据えた計画と言語化」が必須だと思っています&少なくとも自分は実践しています.

私としてはこの「完了可能な計画」にオススメしてるのが名著「アジャイルサムライ」で紹介されている「インセプションデッキ」で, ちょっとした大きいネタをやるときは必ず書いて見直すようにしています.

上記はPyCon JP 2015のときのものですが, 今も書いてます(最近のやつは色んな事情で公開したくないので割愛*8).

別にインセプションデッキじゃなくても, WBSでもビジネスモデル・キャンバスでもホワイトボードなりメモなりに残すでもなんでも良いのですが,

  • やりたいこと・成し遂げたいことを一言
  • やるために必要なモノ. 技術, 時間, 道具
  • いつまでにやるか?という締切とスケジュール

ぐらいは残すといいと思います.

あと, 何よりも「自分がやりたいこと」をやるのが大事です!

特に個人開発は自分ごとにできる好きで楽しくて意義あること*9ができるといいと思います.

2. 鉄の意志で「時間と状況」を作る

自分プロジェクト・個人開発だけじゃなくて, 「ブログ書きたいんだけど時間が無い」とかアウトプット活動全般で時間の問題に困ってる人に必ず言ってることがあって.

「時間がない」のが問題じゃなくて, 「時間を割くような状況を作っていない」のが問題なのでは?

1日は24時間, というのは全員等しく平等で, 「どの活動に優先度を付けて時間を割いているか?」がホントに解くべきISSUEのはずで.

  • 仕事が忙しくて時間がないといいますが, これって仕事のやり方とか工夫できませんか?
  • 休日に時間が取れないといいますが, 実は不要不急の予定だったりしませんか?
  • 人に誘われている予定, これはホントに大切なことですか?

という問いかけを自分にすると色々気がつく&できることあるんじゃないかなと思いますし, それでも「いや, 仕事(休日)とか人付き合い大事だし」であれば, 「自分プロジェクト」「個人開発」「ブログを書く」みたいなのはさほど大切な活動じゃないのでしばらく寝かせるか辞めるかした方がいいんじゃないと思います(し, 寝かせる・辞める価値観は十分あるのでそれを尊重します).

私の場合は徹底して「時間を確保するための状況作り」をしています.

  • 週末の土曜日か日曜日のどちらかで必ず2時間以上のまとまった時間を作る
  • GW, 夏休み, 年末年始などのまとまった長期休みにまとまった開発・勉強期間を作る
  • 独学と外の勉強会・もくもく会の時間をバランスよく取る. 具体的には「独学(独習) 7:3 外のイベント・勉強会」, ぐらい.

自分のライフスタイルに合わせながら生み出したものなのであくまで一例ですが, 人それぞれパターンあると思うので自分にあったスタイルを見つけるといいかなと思います.

ちなみに私の場合は個人開発・自分プロジェクトの時間・リソース確保がメチャクチャ大事なので, 「不要不急の会社の飲み会・イベント」「漠然と集まるだけな友人知人の飲み会・遊び」は「鉄の意志をもって」丁重にお断りをし, 友達と遊ぶ・自分が息を抜く時間はまとめて取るようにしています.*10

3. 「道具と場所」に可能な限り投資する

「完了可能な計画」「確保した時間」を生かしてやりきるために投資するもの, それは道具と場所です.

道具についてはやることによって色々あるので一概に言えないと思いますが, 私の場合は

  • PCやタブレットなど, ハード系商売道具への投資は妥協しない. 極論で言うとローン組んででも自分に最適な道具を買う*11.
  • ソフトウェア的なモノ, 例えばエンジニアだとeditorとかIDEなんかは使いやすい・手に馴染むものがあったら惜しまずお金を払う.
  • 職場だけでなく, モバイル系の道具(ノマド用), 自宅の環境にもしっかり投資する.

自宅環境のこだわり話はnoteに書いたのでそちらを見てもらえると嬉しいです.

note.com

様々な事情で自宅に環境確保できない...いや, 確保できたとしても外でノマドしたりとかを挟む&それに必要な道具を揃える(例えばインターネット*12)とベストです.

私は自宅に環境はありますが, 性格とライフスタイル上一日外を出ないというのが耐えられないのでカフェで作業するノマド・スタイルを重要視しています.

f:id:shinyorke:20200606210111j:plain
場所を外に求めるのも大事

モバイルでいい感じに作業できる状態を作ると, 「帰り道に一杯やりながら」とか「旅行・出張先で集中して」みたいなこともイケるのでオススメです.

先ほどの時間・状況の件で「長い休みでやる」みたいな事をやる時にも繋がってるくるので.*13

【可能であれば】勝ちパターンを作る

この先はおまけです.

挫折しないためにはサクサクと進むと気持ちいいですよね. というよりサクサク進まないから挫折するとも言えます.

これに対する処方箋ですが,

得意なやり方, すぐ始められる・作れるモノを使って自走できる「勝ちパターン」を持ってしまえ!

とオススメします.

  • 仕事なり趣味なりで元々得意な方法・すぐやれるやり方でやる癖をつける
  • 既存のFrameworkとかでもいいし, 自分が過去にやったモノのコピーでもいい
  • ポイントは「これからやりたい・学ぶ好き・憧れなモノ*14」じゃなくて「考えなくても手が動くぐらいに馴染んだ得意なもの」を使う*15

自分の場合は「迷ったらPython」というぐらいPythonが手に馴染んでいるので,

  • データサイエンスで何かやるときのパターンはすでにある
  • Webも同様で, サクッとやるならFastAPIとかFlask, チーム作業とかちゃんとやるならDjango

ぐらいのルールでやってます.

いずれも着手してから半日〜1日で「とりあえず動いた!」ぐらいはできるようにしています.*16

ちなみにFastAPIについては自分が作ったモノの中で公開していいやつを勝ちパターン的に公開しています.*17

github.com

Pythonほどほどに使えて特に勝ちパターン無いよーって人はぜひ持っていってください(MIT Licenceの範疇で自由にご利用ください).

【最終兵器】諦めて寝かせる

ここまで読んで・考えても「うーん...」という場合は,

潔く諦めて別のことをしましょう, またやる気が出たら再開しましょう!

「なんでできないんやー」「思い通りに行かないな...」ってときはやめちゃっていいと思いますし, 辞めることは別に恥じゃないですと.

個人開発をはじめよう!」で私のブログで取り上げられたのはこちらの「野球地図をPythonで作ろう」という話なのですが.

shinyorke.hatenablog.com

これ, 始めたときは面白いと思ったのですがなんかの理由*18で続きを諦めているんです笑

で, 昨年PyCon mini Hiroshima 2019というイベントに参加・トークに申し込もうと思ったときに「地図やりたい」と思い立ち, なんやかんやで復活しました.

shinyorke.hatenablog.com

上記ブログにも書きましたが, 4年越しの復活です. 自分でもびっくりしました.

何がいいたいかって言うと,

アイデアややることが先行しすぎて時期尚早なんてことはザラにあるので飽きたら寝かせていいんだぜ!

そういうことです.*19

個人開発をはじめよう!

なにはともあれ「個人開発をはじめよう!」じゃありませんか.

このエントリーで書いた「自分プロジェクトを挫折しない技術」は, すべて自分の実体験に基づいていますが, この本のエピソードを読んで上手く言語化できた気がします.

また, この本読めば読むほど面白くて,

  • 企画立案からMVPつくってフィードバックもらってサービスを伸ばした実践例だったり
  • 何かしらの形でマネタイズするときに良かった・困った話とか
  • 物事をやり抜くための意思決定とか技術選定とかチームメンバーの選び方などなど

といった, 「個人開発だけとは言い切れない, まるで新規事業の事例集のような装い」 があり最高です.*20

これらの先人の知恵が一冊で読めるの相当美味しいと思います, Stay Homeのお供として, これからのキャリアに思い馳せながら個人開発をはじめる人が増えると嬉しいです.*21

*1:キャリアの最初は銀行の基幹系システムを構築する巨大プロジェクトの下っ端でしたし, そこから業務システム系の事をしてWebのエンジニアになってフロントだのインフラだの機械学習だのetc...言うたら今も現在進行形でカメレオンのように変わっています.

*2:なんでや阪神関係ないやろ

*3:これはプログラミングを学んでるとかそういうフェーズの人に多いかも. 実務にせよ学業にせよゴール決まっていて上手くいくパターンもあれば学ぶことそのものが目標になってその後を考えてなかったりetc...

*4:転職コストとか意味・意義が変わった今だと, 普通の転職ぐらいじゃライフステージと呼ばない気がします. 「エンジニアしてましたが一念発起して焼き鳥屋になります(またはその逆)」ぐらいのノリであればライフステージに関わるとは思いますが.

*5:自分プロジェクト・個人開発関係なくライフステージ起因のものは無理しない方がいいと思っています, それこそ一生に関わるモノなので.

*6:今の会社ではもちろんそんな事無いのですが, かつていたどっかのチームではまあまああったので実話です.

*7:ちょっと後に載せてるインセプションデッキみたいなモノで「これができたら完了です!」な宣言をやりきったらある種完璧と言えなくも無いですが, そもそもそんな言語化の意味と意義を理解している人は完璧なんて言わないんです.

*8:やっていく内にやることのレベルが上がってPublicにできない話が増えたんですよね... 今回のエントリーと関係ないですがもう少しPublicにできる事例を増やそうかなと最近目論んでいます(後述するFastAPIの話とかがまさにそれ)

*9:趣味でも金儲けでもモテるためでも何でもいいです, 要は寝食忘れて打ち込んでもいいかな的なモチベーションがあれば最高です.

*10:良くも悪くも「独身一人暮らし」というライフステージで時間のコントロールが比較的しやすいが故に, 余計なところで時間が溶けないように工夫しています. また, 仕事の生産性だったり時間の使い方は言うまでもなくしっかりタイムマネジメントしています.

*11:私は大人なので上限ナシでやっちゃいますが, 別に中古とか整備済み用品とかでも最適なのがあればそれでいいと思います.

*12:モバイルルーターやテザリングもいいですが, 地味にキャリアのWifiとかはお店に合ったりするので便利です(セキュリティ問題を解決できれば). ちなみに私はキャリアのWi-Fiとテザリングをよく使います.

*13:長い休みの旅行・帰省先でやるのは気分転換になって結構オススメ

*14:「普段JavaとかPHPしてるので最近やってるPython/Golangで!」みたいなやつです. 普段使ってないものは学習コストがかかりますよと.

*15:ここが結構落とし穴で, 「好きなもの」と「これから学ぶもの」が混同するケースがあり, 「好きで始めたらハマって結果何もできない」的な辛さを味わうこともあります. 「得意かつ好き」が最も理想ですが分かれる場合は迷わず得意な方をとりましょう!

*16:最初はとにかく雑でも書いて動かして, 目的を達成・いい感じになったら丸っと綺麗に書き直す(いわゆるリファクタリング)をしています. ちなみにテストは書いたり書かなかったりです(コケたら困る部分だけテスト書いてる).

*17:これは別途エントリー書きます, なぜ作って公開したかを含めて.

*18:PyCon JP 2015の発表の時には引用すらしてなかったので完全に気が変わったものと思われます, マジでうろ覚えですが. 最も, データセットとかやりかたは流用しているので無駄ではなかったです.

*19:余談ですが, 私はRADIOHEADというバンドが好きで彼らの新曲はたまに10年以上前のデモテープから生まれる事があり, インタビューとか見ると自分と同じようなことを言ってました.

*20:事例で上がってる人すべてが本業だけじゃない部分で結果・成果が出ているというのもあるかもしれません. かくいう私も本業以外にこのブログや技術顧問などなどでいろんな成果出してますし

*21:選者・著者のyuzuta0さんのブログもぜひご一読を!記事編集・レビューなど良かったです&色々と迷惑かけてかたじけなかった:pray: