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
520
Composerの依存解決 #phpstudy
o0h
PRO
0
130
「影響が少ない」を自分の目でみてみる
o0h
PRO
3
1.8k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.7k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.3k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
4k
色んなオートローダーを覗き見る #phpcon_okinawa
o0h
PRO
5
730
ヒューマンエラーの本を読んだ ~報告会~
o0h
PRO
3
380
みんなでワイワイ「テスト駆動開発」の話をやる会 #techramen24conf
o0h
PRO
4
740
Other Decks in Programming
See All in Programming
Google Opalで使える37のライブラリ
mickey_kubo
3
170
20251016_Rails News ~Rails 8.1の足音を聴く~
morimorihoge
3
880
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
410
Pythonに漸進的に型をつける
nealle
1
140
ネストしたdata classの面倒な更新にさようなら!Lensを作って理解するArrowのOpticsの世界
shiita0903
1
170
EMこそClaude Codeでコード調査しよう
shibayu36
0
490
あなたとKaigi on Rails / Kaigi on Rails + You
shimoju
0
220
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
5
1k
KoogではじめるAIエージェント開発
hiroaki404
1
180
Amazon Verified Permissions実践入門 〜Cedar活用とAppSync導入事例/Practical Introduction to Amazon Verified Permissions
fossamagna
2
100
TransformerからMCPまで(現代AIを理解するための羅針盤)
mickey_kubo
7
5.7k
Towards Transactional Buffering of CDC Events @ Flink Forward 2025 Barcelona Spain
hpgrahsl
0
120
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
431
66k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
For a Future-Friendly Web
brad_frost
180
10k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
10
900
Facilitating Awesome Meetings
lara
57
6.6k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
GraphQLとの向き合い方2022年版
quramy
49
14k
A Tale of Four Properties
chriscoyier
161
23k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
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