これは何か
- ソフトウェアエンジニア職(マネージャ職は含まない)として雇用されているにも関わらず,様々な理由で業務としてプログラミングができない状況に陥る期間がまれに*1存在する.
- 本エントリでは筆者が考えた対処法を記す.
コードが書けない状況
- 機会がない
- 関わっているプロジェクトが何らかの要因により停滞しておりコードを書く必要のあるタスクが発生しない.リファクタリングやライブラリのバージョンアップ等をして時間を潰していたが大体やり尽くしてしまった
- 時間がない
- 実装しようとしている機能設計に関する議論が紛糾しており,他メンバーからの懸念を払拭するために検証作業を大量にやらなければいけない
- documentを大量に書かねばならず,コードを書いてる暇がない
- project management業を任されており,社内外の調整業務に忙殺されている
- 大量のミーティングへの出席を要求されており,ミーティングそのものと付随する作業で1日が終わる
- 日々障害対応に追われて1日が終わる
- コードを書かないで検証する時間が長いプロジェクトに参加している
- 自分の場合1カ月ぐらいECS上で検証して実現可能性を調査しないといけないプロジェクトに参加したことがあり,この期間はコードは環境構築のための簡単なシェルスクリプトぐらいしか書かなかった.
- その他にも長期の障害調査,サービスのmigration作業,documentation作業にかかわる場合も該当する.
大雑把な対処法
- 機会がない
- 他の同僚のヘルプをしに行く
- 埋もれているチケットを発掘して勝手にやる
- CI/CDを改善する*2
- 重そうなSQLを探して修正するもしくは当該のcolumnにindexを貼る*3
- typoを探して直す*4
- コメントの誤字脱字を直す
- 使われていない定数・関数・クラスを発見して削除する*5
- 使われていないテーブルを発見して削除する*6
- 古いsyntaxで書かれている箇所を直す*7
- コードを読みまくって少しでも気になる所のリファクタリングをする*8
- プロファイリングしまくってボトルネックを探し出し取り除く*9
- 「いつか使えると思うっす」とか言ってライブラリを生み出す*10
- 社内で使っているが自分が気に入らないツールを勝手に置き換える or 書き換える*11
- Dockerで動いてないものをDocker上で動くようにする
- 時間がない
- 誰かとタスクをシェアしてコードを書く余裕を作る
- 急いで目の前のタスクを終わらせてコードを書く時間を捻出する
- 自分が不要そうなミーティングは参加を断って出席しない*12
- 残業してコードを書く時間を捻出する
- 仕事でコードを書くのを諦める
- 仕事を急いで終わらせてプライベートでコードを書く時間を最大化する*13
- その他
- 直属上司に相談する
- 直属上司がだめなら上位上司に相談する
- 他のマネージャに仕事をもらえないか相談する
*1:もしくは頻繁に
*2:経験上特にデプロイ周りは改善の余地が多いことが多い
*3:たくさん見つかると無限にやっていられて楽しいしweb applicationのレイテンシ改善効果が高い
*4:英文法の誤りを直してもよい
*5:たくさん消せると気持ちいい
*6:削除して問題が起きると怖いのでリネームして様子を見るだけでもよい
*7:かつてrspec2系で書かれたspecを全部rspec3系のsynctaxに直したことがある
*8:リスクが低いコードから少しずつやる
*9:以外と変なところで重くなっているぞ
*10:前職で暇だった時に2週間かけてJSONを生成する謎のDSLを書いたが誰にも使われなかった
*11:まずは長年メンテされてない社内ツールのような,皆の関心が低いものを狙う
*12:「あいつはそういう奴だ」で許される空気を作ろう
*13:悲しいけどこれが一番楽な気もする