自社開発エンジニアの仕事|「仕様です」で済ませたら、そこで試合終了ですよ

エンジニアのキャリア

自社開発に夢を見るのは自由だ。

最新の技術を使い、ウォーターフォールのような厳しい納期とはおさらば。アジャイルで自由に開発して、Claude Codeも使い放題。もちろんフルリモート。

そんなイメージだけを求めて自社開発に転職するつもりなら、やめておいたほうがいい。

いや、もし本当に夢のような職場があるなら、僕にも教えてほしい。

現実には、地味な運用保守も、ユーザーからの問い合わせも、古いコードとの格闘もある。

僕はヤフーや楽天、スタートアップで、自社サービスの開発に関わってきた。

そんな僕にとって、自社開発の醍醐味は、正解のない答えを追いかけることだ。

ユーザーの困りごとを考え、チームで作って、試して、また直す。その繰り返しでサービスが育ち、使う人が増えていく。

僕は、そんな自社開発の話をしたい。

作って、試して、また直す

自社開発では、仕様書が出来上がる前から、エンジニアも一緒に考えることがある。

PdM(プロダクトマネージャー)が何を作るべきか考え、デザイナーが使いやすさを考え、エンジニアが実現方法を考える。もちろん、そんなにきれいに役割が分かれているわけでもないし、会社によっても違う。

ゼロから生み出す

ヤフーで、テレビ向けのアプリを作っていたことがある。テレビのデジタル化が進んでいた頃で、メーカーごとに独自のプラットフォームがあった。

トップ画面を作るとき、UI/UXチームが中心となってデザインコンペを開いた。エンジニアも加わり、いくつもの案を検討した。

テレビを使う人が、みんなITに詳しいとは限らない。誰でも分かりやすく、操作しやすく、しかも格好いい画面にしたい。

そんなことを、デザイナーもエンジニアも一緒になって考えた。

まず、動くものを作ってみる

いくら格好いいデザインでも、実際に操作しやすいかは別の話だ。

そこで、何パターンものデザインコンセプトから、いくつか実際に動くものを作って試した。

デザイン画を眺めるだけでは分からないことも、動かしてみれば見えてくる。コードを書くことが、何を作るか考えるための手段になる。こういう仕事は面白い。

最終的に選ばれたのは、黒い背景に、カーソルを動かすとアイコンが光る、iPhoneのUIやソニーのUIを思わせる立体的なデザインだった。

プロジェクトメンバー全員が自慢できるようなものが出来上がった。

ただ、この話にはおまけがある。

ヤフーの顔になるサービスということで、孫さんにもレビューしてもらうことになった。ヤフーのトップページはどのデバイスでも白背景だ、という趣旨の指摘があった。

結果、すべて作り直し。

立体的で格好よかったUIが、のっぺりしたウェブサイトのようになってしまった。

画面ひとつにも、ブランドや経営の考えが入り込んでくる。なかなか思いどおりにはいかないものだ。

正解は、実際に使ってもらわないと分からない

もちろん、フィードバックをくれるのは社内の人たちだけではない。

ヤフーでは、グループインタビュー(リリース前の製品を実際の利用者に見てもらい反応をもらうこと)を通じて機能を改善したこともあった。

自分たちでは使いやすいと思っていても、利用者にとって使いやすいとは限らない。

だから、まず作ってみる。実際に使ってもらう。反応を見て、また考える。

コードが完成しても、それが正解だったかどうかは、まだ分からない。

僕は、この繰り返しが好きだった。

「仕様です」で済ませたら、そこで試合終了ですよ

自社サービスを育てる、と書くと、何だか大きな仕事に聞こえる。

でも、日々の仕事はもっと地味だ。

あるとき、ユーザーから入力項目の制約について問い合わせがあった。カスタマーサポートを通じて、開発チームに相談が届いたのだ。

「仕様です」で片づける前に、そもそもその仕様が本当に正しいのかを確かめたい。

PdMがビジネス上の要件を確認する。入力できる最小・最大文字数はどこまで必要なのか。それをもとに、デザイナー兼フロントエンドエンジニアが画面を修正する。

一方、バックエンドのエンジニアはAPIの入力チェックを変更する。DBの仕様も確認し、データの追加・更新処理を修正する。

調べてみると、新規追加と更新で入力チェックの条件まで違っていた。そこも直すことになった。

たかがバリデーション、されどバリデーション。

画面で入力できても、APIが受け付けなければ意味がない。APIが受け付けても、DBに保存できなければ困る。

入力欄ひとつを直すにも、いろんな人の知識と仕事が必要になる。

では、こういう仕事を普段どうやって進めているのか。

この改善を題材に、僕が経験してきた2週間単位の開発の様子を紹介しよう。

この2週間で、何を終わらせるか

僕が経験してきたアジャイル開発の現場では、2週間を一区切りにして仕事を進めることが多かった。この区切りをスプリントと呼ぶ。

最初にチームで集まって、次の2週間で取り組むことを決める。スプリント計画だ。

例えば、今回は入力チェックの問題を改善しよう、と決めたとする。

まず仕様を確かめ、画面やAPIの修正、動作確認までに必要な作業を洗い出す。

誰が何を担当し、どの作業が次につながるのか。

そうしたことを相談しながら、必要な作業をチケットにしていく。

チケットは、担当や進み具合を共有するための作業メモだ。

もちろん、計画したからといって、すべて予定どおりに進むわけではない。

だから、毎日話す。

朝会は、小さな相談の連続

毎朝、チームで集まって進み具合を共有する。

例えば、こんな話だ。

「必要な文字数の条件を確認できた」

「画面の修正は終わった」

「APIを直したので、コードレビューをお願いします」

一つひとつは小さな報告だけど、全部同じ改善につながっている。

PdMが確認した仕様をもとに、画面とAPIの修正が進み、やがて一つにつながっていく。

コードレビューも、単に他の人に間違いを探してもらうだけではない。なぜそう実装したのかを説明したり、自分が気づかなかった問題を教えてもらったりする。

朝会では、もっと小さな困りごとも出てくる。

PR(コードの変更をレビューしてもらうための依頼)の出し方が分からないとか、最近ならClaude Codeのクレジットを使い切ってしまったとか。

AIは疲れなくても、利用枠は先に力尽きる。

そんな相談も、仕事を進めるうえでは大事だ。誰かに聞けばすぐ解決することもあれば、新しく対応が必要になることもある。

新しい作業が必要になればチケットを作る。ただし、仕事を追加したからといって、残りの日数が増えるわけではない。

何を先にやり、何を後に回すか。そこもチームで相談する。

朝会は、単に昨日やったことを報告する場所じゃない。

自分の仕事を、次の誰かの仕事につなげる場所でもある。

バラバラだった仕事が、一つになる

こうして、少しずつ作業が進んでいく。

仕様の確認、画面の修正、APIやDBの修正。

レビューやテストを経て、別々だった仕事が一つになる。

僕が経験したチームでは、スプリントの終わりに、完成したものをみんなで確認する時間があった。スプリントレビューと呼ばれるものだ。

入力チェックの例なら、テスト済みの画面からAPIを呼び出し、DBまで正しく動くところをみんなで確かめる。

別々に修正したものが、目の前で一つの機能として動く。

当たり前のことなんだけど、やっぱりうれしい。

一人ひとりが進めていた仕事が、ユーザーの困りごとを解決するための、一つの改善になる。

そして、必要なリリース作業へとつなげていく。

作り方だって、改善していく

2週間の最後には、もう一つ大切な時間がある。

振り返りだ。

今回の仕事はうまく進んだか。仕様をもっと早く確認できなかったか。コードレビューをお願いするときに、もう少し情報があればよかったんじゃないか。

そんな話をして、次の2週間に活かしていく。

サービスを少しずつ良くするのと同じように、自分たちの仕事の進め方も少しずつ良くしていく。

アジャイルというと、何だか特別な開発手法に聞こえるかもしれない。

でも、僕が好きだったのは、こういう日々の小さなやり取りだった。

自分の担当だけを終わらせるのではなく、みんなで一つの仕事を終わらせる。

その積み重ねで、サービスが少しずつ育っていく。

作る自由と、作った責任。自社開発の「自」は自分じゃない

自社開発だからといって、好きな技術を選んで、好きなように作れるわけではない。

そもそも、開発は一人でやっているわけじゃない。そして、作ったサービスを使うユーザーもいる。

自由に作れることと、好き勝手に作れることは、ずいぶん違う。

自分の正解が、チームの正解とは限らない

例えば、新しいサービスを開発するとしよう。

自分はPythonが最適だと思っている。でも、チームの他のメンバーは全員Node.jsがいいと言っている。

もちろん議論すればいい。Pythonがいいと思う理由を説明して、他の人の意見も聞く。その結果、Node.jsで作ることになったら、そっちで作る。

自分だけPythonで書き始めたら、もはやチーム開発というより反乱である。

技術選定だけじゃない。仕様の認識を合わせたり、コードをレビューし合ったり、自分がなぜそう実装したのか説明したり。

面倒に感じることもある。でも、他の人の意見を聞いて、自分一人では思いつかなかった答えにたどり着くこともある。

自分の正解を通すより、チームでより良い答えを見つける。それも自社開発の面白さだと思う。

障害対応を頑張るより、障害を起こさない努力をしたい

そして、もう一つ忘れてはいけないのがユーザーだ。

24時間365日使われるサービスなら、深夜だろうが休日だろうが、ユーザーはサービスが動くことを期待している。

当然、運用保守も仕事になる。障害が起きれば調査するし、必要なら夜間や休日の緊急対応もある。

ただ、エンジニアが24時間365日働いていたら、サービスより先に人間が壊れてしまう。

だからこそ、障害が起きにくい設計にする。壊れても影響が広がらないようにする。監視や復旧を自動化する。

夜中に呼び出されないために、昼間に頑張る。これも立派なエンジニアリングだ。

そのコード、誰が喜ぶんですか? —— コードの完成は、仕事の完成じゃない

僕はコードを書くのが好きだ。できるなら一日中書いていたいし、会議だって少ないほうがいい。

でも、どれだけ気持ちよくコードを書いても、それだけでユーザーの困りごとが解決するわけではない。

設計もきれいにできた。テストも通った。リリースも終わった。エンジニアとしては「できた!」と言いたくなる。

でも、そのサービスを使う人が何も便利になっていなかったら、それは僕らだけの達成感だ。

仕事の評価をするのは上司かもしれない。でも、作ったものに価値があるかどうかを教えてくれるのは、ユーザーだ。

だから、デザイナーと一緒に使いやすさを考える。問い合わせを受けて仕様を見直す。自分の案が通らなくても、チームで別の答えを探す。

正直、面倒なことも多い。コードだけ書いていられたら楽なのに、と思う日もある。

もちろん、仕様の相談や運用保守より、コードを書くことに集中したい人もいるだろう。そんな人にとっては、僕が面白がってきた仕事が、かえって負担に感じられるかもしれない。

それでも、自分たちが作ったものが誰かの困りごとを減らし、使い続けてもらえたら、それが一番うれしい。

僕らの仕事は、コードを完成させることじゃない。ユーザーに価値を届けることだ。

もう少し知りたい人へ

チームで進めるアジャイル開発に興味を持った人には、『SCRUM BOOT CAMP THE BOOK【増補改訂版】 スクラムチームではじめるアジャイル開発』をおすすめしたい。スプリント計画や朝会、振り返りが何のためにあるのか、スクラムの考え方や進め方をもう少し知りたい人に向いている。

一方、作ったサービスをどう改善し、成長させていくかに興味があるなら、エリック・リースの『リーン・スタートアップ』もおすすめだ。「構築・計測・学習」という循環は、作って、試して、また直す仕事にもつながっている。

自社開発の会社なら、どこでもこんな仕事ができるわけじゃない。エンジニアがどこまで企画に関わるのか。ユーザーの声をどう開発に反映しているのか。求人を探すときには、そんなところにも目を向けてほしい。

自分もこんなチームで働いてみたいと思った人には、僕が使った転職エージェントと情報収集サービスの比較も参考にしてもらえたらうれしい。