こだわりを持って、期間内で出来上がるものを作る

皆さん年末の締め切りに向けて何かしらに追われている日々を過ごしているのではないでしょうか？

自分も仕事の締め切りとこの記事の公開日がそれぞれ迫っている現状にドキドキを隠せません。
開発者たるもの、公開するにはいいものを書きたいと思うものの、如何せん時間が取れなかったり、文書力のなさを嘆いたり……

そんな時に意識するようにしているのが「こだわりを持って、期間内で出来上がるものを作っていく」です。
この記事もそうですが、いくらいい記事を書いていたとしても公開されなければ意味がないですよね。

そんな当たり前のことだろ！と言われることかもしれません。
しかし、これを達成するのは難しい事だと思っています。

今回はパッケージ開発をする者として、自分がこだわりをもって開発を行う上での流れや大事にしていることを書いてみます。

# パッケージ開発でのこだわりとは
開発者たるもの、何らかのこだわりを持って開発を進めていると思います。
自分がもつパッケージ開発でのこだわりがどんなものたちなのかをちょっと考えてみました。

## こだわりのポイント

- 開発手法
- 使用ツール、技術
- 現状の動作への不満
- 新機能

## こだわりの要因

- いいものなので入れたい
- 悪いところを改善したい
- 新しいツールを試したい

## 誰のためのこだわりか

- 自分のため
- 開発者、開発チームのため
- お客様のため

# こだわりを製品に取り込むための流れ
では、こだわりはどうやって製品に取り込んでいくのかを考えてみました。

## 元ネタを日ごろから多く持つこと

まずは何より元ネタとなるものを日々集めることから。

- 情報サイトなどから新しい技術を知る
- 他の人のソースやオープンソースなどを見る
- チームメンバとの情報共有
- お客様ヒアリング
- 社外コミュニティの活動

集め方は人それぞれかと思います。
ちゃんと書けばこれだけで記事が書けると思いますが、今回の主題ではないのでこれぐらいで。

集めた情報は何らかの方法でためておきましょう。
自分は昔はテキストファイル、今はone noteに書き溜めておくようにしています。

##  元ネタから具体的に実施するネタを考える

集めたネタの中から、製品やチーム、開発環境などへ適応するネタを考えます。

単純に「Aという技術はいい技術だから製品に取り入れよう」だと製品に取り入れるために周りのメンバに理解してもらうのは難しいと思います。
そのために、「Aという技術はXという特性からYという効果が得られる。製品に取り入れればZの価値が出せるはず」などと話せるような立て付けを考えておくとよいです。

ただ、設計ではないので仮説レベルでよいかと思います。
最低、概要とターゲット、メリットデメリットぐらいがあればよいかと。

##  今回開発でチャレンジしたいことを選定する

開発要件が決まる前に、今回チャレンジしたいと思う点を選定しておきます。

- とにかく困っているので早く改善したい
- 今回の開発で手を入れる場所なので、合わせてやったほうがいい
- 今の市場状況から、すぐにでもやったほうがいい
- どうしてもこの技術を試してみたい

選定基準は人それぞれだと思うますのでこんなところで。

##  実施したい旨を関係者に伝えOKを出してもらう

選定したものについて、関係者に実施したい旨を伝えましょう。

選定したものの粒度によって、関係者は変わってくるとは思います。
機能追加したい、であれば上長などに許可を取らないといけないでしょうし、共通の開発手法を変えたいのであれば開発チームの合意が必要になるかと。

「使っていたエディタを変えたい」など個人で完結するものであればわざわざ他人のOKを取る必要はないです。
ただ、アドバイスがもらえるかもなのでチームメンバに変えてみることを伝えるぐらいはしておくといいかと。

##  実現に向けて活動する

やるときめたら頑張りましょう。

##  時として見直す。または諦める

時として、思っていたよりも時間がかかったり、実現難易度が高いことがあります。
そういった時は、ただ頑張るのではなく一旦作業を見直してみましょう。
もう一度考え直して、本当に全部やるのか、別の方法はないか、もしくは一旦諦めるかなどを考えましょう。

この作業が、実は一番難しいところだと自分は思っています。
特に入れたいと思っている本人は、やると決めた以上時間をかけてでも頑張って入れたいと思ってしまいがちです。
しかし、開発期間が決まっている以上、想定より時間がかかっているなら必ず見直さなければなりません。こだわりを入れることにこだわりすぎてPJが遅れては目も当てられません。

そのため、日頃からチームやPLなどに情報を共有し、彼らからアドバイスが貰えるようにしておくと良いです。

##  開発完了

やった！

##  実現できたもの、できなかったものを振り返り、場合によっては共有する

試してみて成功したもの、失敗したものそれぞれあると思います。
それらについて、振り返り、次に繋げたり他メンバ、他チームへの共有を行いましょう。

##  製品に適用するネタをブラッシュアップする

時として入れるのを諦めたり、途中で挫折したりすることもあるかと思います。
そういった時にそのままにしておくのではなく、時としてブラッシュアップしていきましょう。
定例的に何かするとかではなく、それこそお風呂でふっと思いついたことなどをネタに書き足していけばいいだけです。

# こだわって開発する上で大切なことの補足

## 期間を守る

冒頭で触れたとおり、PJとして決められた期間がある以上、それを守ることを忘れていは行けません。
そのこだわりがどんなにいいことであれ、当初コスト以上を勝手にかけてPJ期間を遅らせてしまうのは絶対にまずいです。
これをやってしまうと、周りの信用を失ってしまい、次の期間にこだわりを入れたい時に反対されかねません。
 
## 一番初めの考えにこだわりすぎない

絶対にこれを入れる！などこだわることは悪いことではないのですが、当初の形にとらわれすぎないことも大事です。
時にチームの意見を聞いて、もっといい形が思い浮かぶこともありますし、実はそんなに良くなかったとやめるという判断をすることも大事です。
より良い他の手段を取ることもよいでしょうし、実施をしないことも時には立派な成果たりえます。

## 仲間を作る

自分のこだわりを伝え、一緒に取り組んでくれる、もしくはサポートしてくれる仲間達を作っておくとよいです。
個人でやっていること、となるとどうしてもPJの中での優先度は落ちがちですが
チーム皆で取り組んでいる、となるとPJでの優先度も上がってきます。

# 自分のこだわりに対する持論

自分は、その開発で***10こだわってやりたい事があるとして、最低2入れれれば及第点、5入れられたら満足***と思っています。
割合はおおよそですが、以下の3点が大事だと思っています。

- ***10というやりたい事の母数を常に持つこと***
- ***2割は実現するという覚悟を持つこと***
- ***5～8割は入れられなくてもしょうがないという心のゆとりを持つこと***

それぞれの大切さは人によりますが、自分は特に3つ目の心持ちを持っておくことが開発を続けていく上で大事なことだと思っています。
こだわった事が入れられないと人間ストレスを感じてしまいがちです。
そのストレスが仕事に影響することもありますし、いつの日か「どうせ入れられないから」とこだわってチャレンジすることをやめてしまいかねません。

会社員として仕事をする以上は、やりたい事が10全部できる事なんてほとんどありません。
しかし、それでもこだわりを持って少しずつでも実施していくとこが開発者として必要なのかと思っています。

# 最後に

結構書いてしまいましたが、ほとんどが開発する人であれば当たり前のようにやっていることだったかと思います。
その中でも何か１つでも、読んでくれた人の役に立つようなことが入っていたら幸いです。

こだわって開発し続けていくことは難しいですが、こだわり続けることで良い製品、良いチーム、良い開発者が出来上がっていくので
皆さんも一緒に頑張ってこだわり続けていきましょう。

それではよいクリスマスを！