[フリーランス][エンジニア] “難しい仕事で煮詰って無駄にする時間” の8割をなくす方法

どうも、末岐碧衣です。
難しい仕事を振られたけど助けてくれる人もいない。
ひとりで頑張って煮詰まって丸一日棒に振ってしまった、なんてこと、ありませんか。
難しい仕事、やったことのない仕事を効率化する方法について、私なりに工夫していることをご紹介したいと思います。エンジニアじゃない人でも読んで参考にしてもらえるように、技術的な話にはあまりふれません。
難しい仕事で煮詰らないための効率化方法① 達成したいことを、文面で明示する
いきなり調べ始めると、調べているうちにクライアントの要望からズレている、ということがあります。せっかく苦労して作ったのに、「いやー、やりたいのはこういうことじゃないんだなぁ、このままだとちょっと使えないなぁ」と言われてしまった時の、あの絶望感。何度世界をぶっ壊しても収まらない向け先がわからない怒りの炎に身体を蝕まれることになります。後に火の7日間と呼ばれるその戦争は世界を更地に変えたそうで。
…こんな調子なので、やはり頭の中だけで考えているとどうもズレちゃってダメなのです。みなさんはどうか知らないけど私はてんでダメなのです。
よくあるのが、「クライアントは何をどうしたいのか」ではなく「これを動かすためには何をどうすればいいのか」と、目的と手段がすり替わってしまう現象です。丸一日ひとりで作業していると、結構起こりがち。
対策として私がどうしているかと言うと、最初に、クライアントに文面で「達成したいことは、〜を〜にする、という認識で合っていますか」と確認するようにしています。ここですでに誤解があることもたまにあるので、口頭で丸投げされた時などは特に気をつけたほうがいいですね。
この一文があるおかげで、調べているうちに自分も迷子になる、ということを防げます。
難しい仕事で煮詰らないための効率化方法② 先に調べ尽くして、段取りを決める
早く終わらせたいと願いすぎていたり、時間がなくて焦っていたりすると、「とにかく動かす」「調べながら作る」ってやってしまいがちなのですが、マジで効率が悪いのでやめたほうが良いです。
最初に、どんな実現方法があるのか、きちんと時間をとって調査するのです。
ひとつ、「これで行けそうだ!」というのが見つかっても、一度立ち止まります。で、「他に方法はないのかな?」と調べてみます。実際に手を動かすのは、少なくとも3つ候補を出してから、というのが私のやり方。
3つの方法がわかったら、それぞれについて具体的な進め方を箇条書きでいいので書き出します。制約事項なども、このタイミングで調べておきます。
ここまで調べると、一番最初に見つけた方法よりも、2番目、3番目に思いついた方法の方がより簡単にできそうだとわかったりします。もちろん、最初に思いついた方法がやっぱりいちばん、ということもありますが、それでも他の可能性を先に探るのはやっておいたほうが良いです。
なぜなら、1つ目の方法で進めてみて、実際に上手く行かないとわかった時も、じゃあプラン2で行ってみよう、とすぐに次の行動に移れるから。他のプランがないと、「えー、せっかくここまでやったのに……もうちょっと調べればなんとかなるかも!」とダラダラ追加で時間をつぎ込んでしまい、結局丸一日棒に振って、クライアントにも悲しいお知らせをしないといけなくなったりします。
「とりあえず、〜でできそうなのでやってみましたが、ダメでした。すみません。明日、別の方法を考えます」
これ、受け取ったクライアントはがっくり来るだろうなぁ、って思いながら、疲れ切った状態で送信ボタンを押すのは、もうやめにしましょう。
複数のプランを最初に持っておくと、クライアントへの経過報告がカッコイイ感じになります。
「達成したいことは〜、そのための実現方法は以下3つが考えられます。本日は一つ目の方法を試して〜(中略)。ひとまずこのまま進めてみますが、難しそうであればプラン2、3で試そうと思います」
報告をもらったクライアントも「ダメでも他の方法があるのね」と安心しますし、他の方法も考えているということで、説得力もマシマシになるのです。
おすすめ。
難しい仕事で煮詰らないための効率化方法③ 煮詰まる前に休憩する
エンジニアの方とか、トライ&エラーを繰り返し、英語サイトを巡回していると、気付いたら3時間経ってたとか結構ありませんか。
3時間も経っているとすると、自覚はなくても相当煮詰まっています。うどんだったら100%焦げ付いてますよ。まぁうどんじゃないですけど。
ともかく、仕事していると夢中になりすぎて時間を忘れてしまう人はとくに気をつけたほうが良いと思います。
思考が凝り固まって、柔軟にものを考えられなくなっている可能性があります。
あんまり頭を使わない作業なら私もこんなことしないのですが、難しい仕事をする時はかならずタイマーをセットするようにしています。時間は自分の好みで良いと思いますが、私は1時間としています。
1時間してタイマーが鳴ったら、リビングに行ってあたたかい飲み物を飲みながら窓の外をぼんやり眺めたり、ストレッチしたり、瞑想したりして頭を空にします。10分くらい経って休憩に飽きてきたら仕事部屋に戻って、タイマーを1時間にセットして作業を再開。
これを繰り返すのです。
休憩中、頭を空にするようつとめるのですが、ふと「あ、あそこ直せば動くかも!」とひらめいたりします。また、休憩後に作業再開したタイミングで、「よくよく考えたら先に〜をやった方が時短になるな」みたいな気付きがあったりします。
要するに、煮詰まってくると、あんまり頭使ってない時間がどんどん増えていくんですよね。手は動いてるけどあんまり考えてない時間、っていうんでしょうか。うーん、表現が難しいけど。
以前は、ノッてる時に一気にやっちゃったほうが効率良いっしょー!!!イケイケドンドンだ!!
って感じだったのですが、1日の作業を振り返ってみると、どうも途中から無駄なことをしていたり、頭使ってない時間が結構あることが判明したので、難しい仕事をするときは、現在のタイマー方式を採用することにしました。
煮詰まっている無駄な時間が減って、ストレスも減りました。おすすめ。
リモートワークエンジニアの苦悩(ただの愚痴なので読み飛ばし可)
クライアントによりますが、要望だけ伝えられて、形にする所は設計から開発までお任せで! ってことも結構あります。そういう時、リモートワークでエンジニアやコンサルをやっていると、使ったことのない技術を応用する仕事もたくさんあったりします。
むしろ、「あ、前に作ったやつをほぼそのまま使いまわせそうやな」ということがめったにありません。他の人はどうか知らないですが、私はあまり楽できたことがないです。。似たような仕事でも、フレームワーク、インフラ、プログラミング言語、関連サービス、アルゴリズム、それぞれのバージョンなど、どれか一つ違うだけで、また一から設計し直さないといけないですからね。なので、
この構成で動くかな……
あ、こんな新しい技術が出てきてるんだ。これ使ったほうが良いかも……
など試行錯誤しながら、自分で作ってみてテストして動作確認しないといけません。
これが、まぁー、時間がかかること!
「動かしてみる」だけでも、すんなり行かないことのほうが多く、しかも新しい技術だとネットに情報があまり出ていません。私も、普段仕事でググって当たるのはほぼ英語サイトです。
やってみて、上手く行かない箇所を調べて、修正して、うーん、やっぱりダメだ使えない!ってなるとそれまでの時間がまるまる無駄になります。
動いた場合でも、本番データでテストしたらエラーになる、データの件数を増やしたら動かない、、、というのはザラで、その度にまたゲロ吐きそうになりながら英語サイトを巡回して修正して、、、
そんなことを延々繰り返してきたウン年間でした。
この作業、なんとか効率化したいと思いまして。いまは前述した3つの方法で、無駄な時間を8割くらい減らせています。難しい仕事もサクサクこなすには、やはり最初の段取りが超重要ですね。
まとめ
- 難しい仕事で煮詰らないために、まずは達成したいことを文面で明示する
- 難しい仕事で煮詰らないために、考えながら作業しない。先に調べ尽くす
- 難しい仕事で煮詰らないために、煮詰まる前に休憩する
それでは!