自分は2018年から2020年3月まで大学院で2年間情報学を勉強・研究してエンジニアリングに触れ、2020年4月からはヤフー株式会社で新卒として企業でのエンジニアリングを学びました。2021年5月から株式会社グラファーに転職して、今現在”スマート申請”という製品のエンジニアとして働いています。
しかし、一口にエンジニアといってもやってていることはバラバラで、エンジニア同士であっても何してるかは見えてこないのに、ましてやエンジニアでない人は本当に何してるか想像もつかないと思います。
そこで、なるべくエンジニアでない人でもわかるように自分が毎日どんな仕事をしているか説明してみようと思います。
ちなみにスマート申請って何
オンラインで行政手続きが完結できるようにする製品です。一般的なwebフォームに必要な情報を入力して送信するだけで申請が完結します。
ざっくり何してるの
基本的にはユーザーがかかえている課題に対して、課題を解決する方法を提供することが自分の仕事です。こんなもの作って欲しいみたいな設計書が上司から渡されて、スケジュールに間に合うようにそれ通りになんか作っているわけではないです。
最初にすること
まず、ユーザーがどんな課題を持っているのかを特定します。
過去に自分が取り組んだ内容を噛み砕いたものが、”申請者に必要な入力項目だけ表示してほしい”というものでした。
しかし、”必要な入力項目だけ表示してほしい”というのは機能要望であって、課題ではありません。
“なぜ必要な入力項目だけ表示したいのか?”という問いから、”項目いっぱいあったら読むのに負担がかかるから”のように課題の形に変換し、”なぜいっぱいあったら負担がかかるのか?”のように課題をどんどん深掘っていきます。
その過程で、エンジニアの自分がユーザーにインタビューすることもありますし、ユーザーに近いビジネスのメンバーとディスカッションすることもあります。
結論、”必要かどうか判断する認知コストがかかる”というのが課題と判断しました。
課題の深掘り
課題を深堀りして特定できれば、それが解決できる方法を考えて、その課題を解決できるような機能要求に落とし込んでいきます。
先程の”必要かどうか判断する認知コストがかかる”の課題に対する要求としては、”不必要な入力項目は隠せるようにすること”のような形になります。
この機能要求で課題が解決されるかを確認します。
必要かどうかの判断を申請フォームが行って不必要なものを隠してくれたら、認知コストの課題は解決されそうですね。
いざ開発
要求を洗い出して要求を満たすことで課題が解決できると確認できたら、実際に開発を行って行きます。ここからがエンジニア以外の方に説明するのが難しいのですが。。。
エクセルで関数を使ったことがある方ならば、”SUMというエクセルの関数を使って、複数のセルの合計する”という要求を満たすことができると思います。
そんな感じで、”JavaScriptというプログラミング言語を使って、その項目が不必要であれば隠す”という要求を満たします。
エクセルだと最終的に式が出来上がりますが、プログラミングだと最終的にソースコードが出来上がります。
開発できたことをテストで証明
まだまだやることはたくさんあります。次にテストを書きます。
エクセルでsumを使って合計を計算するときも、ちゃんと合計が計算されるようになっているか確かめるために、セルにいろんな数字を入力すると思います。
同じことをエンジニアも行います。フォームにいろんな入力をしてみて、不必要と判断される場合にちゃんと隠れるのを確認します。
しかし、エンジニアはここで飽き足らずこれが自動的に確かめられるようにします。それがテストコードと呼ばれるものです。
テストコードを作ってそのコードを実行すると、必要な項目は表示されるし不必要な項目は表示されないことが自動的に確かめられます。ソースコードがちゃんと動く証明書がテストコードです。
ソースコードを組み合わせる
手元のPCで作って正しく動くことが確かめられても、ユーザーの課題は解決されません。ユーザーの方が触る申請フォームにこの機能を取り入れねばなりません。
パワポを複数人で編集したことがある人はわかると思うのですが、最新版だと思って自分の編集を取り入れてみたら、実は古いバージョンで、他の人の変更が反映されてなかった!みたいなことがあると思います。
エンジニアも複数人でソースコードを編集するのでこれが起こることは必死です。
そこでエンジニアはgitというバージョン管理ツールを使って、間違って古いバージョンが入らないようにします。
いざユーザーの手に
最後にユーザーに手が届くところにソースコードを持っていきます。
サーバーと言ってどんなふうに解釈されるか想像もつかないのですが、みなさんがスマートフォンでアクセスする先には必ずサーバーがあります。ここにアクセスしてもらってユーザーは申請フォームを見ることができます。
ですので、そのサーバーにあったソースコードを最新版のソースコードに入れ替えてあげることでやっとユーザーに機能が届きました🎉
ユーザーに機能を届けることを私たちはリリースと呼びます。
機能のリリース≠課題の解決
課題が解決されるように機能要求を考えて開発はしたのですが、実際に機能をリリースすることで課題が必ず解決されるとは限りません。実際にリリースした機能を使ってもらったユーザーの課題が解決されることを確認するまでがエンジニアの仕事です。課題が解決されていなければ、なぜ解決されていないかさらなる深掘りを行って、製品で解決できるものでれば改善を行いつづけます。
まとめ
自分も大学院に入るまではエンジニアリングの仕事が実際何をするのか全く分かっていなかったのですが、4年たってやっと1人前のエンジニアとして働けるようになってきたと感じています。
製品を作るエンジニアリングはこのような仕事かなと思うのですが、それ以外にもやらなければいけないことはたくさんあって、詳しくなった時に紹介できるような記事を書こうと思います!