mongolyyのブログ

開発(Javascript, Typescript, React, Next.js)や開発手法(スクラム, アジャイル)、勉強したことについて色々書ければと。

「ソフトウェア設計のトレードオフと誤り」を読んだ

はじめに

メーカーのコーポレート部門でテックリードをしているモンゴルです。
設計の本が出たらついつい読んじゃう質なので、次の本を買って読んでみました。

わかったことを書いていこうと思います。

わかったこと

API、ライブラリ、ツール設計におけるトレードオフがちょっとわかった

API、ライブラリ、ツールにおいて、「内部で使っているライブラリの仕様をどこまで隠ぺい化するか?」という話が興味深かったです。
個人的にはあまり隠蔽しない派だったのですが、本書を読んで、共通して使われる社内向けAPI、ライブラリ、ツールを開発している場合は適切に隠蔽しないと、内部で使っているライブラリの変更の影響をもろに受け、メンテナンスコストが大きくなることが理解できました。

共通部分を作るチーム、それを使うチームは分かれることが多いですが、互いに歩み寄って全体としてどうあるべきかを考えないと、長期的に見て不満がたまる結果になりそうだと思いました。

日時の扱いの難しさを垣間見た

特に「UTCで保存すべきかどうか」の話は興味深かったです。
個人的にはUTCで保存すべきという考えでした。
しかし、本書の説明を読んで、「制度が変わってタイムゾーンが変更されたときに、日付をどう表示するかということを考えるとローカルタイムでもデータを保持したほうがいいんだなー」と理解できました。

また、一か月後の定義も閏年を考慮するとしっかりと考えるべきだなーと理解できました。
普段は日付を扱うためのライブラリを通して、例えば"一か月後"の設定などをしていますが、しっかり挙動を理解してやるべきだなーと思いました。

他にも、うるう秒、サマーゾーン、相対性理論を考慮した話は、実務にどこまで活きるかはわかりませんが、グローバルなシステム、日付の扱いにセンシティブなシステムの場合「こういうこともあるんやなー」と勉強になりました。

おわりに

パフォーマンスなどについて、実際に測定されている節がちらほらあったのが印象に残りました。
予測だけでなく、実測に基づいて考えるというのが大事だと再認識しました。

また、グローバルなシステム、大規模なシステムを経験してきたであろう筆者の、細かい考慮の話も勉強になりました。