生成AIの話題に事欠かなかった2024年も残すところあと僅か、毎度おなじみ年末に1年の活動報告を書いているツナかふぇです。
フリーランスエンジニアとしては活動5年目を迎え、技術的な挑戦を存分に楽しめた半面、責任のケツ持ちや工数の調整役する場面も多くなるという、マネジメント面も鍛えられた年でした。それらで得られた知見を今後生かすためにも、1月~12月の振り返りをしていこうと思います。
昨年度同様に今年も年中フル稼働しており、相変わらずフリーランスの皮をかぶった正社員風の業務形態となっております。(フリーランスの自由・高収入を謳うエージェント広告は大抵デマです。そんなことしてたら単価は上がりませんし、最悪仕事がなくなります)
昨年の11月半ばからスタートしたReactのシステム開発は、3人体制でのスタートでした。
ただし、少し変わっていたのは3人が1つのシステム開発に従事するのではなく、3人が別々のシステムに1から携わる、というものでした。
初動はふわっとした要件があるのみで、RDSのテーブル定義やAPIのRequest/Response項目等の具体的項目はこの時点で何も決まっていない状態。それらを各々1人で担当するというのですから、かなり属人的なシステム開発になります。
加えて3人ともReactについてはさほど精通しているわけではない為、各々が個別に調査を行い、週に1度技術的な調査結果の共有を行い、各々の実装に取り込めそうであればそれらを反映させる、という開発方針となりました。
この時の決めの甘さが、後々の悲劇を招くことになるとは、この時は夢にも思っていませんでした。
1月に引き続き、技術的な調査がメインとなります。React周りは様々な外部ライブラリの検証~破棄を繰り返し、何とかメインで使うライブラリが決まります。
使用するライブラリが確定した段階で、一旦調査フェーズは終了。フロントから呼び出すAPIやDBの設計を進め、フロントでテスト的に呼び出すMockを配置するなどして、開発は順調に進んでいきます。
私の担当システムの全容が確定し、あらかたの設計が終わります。3人の中で私のシステムが一番簡易なシステムだったことがここで分かります。
ここで2月に利用が決まったライブラリを用いた共通化、効率的な利用方法、本番環境へのデプロイ手法など、再び調査を開始します。とにかくTry & Error尽くしの毎日だったため、この時期がこの1年で楽しい時期だったかもしれません。
React側の基底処理をブラッシュアップしながら、システム開発を進めます。
私のシステムが開発環境で一通り動くようになり、一段落。そういえば他の2人はどうなったのかな? と、ここで初めて2人が担当しているプロジェクトのGitHubRepositoryを見に行くのですが…ここで驚愕の事実が発覚します。
なんと、そのうち1人の実装の手法が、私ともう一人のそれと全く違うのです。一人(以後、Aさん)は私が展開した基底処理を組み込んでいた為、さほど私のコード形態と乖離はありませんでした。問題はもう一人の方(以後、Bさん)で、私の展開した基底処理を何も組み込んでいなかったのです。
同じReactプロジェクトで、1人だけ実装方針が異なると後々の改修で後任が辛い思いをするのは目に見えています。私はBさんに何故作りが違うのか確認したのですが、「今は機能開発の最中で、こっちの方がやりやすい。後で直す」とのこと。後で直すならまぁいいか、と思いこの時は追及しませんでしたが…。
6月の頭に、Bさんが現場を今月限りで撤退する、という衝撃の事実が判明。すぐさまBさんに基底処理の修正依頼をPM含めて打診しましたが、Bさんの担当プロジェクトは6月中に開発環境リリースがマスト、今の実装を中途半端にできない、ということで機能実装が優先されてしまいます。もうこの時点で嫌な予感はしており、それはすぐに現実のものとなります。
当然というか、Bさんの引継ぎ先は私になりました。私が一番Reactの基底処理に精通しており、自身の担当プロジェクトも落ち着いているので、順当な割り当てですが…その引継ぎ期間は僅か1週間。そんな短期間で引き継げるか! と内心毒づきながら、ひとまず最低限の業務仕様のみキャッチアップ。月初には作りかけの機能も完成したとの報告を受け、Bさんは月末に去っていきました。
月初早々、Bさんのプロジェクトを引き継いだ私は頭を抱えます。共通的な規定処理が適用されていない為、コードが難読化されており、読み辛い。しかも別に独自で作っていた基底処理に不具合があり、全体的にアプリケーションの挙動が怪しい。さらには、最後に作っていた機能はエラー系の処理が全く考慮されておらず、開発環境にデプロイされたアプリケーションはハリボテ同然という体たらく。仕事ナメてんのか?
さらに衝撃だったのが、最後にBさんが開発していた機能が要件的に完全に不要なことが判明したこと。じゃあ最終月の「機能開発優先」の指令はなんだったんだ?? 去る事が確定していたBさんに、6月は遊ばせてたってこと? で、それを私が引き継ぐ? 腸が煮えくり返るとはこの事です。
7月を全て使って出した結論は、「1から全部作り直す」でした。概算工数でおそらく来年の3月までかかるだろうという見通し。React側だけではなく、API側も、さらにはDBの構成も要件を満たせていないことが判明したため、本当に全てを白紙に戻した状態からスタートすることになりました。
Bさんの技術力は一定水準に達していました。それ故に一人プロジェクトでも大丈夫だとPM側は判断し、すべてをBさんに任せていました。しかし、退陣が決まってからも、彼のタスクを先んじて引継ぎさせず、そのままにしてしまっていたのが悪手でした(6月に周知されたということは、辞める事自体はもっと早くPMの耳に入っているはず)。結果、私が引き継いだプロジェクトは”趣味”として消費された砂場の残骸であり、とても成果物とは呼べない代物になってしまったワケです。
退陣の決定と同時にそのメンバーをサブポジションに挿げ替えて、メインストリームを他者に渡す必要がある、という知見を得られた一件だったと思います。
また、3人が別々のプロジェクトをやっているのに、お互いのコードレビューと改修の優先度設定を行わなかったのも良くありませんでした。たとえ技術的な認識を合わせても、それが実際に共通的に各々のプロジェクトに組み込まれるとは限らないのです。共通的な処理に限っては、各々のプロジェクトに横展開することを優先度を上げたチケットにし、その進捗報告を求めるべきでした。
7月から引き継いだBさんからの引継ぎプロジェクトは、いまだ未完成ではありますが、大分リリースまでの目途がつく状態になりました。運営の不満と自身の落ち度に板挟みになりながらも、単価交渉の場ではBさんの尻拭いを軌道に乗せた事が評価され、現在の単価の5%upで落ち着きました。
単価も評価も上がった為、ひとまずBさんから引き継いだプロジェクトは完遂させる予定です。自身もマネジメント面でもっとチーム運営方針に絡む必要性を感じた一年でした。それにしても、今回のような事が今後も起こるようであれば、現場との付き合いを考え直す必要があるかもしれませんね。
来年も皆さんに、よき技術の場が与えられますように。