はじめまして!
スタートアップでサーバーサイドエンジニアをやっています。なかのです!
TechTrain Advent Calendar 2019(User ver)の6日目を担当します!
今回はタイトルの通り、新規事業の開発を経験して失敗した事や意識して開発に取り組めたら良かったことなどお話出来たらと思います!
はじめに
簡単に私の経歴と新規事業についてお伝えしますと、
・今年2月に異業種からWebエンジニアに転職(エンジニア歴10ヶ月程)。
・メディア事業のサーバーサイドを担当していたが、9月中旬より新規事業の担当。
・前任者の方がα版(新規事業のコアな機能)まで開発をしていたが退職されてしまったため、自分はβ版に向けた開発から関わることに。
・基本的に社内でプロダクトに関わっているのはPM1人と自分だけで、あとは業務委託の方にお手伝い頂きながら開発。
このような感じで日々過ごしており、その中で経験したことをつらつらと書いていきます。
1、 機能に対する認識合わせは明確にする
これは自分が今回の経験でもっとも失敗した部分です。
β版では要らない・実現が難しそうな機能が仕様に含まれていたり、PMがイメージしていた機能と実際に作成した機能が違っていたり、仕様書通りに実装してみたら仕様がおかしいことに気が付く、そもそも何の為に必要な機能なのか分からないなど、、。
開発のやり直しや仕様の練り直し、誰のボールか分からないタスクが発生するなど、うまく開発が進まずに時間だけが過ぎていく経験をしてしまいました。
今回の大きな問題点としては、サービスの価値をチーム内で認識合わせが出来ていなく、コミュニケーション不足による認識の齟齬だと思います。
このような失敗をなるべく起こさないように、今回は以下の取り組みを実施しました。
・slackなどのオンライン上のコミュニケーションでは、毎回何かしらの反応をすることで気軽に会話が出来る環境を作り、ログとして情報が残るようにする。
・細かな修正点やUIの表現方法などは事前にPMとデザイナーで形にした上でエンジニア側に落としていく。
・仕様に対する疑問点などは必ず担当者を決めて、タスク管理表に記載しておくことで誰のボールか分からないタスクが無いようにする。
・機能追加に関するタスクは必ずユースケースを洗い出して、エンジニアと設計を考える。
・毎日10分程度、開発の進捗や困っていることを共有する時間を作る。
まだまだ改善するべき部分はありますが、以前よりもやるべきことの解像度が上がり、タスクの完了スピードの向上や修正による時間ロスは確実に減っている実感があります。
2、 リリースやその後を意識した機能を設計する
初学者あるあるなのかもしれませんが、自分はローカル上だけで要件を満たした機能開発をおこなってしまっており、実際にどのような環境でユーザーに届けるのか?スケールする際には負荷分散を考えて機能が作られているか?冗長化した際にデータの整合性きちんと取れるのか?など、本番環境を想定して開発出来ていなく、いざインフラチームに環境構築を依頼した際、どのように環境を作ればいいのか分からないといった状況に陥ってしまいました。
基本的にサービスは開発してリリースし、その後も必ず運用・改善していくものだと思います。
・何人のユーザーからアクセスがあるのか
・アプリケーション上ではどのような処理を、どのくらいのユーザーが行うのか
・外部サービスにはどのような接続を行い、どのようなアプトプットを期待するのか
・冗長化した際の対応はどうするのか
・セキュリティ面は問題がないか
少し抽象的な記述ですが、最低限上記のことは常に頭に置いて開発するように心掛けています。
また、特にサービスのコアな機能やユーザーがよく使用する機能などはシーケンス図などを書いて説明することで、開発に着手していないエンジニアでも処理の流れが分かり、設計の相談や機能修正点の洗い出しがスムーズになりました。
(実際にはもっと細かくメソッド単位で書いたりしていますが、今回は雑に書いてます。すみません。。。)
3、 開発した機能に対して自分の考えを持つ
既存のサービスではある程度、開発時のルールや方針が決まっているため、それに沿って開発をしていればあまり悩むことなく日々の開発を進める事が出来ました。
しかし、今回0から開発のルールを考えたり、必要なライブラリーの導入などを行ってみると自分の考えが出せず、今までベテランのエンジニアの方々の意見がベストであると思ってしまい、自分なりのベストな考えを持っていなかったことを非常に痛感しました。
ネット上には無数に情報が散らばっているので、それを真似てそれっぽい機能が作れたとしても、全体のサービスとしては将来的には崩壊していくと思います。常に自分の意思を持ち、考えて、責任を持ってサービス開発の意思決定をしていくことで、個人の成長だけでなくサービスの向上にも繋がっていくと思います。
今回の経験を通して、まだまだ未熟ですが、少しずつ自分の中でルールを作りながら開発進めており、大きめの機能に関しては事前にスキーマ設計やクラス図などを書いて、ベテランのエンジニアにレビューして頂きながら自分の考えを言語化するようにしています。また未来の自分に向けて、開発ドキュメントに残すことも忘れずにやっています。
技術的な知見や設計などを悩んだ際はTechTrainで気軽にメンターの方に相談することも出来るので、積極的に利用してより良いサービス開発の為に活かしていこうと思います。
おわりに
本記事では、新規事業の開発を経験して、もっと意識出来た方が良かった事を紹介しました。
この記事を書く事で、今回の経験を振り返る良いきっかけになったと共に、新規事業に関係なくエンジニアとして普段から意識して取り組むべきことだと感じました。また、完璧に改善出来ているという訳ではないので、日々挑戦しながら自分たちのチームが一番開発効率が上がる方法を探していきたいと思います!
新人エンジニアの人にとって少しでも参考になると嬉しいです。
TechTrain Advent Calendar 2019 まだまだ続きますので、気になった方はぜひ見てみてください!!!