126
PREMATURE OPTIMIZATION The Root of ALL Evil @akitaonrails

TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Embed Size (px)

Citation preview

Page 1: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

PREMATUREOPTIMIZATION

The Root of ALL Evil

@akitaonrails

Page 2: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

@akitaonrails

Page 3: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 4: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 5: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 6: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 7: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Rubyconf Brasil 2016 – September 23 - 24

Page 8: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Rubyconf Brasil 2016 – September 23 - 24

Page 9: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

September

23 - 24 @rubyconfbr

Page 10: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

PREMATUREOPTIMIZATION

The Root of ALL Evil

@akitaonrails

Page 11: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 12: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

“Premature Optimization is the Root of All Evil”

- Don Knuth

Page 13: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 14: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 15: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

SPA e-commerce

Page 16: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 17: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

SPA e-commerce http://www.loja.com.br/#!/produtos/item-001

Page 18: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

SPA e-commerce http://www.loja.com.br/#!/produtos/item-001

http://www.loja.com.br/?_escaped_fragment_=/produtos/item-001

Page 19: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

High Level Numbers

Page 20: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Client #1

Page 21: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 22: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 23: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 24: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 25: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

$ 4,000

Page 26: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

$ 4,000 ($ 7 MI/yr revenue - 0.68%)

Page 27: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Client #2

Page 28: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 29: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 30: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 31: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

$ 100,000+

Page 32: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

$ 100,000+ ($ 800 MI/yr revenue - 0.15%)

Page 33: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 34: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

Page 35: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

• USD 1000 - Cloud Services

Page 36: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

• USD 1000 - Cloud Services

• USD 3000 - 1 Developer

Page 37: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

• USD 1000 - Cloud Services

• USD 3000 - 1 Developer

• USD 4000 - 1 “Responsible” (Manager, Marketing, etc)

Page 38: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

• USD 1000 - Cloud Services

• USD 3000 - 1 Developer

• USD 4000 - 1 “Responsible” (Manager, Marketing, etc)

• Total: USD 8.000/month (USD 96.000/year)

Page 39: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

• USD 1000 - Cloud Services

• USD 3000 - 1 Developer

• USD 4000 - 1 “Responsible” (Manager, Marketing, etc)

• Total: USD 8.000/month (USD 96.000/year)

• Minimum Business Requirement:

Page 40: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

• USD 1000 - Cloud Services

• USD 3000 - 1 Developer

• USD 4000 - 1 “Responsible” (Manager, Marketing, etc)

• Total: USD 8.000/month (USD 96.000/year)

• Minimum Business Requirement:

• Revenue: > USD 2 MI / year

Page 41: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Minimum IT Cost:

• USD 1000 - Cloud Services

• USD 3000 - 1 Developer

• USD 4000 - 1 “Responsible” (Manager, Marketing, etc)

• Total: USD 8.000/month (USD 96.000/year)

• Minimum Business Requirement:

• Revenue: > USD 2 MI / year

• IT Cost / Revenue ratio: < 5%

Page 42: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 43: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Increase Revenue >

Lower Costs

Page 44: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 45: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Open > Proprietary (prefer “Best of Breed”)

Page 46: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 47: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Cloud > On-Premise (Infrastructure/Platform as a Service)

Page 48: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 49: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 50: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 51: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 52: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 53: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 54: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

SaaS > IaaS (avoid doing yourself)

Page 55: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 56: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 57: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

SEO & SEM (should not be Astrology!)

Page 58: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 59: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• /do/you/have/friendly/urls?

Page 60: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• /do/you/have/friendly/urls?

• sitemap.xml?

Page 61: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• /do/you/have/friendly/urls?

• sitemap.xml?

• Proper HTTP 301 Redirections?

Page 62: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• /do/you/have/friendly/urls?

• sitemap.xml?

• Proper HTTP 301 Redirections?

• Social Network buttons?

Page 63: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• /do/you/have/friendly/urls?

• sitemap.xml?

• Proper HTTP 301 Redirections?

• Social Network buttons?

• Periodic ORIGINAL CONTENT publishing?

Page 64: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• /do/you/have/friendly/urls?

• sitemap.xml?

• Proper HTTP 301 Redirections?

• Social Network buttons?

• Periodic ORIGINAL CONTENT publishing?

• No duplication duplication of content content?

Page 65: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• /do/you/have/friendly/urls?

• sitemap.xml?

• Proper HTTP 301 Redirections?

• Social Network buttons?

• Periodic ORIGINAL CONTENT publishing?

• No duplication duplication of content content?

• THEN OK!

Page 66: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 67: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

I.

II.

III.

IV.

V.

VI.

VII.

VIII.

IX.

X.

XI.

XII.

Codebase One codebase tracked in revision control, many deploys

Dependencies Explicitly declare and isolate dependencies

Config Store config in the environment

Backing services Treat backing services as attached resources

Build, release, run Strictly separate build and run stages

Processes Execute the app as one or more stateless processes

Port binding Export services via port binding

Concurrency Scale out via the process model

Disposability Maximize robustness with fast startup and graceful shutdown

Dev/prod parity Keep development, staging, and production as similar as possible

Logs Treat logs as event streams

Admin processes Run admin/management tasks as one-off processes

Page 68: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 69: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 70: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

y = x * 320

Page 71: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

y = x * 320

y = (x << 8) + (x << 6)

Page 72: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 73: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• NO Test Suite with below 70% coverage

Page 74: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• NO Test Suite with below 70% coverage

• NO CodeClimate below 3.0 rating

Page 75: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• NO Test Suite with below 70% coverage

• NO CodeClimate below 3.0 rating

• NO source code file with hundreds of LOC

Page 76: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• NO Test Suite with below 70% coverage

• NO CodeClimate below 3.0 rating

• NO source code file with hundreds of LOC

• NO COPY AND PASTE EVERYWHERE!!!

Page 77: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• NO Test Suite with below 70% coverage

• NO CodeClimate below 3.0 rating

• NO source code file with hundreds of LOC

• NO COPY AND PASTE EVERYWHERE!!!

• NO functions with more than 1 page down

Page 78: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• NO Test Suite with below 70% coverage

• NO CodeClimate below 3.0 rating

• NO source code file with hundreds of LOC

• NO COPY AND PASTE EVERYWHERE!!!

• NO functions with more than 1 page down

• NO table with dozens of fields

Page 79: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• NO Test Suite with below 70% coverage

• NO CodeClimate below 3.0 rating

• NO source code file with hundreds of LOC

• NO COPY AND PASTE EVERYWHERE!!!

• NO functions with more than 1 page down

• NO table with dozens of fields

• NO hours to clone, setup and deploy!!

Page 80: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 81: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Spree: 68k LOC 40k are Specs! (60%)

Page 82: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Magento2: 300k LOC 127k are Specs! (< 30%)

Page 83: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 84: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

Maintainability

> Performance

Page 85: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 86: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 87: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

PRIORITIES!

Page 88: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 89: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 90: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 91: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 92: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 93: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 94: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• SQL N+1 Queries

Page 95: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• SQL N+1 Queries

• Too much SQL

Page 96: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• SQL N+1 Queries

• Too much SQL

• Too much SQL LIKE instead of Elastic

Page 97: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• SQL N+1 Queries

• Too much SQL

• Too much SQL LIKE instead of Elastic

• Lack of proper SQL indexes

Page 98: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• SQL N+1 Queries

• Too much SQL

• Too much SQL LIKE instead of Elastic

• Lack of proper SQL indexes

• Too much unused code that was not removed

Page 99: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• SQL N+1 Queries

• Too much SQL

• Too much SQL LIKE instead of Elastic

• Lack of proper SQL indexes

• Too much unused code that was not removed

• No CDN or proper HTTP Cache invalidation headers

Page 100: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• SQL N+1 Queries

• Too much SQL

• Too much SQL LIKE instead of Elastic

• Lack of proper SQL indexes

• Too much unused code that was not removed

• No CDN or proper HTTP Cache invalidation headers

• Too much synchronous work that should be async jobs

Page 101: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

No Metrics No Optimization

Page 102: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 103: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

- Alan Kay

Page 104: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

“Make it Work

- Alan Kay

Page 105: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

“Make it Work Make it Correct

- Alan Kay

Page 106: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

“Make it Work Make it Correct Make it Fast

- Alan Kay

Page 107: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

“Make it Work Make it Correct Make it Fast Make it Cheap”

- Alan Kay

Page 108: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 109: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 110: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 111: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 112: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 113: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

You != Unicorn (nor Facebook, Google, Amazon, etc)

Page 114: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

“Casa de Ferreiro, Espeto de FERRO!”

Page 115: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 116: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

Page 117: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

• “Best of Breed” Open Source

Page 118: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

• “Best of Breed” Open Source

• SaaS > PaaS > IaaS > On-Premise

Page 119: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

• “Best of Breed” Open Source

• SaaS > PaaS > IaaS > On-Premise

• SEO & SEM =~ Astrology

Page 120: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

• “Best of Breed” Open Source

• SaaS > PaaS > IaaS > On-Premise

• SEO & SEM =~ Astrology

• Maintainability > Performance

Page 121: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

• “Best of Breed” Open Source

• SaaS > PaaS > IaaS > On-Premise

• SEO & SEM =~ Astrology

• Maintainability > Performance

• PRIORITIES!!

Page 122: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

• “Best of Breed” Open Source

• SaaS > PaaS > IaaS > On-Premise

• SEO & SEM =~ Astrology

• Maintainability > Performance

• PRIORITIES!!

• No Metrics, No Optimization

Page 123: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

• Increase Revenue > Lower Costs

• “Best of Breed” Open Source

• SaaS > PaaS > IaaS > On-Premise

• SEO & SEM =~ Astrology

• Maintainability > Performance

• PRIORITIES!!

• No Metrics, No Optimization

• You != Unicorn

Page 124: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

PREMATURE OPTIMIZATION is the Root of all Evil

Page 125: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal
Page 126: TDC2016SP - Otimização Prematura: a Raíz de Todo o Mal

THANKS!www.codeminer42.com

@akitaonrails