Don't Feed The Zombies!

63
DON’T FEED THE ZOMBIES! Ernesto Tagwerker @etagwerker

description

Don't feed the zombies! How to maintain zombie projects in the land of the walking dead. A brief talk about how to build "quality software" and save zombie projects.

Transcript of Don't Feed The Zombies!

Page 1: Don't Feed The Zombies!

DON’T FEED THE ZOMBIES!

Ernesto Tagwerker @etagwerker

Page 2: Don't Feed The Zombies!

MEET THE ZOMBIES

Page 3: Don't Feed The Zombies!

¿Cuántos zombies conocés?

Page 4: Don't Feed The Zombies!

Nuestro mundo está lleno de

zombies

Page 5: Don't Feed The Zombies!

ERNESTO TAGWERKER

Co-Founder @ Ombu Labs

Page 6: Don't Feed The Zombies!

1. Construimos

2. Construimos PMVs

3. Mantenemos zombies

Page 7: Don't Feed The Zombies!

Mantenibilidad no es algo sexy

Page 8: Don't Feed The Zombies!

Node.js, Clojure, Scala,

etc.

No es

Page 9: Don't Feed The Zombies!

Aún así es más importante

Page 10: Don't Feed The Zombies!

¿Qué es la calidad?

Page 11: Don't Feed The Zombies!

“Que cumpla con los requerimientos”

Page 12: Don't Feed The Zombies!

Calidad (ISO 9126)

• Funcionalidad • Confiabilidad • Usabilidad • Eficiencia • Mantenibilidad • Portabilidad

Page 13: Don't Feed The Zombies!

1. Funcionalidad

ISO 9126

Page 14: Don't Feed The Zombies!

2. Confiabilidad

ISO 9126

Page 15: Don't Feed The Zombies!

3. Usabilidad

ISO 9126

Page 16: Don't Feed The Zombies!

4. Eficiencia

ISO 9126

Page 17: Don't Feed The Zombies!

5. Mantenibilidad

ISO 9126

Page 18: Don't Feed The Zombies!

6. Portabilidad

ISO 9126

Page 19: Don't Feed The Zombies!

Cómo construir software

mantenible

Page 20: Don't Feed The Zombies!

Paradigmas de programación

Page 21: Don't Feed The Zombies!

Diseño orientado a objetos

Page 22: Don't Feed The Zombies!

Patrones de diseño

Page 23: Don't Feed The Zombies!

TDD is not dead

Page 24: Don't Feed The Zombies!

Testing

Page 25: Don't Feed The Zombies!

Experiencia

Page 26: Don't Feed The Zombies!

Un problema real

Page 27: Don't Feed The Zombies!

Tu próximo proyecto

Page 28: Don't Feed The Zombies!

“Si igual yo no lo voy a mantener”

Page 29: Don't Feed The Zombies!

Deuda técnica

Decisiones pobres

Page 30: Don't Feed The Zombies!

Menos tests

Deuda técnica

Page 31: Don't Feed The Zombies!

Menos mantenible

Menos tests

Page 32: Don't Feed The Zombies!

0 tests

Page 33: Don't Feed The Zombies!

“El código tiene

calidad”

Page 34: Don't Feed The Zombies!

Alternativas

Page 35: Don't Feed The Zombies!

“Mata a ese zombie”

Page 36: Don't Feed The Zombies!

“Noooooooo”

Page 37: Don't Feed The Zombies!

Mantener o no mantener

Page 38: Don't Feed The Zombies!

Culpa del otro desarrollador

Page 39: Don't Feed The Zombies!

The sleepless developer

Page 40: Don't Feed The Zombies!

Cómo convivir con un zombie

Page 41: Don't Feed The Zombies!

Crear tests de integración

Page 42: Don't Feed The Zombies!

describe 'the homepage' do it 'should not explode' do visit '/home' expect(page).to have_content 'Welcome!' endend

Page 43: Don't Feed The Zombies!

Configurar integración continua

Page 44: Don't Feed The Zombies!

• Travis CI • Circle CI • TDDium (Solano Labs) • Codeship

Page 45: Don't Feed The Zombies!

Run flog

Page 46: Don't Feed The Zombies!

ombushop$ flog -g .! 24226.6: flog total! 9.7: flog/method average!! 2511.0: Admin total! 87.7: Admin::TaxonsController#update_before ./app/controllers/admin/taxons_controller.rb:59! 79.1: Admin::ApplicationHelper#show_wizard? ./app/helpers/admin/application_helper.rb:114! 60.3: Admin::VariantsController#create ./app/controllers/admin/variants_controller.rb:92! 48.7: Admin::OrdersController#update ./app/controllers/admin/orders_controller.rb:24! ...!

Page 47: Don't Feed The Zombies!

dinero_mail_ipn$ flog -g .! 584.9: flog total! 8.0: flog/method average!! 189.1: TestDineroMailIpn total! 62.7: TestDineroMailIpn::context(when I query the Dinero Mail API via GET)::should#return OK with 1 payment ./test/test_dinero_mail_ipn.rb:20! 62.7: TestDineroMailIpn::context(when I query the Dinero Mail API via GET)::should#return OK with 2 payments ./test/test_dinero_mail_ipn.rb:43! 19.2: TestDineroMailIpn::context(when I query the Dinero Mail API via GET)::should#return Error for the query ./test/test_dinero_mail_ipn.rb:66!

Page 48: Don't Feed The Zombies!

Code Climate

Page 49: Don't Feed The Zombies!
Page 50: Don't Feed The Zombies!
Page 51: Don't Feed The Zombies!

Divide and conquer

Page 52: Don't Feed The Zombies!

OmbuShop

Page 53: Don't Feed The Zombies!

OmbuShop

Admin

Core

Jobs Ayuda

Router

API

Page 54: Don't Feed The Zombies!

CSS

Page 55: Don't Feed The Zombies!

CSSutilities

quarks

atoms

molecules

pages

Page 56: Don't Feed The Zombies!

CSS Utilities

• _clearfix.scss • _reset.scss • _grid.scss • _mixins_ombu.scss

Page 57: Don't Feed The Zombies!

CSS Quarks

• _lists.scss • _paragraphs.scss • _tables.scss

Page 58: Don't Feed The Zombies!

CSS Atoms

• _errors.scss • _buttons.scss • _forms.scss

Page 59: Don't Feed The Zombies!

CSS Molecules

• _marketing_footer.scss • _navbar.scss • _dialog.scss

Page 60: Don't Feed The Zombies!

CSS Pages

• _marketing_jobs.scss • _marketing_partners.scss • _admin_products.scss

Page 61: Don't Feed The Zombies!

Conclusión

Page 62: Don't Feed The Zombies!

Further Reading

• http://12factor.net/

• http://en.wikipedia.org/wiki/ISO/IEC_9126

• http://blog.codeclimate.com/blog/2013/08/07/deciphering-ruby-code-metrics/

• http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612

• http://www.amazon.com/Extreme-Programming-Explained-Embrace-Edition/dp/0321278658

• http://www.smashingmagazine.com/2013/08/02/other-interface-atomic-design-sass/

Page 63: Don't Feed The Zombies!

¡Gracias!Ernesto Tagwerker

@etagwerker