本業で業務システムの受託開発をしながら、プライベートでWebサービスを開発しようとしている人たちに向けて*1。
以前書いた
から、
- 3.時間の使い方を考える
- 4.プレッシャーをかける
について詳しく書いてみようと思う。
難しいところ
私の本業は企業の業務システムの受託開発だ。それで、使うスキルは似たようなものだろう、と個人向けのWebサービス開発を始めたのだけど、やっぱり違う部分も多く、苦労した。いや、苦労している。楽しいけどね。
技術的な部分ではあまり大差はないと思う。どちらかというと、難しいのは自己マネジメントに関わるところだ。私自身は、下記の3点について、特に難しさを感じた。
- モチベーションが低下する
- 何をすればいいのかが固まらない
- 作業時間の確保
1つずつ説明する。
モチベーションが低下する
開発を始めた時はいいのだが、自分のアイデアに疑問を持ったり、作業が遅々として進まないときに、モチベーションが低下しやすい。
モチベーションが低下すると、開発を進めることができなくなるのだけど、個人でやっている場合、それが完全な停滞を招くので、余計に盛り下がる。チームメンバーの目が無いもの、モチベーション低下の一因になるかもしれない。
何をすればいいのかが固まらない
通常、業務システムの場合、お客様の解決したい問題があって、それを明確にするために要件定義などを行う。ある程度の要件がみえてくれば、それを元に作業工数を見積もったり、スケジュールを作成したりできる。
しかし、個人でWebサービスを開発する場合、ここがとても難しい。なぜなら、個人のアイデアを起点に開発がスタートするので、思いつきでぶれてしまうのだ。解決すべき問題が明らかになっていない、という言い方でもいいかな。
少し開発を進めて動かしてみると、「なんか違う・・・」と思うことが、良くある。
さっさとリリースしてみてユーザーに伺いを立ててみる、というのもありなんだけど、一旦リリースするとやめるのも簡単ではないので、ある程度は自分で納得してリリースしたいわけで。何より、自分に対して要件定義していたにも関わらず、自分が使う気になれないってのも、なんだかなぁ、と思う。
作業時間の確保
こっちの問題はシンプルだ。
本業があるので、確保できる時間が少ないうえに、不定期(読めない)。
以上を踏まえた上で、どう自己マネジメントしていけばいいのか、現時点で私が思うことを纏めてみたい。
隙間時間プログラマーの自己マネジメント術
7か条で。
- なぜWebサービスを作りたいのか、はっきりと認識する
- 思いついたことを全て実現しようとは思わない
- タスク管理はDoingリストをベースにする
- No Exception Ruleを適用する
- 短時間集中ルールで手を動かし始める
- 既存の行動に結びつける
- 宣言してプレッシャーをかける
以下、説明。
1. なぜWebサービスを作りたいのか、はっきりと認識する
モチベーションを保つためにも、自分の欲求をはっきりと認識しておきたい。
- なぜ、わざわざ仕事が終わって疲れているのに、貴重な余暇の時間を削ってまで、Webサービスを開発したいのだろうか?
- どんな楽しい未来が欲しいのだろうか?
- やらないことによって、どんな嫌なことがあるんだろうか?
それを認識できたら、しっかりと書き留めておいて、時折見返すといいだろう。
2. 思いついたことを全て実現しようとは思わない
自分で仕様を考えていると、あれもこれも盛り込みたいという欲求が出てくる。
しかし、個人で、しかも隙間時間に開発している以上、絶対的にリソースが足りない。取捨選択して、いまから取り組むべき機能を1つか2つに絞り込もう。
間違っても
で、残った機能については捨て去ってもいいと個人的には考えているが*2、どうしても不安なら、テキストファイルに箇条書き程度に残しておけばいい。
3. タスク管理はDoingリストをベースにする
作業内容がぶれまくるので、最初にこと細かくスケジューリングしても、すぐに陳腐化する。
なので、タスク管理については目先の作業がリストアップされていれば十分だ。
思いつくたびにリストの最後尾にタスクを追加していくDoingリスト形式が、しっくりとくる。ツールはテキストファイルや手書きのメモ帳で十分。どうしても何かのソフトウェアを使いたければ、NowDoThisがいいのではなかろうか。*3
Doingリストについては、以前書いたことがあるので、以下を参照いただきたい。
4. No Exception Ruleを適用する
例外は作らない。といっても、プログラム処理上の例外の話ではなく。
開発を確実に進めるために、1つだけ、毎日実行する行動を定義する。私の場合、
- 1行でもいいので、必ずプログラムを書く
はここ最近、欠かさず実行している習慣だ。本当は、「最低でも30分」とかできるといいのだけど、飲み会があったりセミナーにいった日などは難しいので。
他にも習慣化したい行動がある場合は、あくまでも「改善行動」として定義し、可能であれば実施するという程度で考えておくといい。
5. 短時間集中ルールで手を動かし始める
作業は、手を動かし始めるまでが一番の勝負だ。そこをクリアしやすい心理状態にもっていこう。
いまから、一分間だけ、100%本気で取り組んでみるのだ。スタートさえしてしまえば、元々やりたいことであるだけに、流れにのって継続できることが多い。
6. 既存の行動に結びつける
時間を確保するためのTips。
誰でも毎日、何らかの行動をとっている。通勤したり、ご飯を食べたり、Web見たり。
いつもやっている行動と同時、あるいは前後に開発作業を割り当てられないか検討してみよう。
私の例を挙げてみると、
- 通勤中にノートPCを開いて開発
- 混んでて出来なかった場合は、最寄り駅で降りた後、駅のベンチで10〜15分ほど開発
- 2週間に1回整体に通っていて、終わったあとスターバックスに行くの習慣なので、整体に行くときはノートPCも持っていく
などだ。
「帰ってから〜」とか、「休みになったら〜」とかだと、曖昧すぎて結局何もやらずに終わってしまうことが多い。具体的に、日常生活のどこで作業が出来そうかイメージしてみたい。
Web閲覧に時間をいっぱい使ってるなぁと思うのであれば、50分閲覧したら10分作業しよう、でもいいと思う。
7. 宣言してプレッシャーをかける
ブログでも友人宛でもいいので、
- ○月○日にリリースする!
と宣言してしまおう。プレッシャーが原動力になる。
いじょ!
他にいいアイデアや習慣などがあれば、教えてください!
#てか、あんまりWebサービス開発とか関係ないような気がしてきたが・・・まぁ、気にしない。