Como desarrollador front-end, tu principal responsabilidad es la de implementar la interfaz final sobre la cual van a interactuar los usuarios. Esto no es simplemente traducir un PSD a HTML y CSS, sino que es pulir la interacción con el usuario y establecer los criterios necesarios para que la UX sea lo mejor posible, creando todo desde las adaptaciones responsive hasta esos pequeños detalles (como animaciones sutiles y una excelente performance) que hacen que una interfaz pase de muy buena a excelente.
Para esto tomamos en cuenta nuestro punto de partida, que es la etapa de wireframing y diseño. En lo posible, es conveniente que te involucres temprano en el proyecto para asegurarte de que el diseño de UI/UX puede ser llevado a cabo correctamente, al igual que poder chequear el costado técnico del proyecto para marcar las cosas que hay que tener en cuenta antes de comenzar con la implementación.
...esos pequeños detalles hacen que una interfaz pase de muy buena a excelente.
Cuando termina esta etapa de diseño, ahí sí es necesario crear un pequeño documento que establezca los detalles a tener en cuenta sobre la implementación:
- ¿Cuál es el target de browsers y dispositivos? Verificá esto con las especificaciones del trabajo.
- ¿Cómo son los :hover, :active y animaciones del site? Trabajá codo a codo con los diseñadores para llegar al mejor resultado posible.
- ¿Hay componentes que tengan un funcionamiento particular? (Headers fixed, fondos con parallax, transiciones de elementos).
- ¿Cuánta libertad hay para modificar el diseño? Esto es importante en sitios donde se espera una representación pixel-perfect del diseño, por más complejo que sea. Si este es el caso, y hay que hacer un cambio, asegurate de comunicárselo al Project Manager para que no haya malentendidos.
- ¿Qué va a hacer el cliente con esta implementación? ¿Es conveniente crear una estructura que después permita adaptarla a otra app/plataforma?
- ¿Esto va sobre un framework (CodeIgniter, Laravel, Symfony, Rails, Django, etc) o sólo hay que entregar el HTML? Es conveniente en lo posible trabajar sobre la implementación final, ya que aceleramos el trabajo de integración.
- ¿Hay algún requerimiento en lo que refiere a tecnologías? Por ejemplo, usar Angular, alguna versión de jQuery en particular, evitar elementos de HTML5, entre otras. Documentalas apropiadamente para que se conozcan las restricciones del proyecto.
- ¿Cómo va a ser la integración final con el producto? ¿Quién se encarga de los merges y subida a producción?
- ¿Hay algún estándar de código que haya que seguir?
- ¿Cómo hacemos para avisar que un entregable está listo? Si tenemos un repositorio compartido con el cliente es posible que haya malentendidos de cuáles cosas están listas y cuáles no. Establecé apenas empiece el proyecto una metodología para avisar (cerrando tickets en Basecamp con un comentario que notifique al cliente, por ejemplo) para saber qué cosas se pueden dar por hechas. Recordá siempre la revisión final antes de confirmar un entregable.
Nuestras reglas principales
Performance es una feature
Queremos 60FPS. Esto es nuestra guideline principal a cumplir en nuestros dispositivos de referencia. Si tenés que usar varios polyfills, filtros lentos o plugins/componentes que arruinan el rendimiento de la interfaz (reflows excesivos, no aprovechar el GPU, etc) probablemente termines con una implementación lamentable.
La única excepción que podemos tener a esta regla es si existe un motivo artístico lo suficientemente importante como para reducir nuestro target a 30FPS. Por ejemplo, el sitio de JSConf 2014 o el de Xapo notarás que sacrifican performance en pos de conseguir un resultado visual impactante.
Prolijidad ante todo
Nuestras guidelines son muy simples: Usamos UTF-8 para todo, tabulado con 2 espacios, y casi siempre tomamos como base una recipe de yeoman (webapp es de las más populares internamente). Trabajamos en inglés a menos que haya una excepción para el proyecto (como este manual :P).
Tratá de que el código sea claro y modular, usando bower para dependencias y aprovechando SASS y partials para dividir el código en módulos lógicos. Como regla general no te repitas, y asumí que quien va a trabajar con vos en el proyecto es un asesino serial que sabe dónde vivís.
Show and Tell
Usamos Pull Requests para hacer una revisión de código antes de dar por finalizada una feature. De esta forma damos lugar a que nuestros compañeros de equipo puedan asegurar que se están cumpliendo nuestros estándares de calidad, al igual que nos otorga un segundo punto de vista para detectar problemas con el código.
Asimismo, en features complejas es conveniente que todos se sumen para testear y dar insights valiosos, los cuales pueden discutirse y corregirse antes de terminar cada objetivo.
Test, Test, Test
Chrome no es el único browser que existe. Desde el costado visual, nuestros estándares de compatibilidad son muy simples y sólo lleva unos minutos verificar que el funcionamiento de una interfaz es apto para la mayoría de los usuarios. A medida que aumenta la complejidad del proyecto, es recomendable incorporar unit tests y visual regression tests. Los tests no son tanto para ver si lo que acabás de terminar está bien. Es para enterarte si lo rompiste después.
Testeá siempre antes de enviar un entregable. De lo contrario te las vas a ver con un Project Manager iracundo.
En desktop, como política general soportamos las dos últimas versiones estables de los browsers principales (Chrome, Firefox, IE, Safari). Asimismo, todos nuestros sites son responsive con soporte mobile por defecto. Nuestra computadora de referencia es un Core i3 con 8GB de RAM y un GPU integrado (esencialmente una Macbook/Notebook/PC de gama media).
En mobile, dada la mayor variación y disponibilidad de hardware, tomamos como base los dispositivos de referencia de iOS y Android, que son los iPhone y Nexus disponibles comercialmente durante los últimos 12 meses, incluyendo sus sistemas operativos. Esto significa actualmente iPhone 5/6/6Plus (iOS 7 y 8) y Nexus 5/6 (Android 4.4 y 5).
Estos estándares son una guía general y deben evaluarse por proyecto para garantizar un excelente resultado final. Analizá las características del sitio en la etapa de análisis para no tomar una decisión dogmática -y seguramente incorrecta-. Recordá que no podemos ofrecer una excelente UX si la mayoría de usuarios no puede usar el sitio/app.
Además de esto, van las consideraciones que tomamos para todo proyecto.
Siempre trabajá con un repositorio
Tenés la posibilidad de crear repositorios propios (bajo el team Aerolab) en BitBucket. Creá uno (o sumate al existente) al comenzar cada proyecto y hacé commits + push frecuentemente, ya que no sólo sirven de backup, sino que tienen tooling que utilizamos con mucha frecuencia.
Usá nuestro sistema de deployment automático siempre que puedas, que te va a permitir mostrar en qué venís trabajando en un branch específico, sin necesidad de pelearte con SSH o FTP.
Usá Git Flow
Git Flow es una metodología que nos permite trabajar con mayor comodidad en un repositorio. Dale una leída al documento, pero lo que tenés que saber es lo siguiente: Usá siempre branches para nuevas features y fixes (feature/redesign), los cuales se mergean a dev para testearlos y recién una vez testeados los mandamos a master.
Comentá las cosas "raras"
Uno siempre termina usando un hack para resolver alguna issue de compatibilidad, o bien termina implementando una feature compleja de corrido sin escribir un sólo comment. Dejá un comentario explicando brevemente la solución o el porqué de la misma para evitar traumas futuros. Si no lo hacés, seguramente te des cuenta de que el código que escribiste es confuso en el momento de la code review.
Documentá todas las especificaciones
Esto viene del primer punto y consiste en responder todas esas preguntas (y las que surjan aparte) documentadas en un Text Document en Basecamp. Tenelo como referencia ante cualquier duda y si hay una consulta, efectuala por Basecamp (con copia al Project Manager / CTO / Lead Developer) para que quede guardada tanto la pregunta como la respuesta del cliente.
Evitá las entregas parciales
Usualmente los clientes asumen que lo que obtienen es una representación clara del trabajo final, y entregar cosas a medias no queda bien (termina en listas interminables de feedback que se responden con “todavía no está hecho”). Sólo entregá cosas finales y aprobadas, y si tenés que hacer una entrega parcial de todos modos, definí con mucha precisión qué cosas están listas para que sólo se evalúe eso.
Pedí la opinión de otro dev
A uno siempre se le escapan cosas o termina haciendo cosas por impulso. Siempre está bueno consultar con otra persona cada tanto para que le pegue un vistazo al trabajo a medida que va avanzando. Es algo que sólo lleva unos minutos y eleva notablemente la calidad del trabajo final, ya que terminás tomando experiencia prestada de alguien que por ahí ya se topó con el mismo problema antes.