Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cosas que aprendes diseñando aplicaciones

Cosas que aprendes diseñando aplicaciones

Algunas de las lecciones aprendidas con veinte años diseñando aplicaciones. Opinionated stuff. Presentado durante la LechazoConf 2018.

Nacho Coloma

May 19, 2018
Tweet

More Decks by Nacho Coloma

Other Decks in Technology

Transcript

  1. Mi cuarto proyecto 2002 1996 Termino mi carrera. Diseño el

    software que gestiona los 43 aeropuertos de AENA en España.
  2. Mi cuarto proyecto 2002 1996 Termino mi carrera. Diseño el

    software que gestiona los 43 aeropuertos de AENA en España. Con 27 años, era el más joven de un equipo de 30 personas.
  3. Fast forward un par de años Banca para empresas, Tráfico

    marítimo, Tren de alta velocidad 2002 1996 Termino mi carrera Diseño el software que gestiona los 43 aeropuertos de AENA en España 2009
  4. Koliseo Primer producto 2002 1996 Termino mi carrera Diseño software

    para aeropuertos, tráfico marítimo y ferroviario, banca 2009 Éxi f as
  5. Producto != Proyecto Te implicas a largo plazo y creces

    con él Java tests 580 JavaScript tests 380
  6. El significado de full stack Java: SDK 1.1.7 – 8,

    JEE, Junit, TestNG, JRebel, Jackson, GSON, Guava, Joda Time, Swing - Java (DI): Spring, Guice, Dagger, AOP - Java (Persistence): Objectify, JDO, JPA, MyBatis, Hibernate - Java (Build tools): Gradle, Maven, Ant - Java (Integration): Protobuf, JMS, JAX-RS, JAX-WS, Retrofit, Cloud Endpoints Java (Web): Jersey, JAX-RS, Mustache.java, Spring MVC, JSF, Struts, Struts Action 2, JSP, Tag Files, Ehcache, OSCache, Selenium - Java (Server): Jetty, Tomcat, Weblogic, Websphere, JBoss, Geronimo - Web: HTML5, CSS3, Sass, LESS, Chrome Web Insights, WebPageTest, Bootstrap, Foundation, SVG - JavaScript (client-side): ECMAScript 6, jQuery, Zepto, Backbone, Handlebars, React.js, Require.js, Browserify, Underscore, Lo-Dash, QUnit - JavaScript (server-side): node.js, npm, Bower, ECMAScript 6, Promises, jspm, Gulp, Grunt, Express, Mongoose, Google Closure Compiler, Uglifyjs, Jade, JSHint - Server-side ruby: Jekyll, Live-Reload Google Cloud Platform: App Engine (GAE), Compute Engine (GCE), Cloud Storage (GCS), BigQuery, Cloud Datastore, Cloud SQL, Identity Toolkit, Cloud Endpoints, Container Engine (GKE), Docker, Ansible, Kubernetes, Memcache - Android: Dagger, OkHttp, Picasso, Retrofit - Databases: Google Cloud Datastore, MongoDB, Redis, MySQL, Postgres, Oracle, H2 / hsqldb, LDAP - Security: Oauth, OAuth2, OpenID, Webseal, Tivoli Access Manager, Spring Security - Project Management: Scrum, Kanban, Agile, XP, Critical Chain - Version Control: Git, Subversion, Mercurial - IDE: Eclipse, IntelliJ IDEA, Sublime Text Editor 2/3, Atom, Vim - Other: Apache 2, Stripe
  7. El significado de full stack Java: SDK 1.1.7 – 8,

    JEE, Junit, TestNG, JRebel, Jackson, GSON, Guava, Joda Time, Swing - Java (DI): Spring, Guice, Dagger, AOP - Java (Persistence): Objectify, JDO, JPA, MyBatis, Hibernate - Java (Build tools): Gradle, Maven, Ant - Java (Integration): Protobuf, JMS, JAX-RS, JAX-WS, Retrofit, Cloud Endpoints Java (Web): Jersey, JAX-RS, Mustache.java, Spring MVC, JSF, Struts, Struts Action 2, JSP, Tag Files, Ehcache, OSCache, Selenium - Java (Server): Jetty, Tomcat, Weblogic, Websphere, JBoss, Geronimo - Web: HTML5, CSS3, Sass, LESS, Chrome Web Insights, WebPageTest, Bootstrap, Foundation, SVG - JavaScript (client-side): ECMAScript 6, jQuery, Zepto, Backbone, Handlebars, React.js, Require.js, Browserify, Underscore, Lo-Dash, QUnit - JavaScript (server-side): node.js, npm, Bower, ECMAScript 6, Promises, jspm, Gulp, Grunt, Express, Mongoose, Google Closure Compiler, Uglifyjs, Jade, JSHint - Server-side ruby: Jekyll, Live-Reload Google Cloud Platform: App Engine (GAE), Compute Engine (GCE), Cloud Storage (GCS), BigQuery, Cloud Datastore, Cloud SQL, Identity Toolkit, Cloud Endpoints, Container Engine (GKE), Docker, Ansible, Kubernetes, Memcache - Android: Dagger, OkHttp, Picasso, Retrofit - Databases: Google Cloud Datastore, MongoDB, Redis, MySQL, Postgres, Oracle, H2 / hsqldb, LDAP - Security: Oauth, OAuth2, OpenID, Webseal, Tivoli Access Manager, Spring Security - Project Management: Scrum, Kanban, Agile, XP, Critical Chain - Version Control: Git, Subversion, Mercurial - IDE: Eclipse, IntelliJ IDEA, Sublime Text Editor 2/3, Atom, Vim - Other: Apache 2, Stripe
  8. “Full Stack” La versión resumida • Server side code •

    Client side code: web and mobile • Database: SQL or noSQL • CI/CD
  9. La foto completa • Server side code • Client side

    code: web and mobile • Database: SQL or noSQL • CI/CD Y también • IaaS / PaaS / CaaS / Serverless • Networking, Load Balancing, CDN • Logging / Monitoring / Alerting. • Security • Legal: GDPR, Safe Harbor, MCCs • Big Data / Reporting • Machine Learning • HA y Disaster recovery
  10. SLA “Hope is not a strategy” -- SRE motto at

    Google • SLO (Service Level Objective): El porcentaje de disponibilidad que fijas como objetivo de tu sistema. • SLA (Service Level Agreement): Un SLO externo que incluye penalizaciones si no se cumple. • Ejemplo: SLA de 99.9% al mes con un SLO interno de 99.95%.
  11. SLA • SLO (Service Level Objective): El porcentaje de disponibilidad

    que fijas como objetivo de tu sistema. • SLA (Service Level Agreement): Un SLO externo que incluye penalizaciones si no se cumple. • Ejemplo: SLA de 99.9% al mes con un SLO interno de 99.95%. ◦ 99.9% = 8h ◦ 99.95% = 4h ◦ 99% = 3d
  12. Los múltiples niveles de un bug Arregla el problema, no

    el mensaje de error NullPointerException en producción: • ¿Por qué ha fallado? • ¿Puede darse en producción? • Si es así, ¿podemos tener una excepción más correcta? • Si no es así, ¿podemos tener un error más inteligible? • Y por supuesto, arreglar el error
  13. Listados vacíos En su lugar, puedes hacer onboarding, introducir conceptos,

    enlazar con la ayuda, amenizar la página. 15 Instancias de <EmptyView>
  14. La última milla La vida de un requisito: añadir el

    género de un ponente • Implementar el género: masculino, femenino • Filtrar por género
  15. La última milla La vida de un requisito: añadir el

    género de un ponente • Implementar el género: masculino, femenino • Filtrar por género • Test unitario del filtro
  16. La última milla La vida de un requisito: añadir el

    género de un ponente • Implementar el género: masculino, femenino • Filtrar por género • Test unitario del filtro • Géneros adicionales: Otros / No especificado
  17. La última milla La vida de un requisito: añadir el

    género de un ponente • Implementar el género: masculino, femenino • Filtrar por género • Test unitario del filtro • Géneros adicionales: Otros / No especificado • Qué pasa con los datos existentes • Qué pasa si echo atrás este cambio • Compatibilidad hacia atrás del API
  18. La última milla La vida de un requisito: añadir el

    género de un ponente • Implementar el género: masculino, femenino • Filtrar por género • Test unitario del filtro • Géneros adicionales: Otros / No especificado • Qué pasa con los datos existentes • Qué pasa si echo atrás este cambio • Compatibilidad hacia atrás del API Última milla • Documentar la funcionalidad • Anunciar la funcionalidad: blog post, tweet • Cambiar el avatar por defecto • Genderize.io
  19. • Ayuda completa • Casi mil tests unitarios • Onboarding

    en listados vacíos • Loading placeholders • 100% proofread • Deuda técnica pagada • Performance! • Aplicación de control de accesos para mobile • Cuatro proveedores de OAuth 2.0 Todas las métricas “on fire” Much WOW. So awesome.
  20. You are not the customer Koliseo ha sido nuestro mayor

    éxito y nuestro mayor fracaso. Cuesta lo mismo construir el producto correcto que el producto equivocado. Photo credit: Startup Vitamin
  21. Algunos números 500 propuestas de charla x tres minutos por

    charla = 25 horas = 3 días Montar la agenda de Codemotion solía tomar un mes entero a jornada completa Tres días invertidos sólo en cambios de última hora 160 avatares que poner en tamaño cuadrado es un dolor
  22. Detectar demanda Poner las charlas con mayor interés en salas

    con mayor capacidad Big Data Superpowers
  23. Progressive Web Application Filtrar charlas y soporte offline en el

    navegador, disponible en Chrome, Firefox, Safari y Edge
  24. Feedback bienvenido A día de hoy hay más de 8.700

    entradas de feedback en koliseo.com
  25. La medida del éxito Cambiar una charla desde la cena

    de ponentes, la noche antes del evento. De pie, desde el móvil. Photo by Bundo Kim on Unsplash
  26. Qué hemos aprendido Producto no es proyecto, aquí el mérito

    técnico no lo es todo. Valida tu idea. Build something people wants.