Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Is High Quality Software Worth the Cost?
Search
hideki kinjyo
PRO
August 23, 2019
Programming
0
1.1k
Is High Quality Software Worth the Cost?
https://martinfowler.com/articles/is-quality-worth-cost.html
が興味深かったので、社内LTで紹介してみました
hideki kinjyo
PRO
August 23, 2019
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
410
Composerの依存解決 #phpstudy
o0h
PRO
0
120
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.7k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.6k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.2k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
10
3.9k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
690
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
360
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
690
Other Decks in Programming
See All in Programming
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
130
オープンセミナー2025@広島「君はどこで動かすか?」アンケート結果
satoshi256kbyte
0
240
Improving my own Ruby thereafter
sisshiki1969
1
150
Kiroの仕様駆動開発から見えてきたAIコーディングとの正しい付き合い方
clshinji
1
200
print("Hello, World")
eddie
1
480
CSC305 Summer Lecture 12
javiergs
PRO
0
130
OSS開発者という働き方
andpad
5
1.7k
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
AIコーディングAgentとの向き合い方
eycjur
0
250
Laravel Boost 超入門
fire_arlo
2
200
時間軸から考えるTerraformを使う理由と留意点
fufuhu
14
4.2k
機能追加とリーダー業務の類似性
rinchoku
2
970
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
111
20k
We Have a Design System, Now What?
morganepeng
53
7.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Writing Fast Ruby
sferik
628
62k
Done Done
chrislema
185
16k
The Language of Interfaces
destraynor
161
25k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Making Projects Easy
brettharned
117
6.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
A Tale of Four Properties
chriscoyier
160
23k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
Art, The Web, and Tiny UX
lynnandtonic
302
21k
Transcript
Is High Quality Software Worth the Cost? ブログ記事読みました!ファンです!!LT(社内)
https://twitter.com/t_wada/status/ 1155691342560808965
Martin Fowler⽒のエントリーを読んだ話をします https://martinfowler.com/articles/is-quality-worth-cost.html
この話の議論と結論 • 議論: • 「質の⾼いコード」を書こうとすると、コスト掛かるよね • 実際の現場では時間が⾜りないよ! • 結論: •
「よくないコード」は、ソフトの成⻑に従い⽣産性の低下を招く • 「よいコード」は、⽣産性を寧ろ向上させる • 優れたチームはコードの品質を気にしているよ!
こんにちは!
皆さん! クオリティを⼈質にとっていますか? http://shirobako-anime.com/story/21.html
お話の前に・・ • 今回「クオリティ」といったら、 「コードの品質」のことだと思ってください • External Quality: UIとか安定性とか • Internal
Quality: アーキテクチャ、設計 ➡ External Qualityは顧客から⾒える部分、 Internal Qualityは開発者しか⾒えない部分 ͬͪ͜Ͷʂ
レベッカと私(例えば) • レベッカと私は、似たようなアプリを作ってい ます • UI的にも提供体験的にも、今は似たようなレベ ルです • レベッカは$10!わたしのは$6 Ͳ͕ͬͪ
΄͍͠Ͱ͔͢ʁ
レベッカと私(例えば) • もう1点、実は違いがあります! • レベッカのアプリは、アーキテクチャもしっ かりしていて読みやすいです! • 私のアプリは・・・まぁ動くんでぇ〜 Ͳ͕ͬͪ ΄͍͠Ͱ͔͢ʁ
レベッカと私(例えば) • UI、提供体験: External Quality • ソースコードのレベル: Internal Quality •
Internal Qualityに価値を感じ、⽀払う⼈はいない ➡ それが Is High Quality Software Worth the Cost? という議論をもたらす
なぜ 開発者は「クオリティ」を 考えるべきなのか
ソフトウェア開発って • 「ソース」に継ぎ⾜し継ぎ⾜し、やっていく ものですよね • よく「建築」とかに例えられるけど、 その点において決定的に違いますわな
例えば「新規」機能の追加 • まず既存コードやドキュメントを読むでしょ • その上で「⾃分が追加する機能」を どう差し込むか?を考えるでしょ • 実際に「そのために適したI/F」とか「データ構 造」を考えるでしょ •
さぁ〜て書くかー!
ソフトウェア開発 ≒「読み解く」作業が⼤半
例えば「新規」機能の追加 • まず既存コードやドキュメントを読むでしょ • その上で「⾃分が追加する機能」を どう差し込むか?を考えるでしょ • 実際に「そのために適したI/F」とか「データ構 造」を考えるでしょ •
さぁ〜て書くかー! ͜ΕΒ͕શͯɺ ʮطଘίʔυʯͷ ӨڹԼʹ͋Δ࡞ۀ
読まにゃらなんのですが・・ • もつれにもつれたロジック、フロー • 意味不明な変数名 • 巨⼤で関係ないデータ、取り出しにくい構造 • 分割されていないモジュール
クオリティが低いと • 該当コードを探し出すのに時間がかかり・・・ • その内部処理を読み解くのに時間がかかり・・・ • 既存コードに影響を与えない修正に時間がかかり・・・ • (それでもバグを出しやすくて)・・・ •
もしエンバグしたら、「追加作業」で時間がかかり・・・ • デバッグしてコードを理解するのには時間がかかり・・・ • 原因究明後に「正しい修正」をするのに時間がかかり・・・
クオリティが低いと • 該当コードを探し出すのに時間がかかり・・・ • その内部処理を読み解くのに時間がかかり・・・ • 既存コードに影響を与えない修正に時間がかかり・・・ • (それでもバグを出しやすくて)・・・ •
もしエンバグしたら、「追加作業」で時間がかかり・・・ • デバッグしてコードを理解するのには時間がかかり・・・ • 原因究明後に「正しい修正」をするのに時間がかかり・・・ ᶃ ࣮Ͱ࣌ؒ͘͏͠ ᶄ ͔͚࣌ؒͯ ʮବʯ͕ͪͩ͠ ᶅ ᶃͰ͔͔ͬͨ࣌ؒBHBJO
クオリティが低い事で負のサイクルに。 その負は、更に次の負を呼び込み、 どんどん加速していく・・・・
その後のレベッカと私(例えば) • レベッカは継続的に新機能を提供していきました • 私は・・・ ちょっとした機能修正ですら迂闊に⼿を出せない 状況に。 • ユーザーがどちらを選択するかは⾃明。 レベッカは更に競争⼒を増し(もっと価格上げても
⼤丈夫かも!)、私は撤退を余儀なく・・・
開発スピードと クオリティへの(投資)の関係
࣮͞Εͨྦྷܭػೳ 1+ͷ׆ಈظؒ 「コードが成⻑していったときに、いじるのが どのくらい⼤変か?」を⽰した概念図
࣮͞Εͨྦྷܭػೳ 1+ͷ׆ಈظؒ 最初は「低クオリティ」がスピードに乗ってい るようにみえる
࣮͞Εͨྦྷܭػೳ 1+ͷ׆ಈظؒ 中⻑期的には、低クオリティのPJは成⻑が鈍化し ている。⼀⽅で⾼クオリティのPJは⽣産性が失わ れない
࣮͞Εͨྦྷܭػೳ 1+ͷ׆ಈظؒ 「クオリティを捨てて得られるリード」が⽣じて いるのは、本当に⼀瞬・・・”意外と”すぐ追いつ かれる。
低クオリティvs⾼クオリティ • 低クオリティのコードは、未来のメンバーの 「やらなければいけないことを増やす」。 • 読む苦労、エンバグするリスク • ⾼クオリティのコードは、未来のメンバーの 「やりたいことを⼿助けする」。 •
先⾏したコードを活⽤できる! ෆຯ͍ɺߴ͍ɺ͍ ඒຯ͍ɺ͍҆ɺૣ͍
よいチーム、悪いチーム
どんなチームでも • 「品質に気を遣っていこうな!」は⼤事 • が、優秀なチームが気をつけていたとしても 「嫌なコード(cruft)」は⽣まれちゃう • そこで放ったらかしにしないのが良いチーム! • それが「成⻑速度を維持する」のにつながる
キッチンの⽐喩 • キッチンが汚れてるまま、料理ってできる? • 気持ちよくないよね・・ • それでも放ったらかしていると・・ • 汚れが乾いてこびり付き、掃除⼤変! •
次の料理も引き続き嫌な気分!!
まとめ
None
めっちゃ便利だった・・ https://qiita.com/wtetsu/items/c43232c6c44918e977c9