In my first three years at Genius, I introduced lots of software, templates, and guides to improve the design, handoff, and implementation processes.
I introduced Sketch and Origami, and created a library of components, plugins, and data files to make rote tasks easier. This transformed mockups at Genius from rough illustrator files with lots of cropped screenshots and duplication, to high fidelity mockups and prototypes that take less time to make.
Using a plugin to quickly populate a list of real songs into a mockup.
Using Sketch templates and a library of symbols decreased project startup time, gave us more fine-grained control over every element, improved each mockup’s consistency with the real product, and made it easy to hand off a project to another designer.
As the engineering and mobile teams grew, the design team was less and less likely to implement its designs. I introduced Zeplin and Origami to improve the way we communicated our design choices to other teams.
Even the simplest Origami prototype is a whole level above a static mockup from Sketch.
Zeplin saved us a ton of time and gave app developers better specs than we ever did manually.
Origami allowed us to spend more time in the design phase figuring out how things should behave, and gave us a great preview tool on iOS so interactive prototypes could be passed around at meetings, before implementation ever began.
A few months after I started, we released a new brand and design. Behind the scenes, we also overhauled the song page front-end with Angular and a new approach to CSS.
I introduced a variant of BEM syntax and wrote a styleguide detailing how to do everything from order properties to organize files. When I started, Genius’ CSS was hard to reuse, nested under body classes, and used to enforce permissions by showing or hiding page elements. I pushed to move logic and high-level states out of CSS and into JS, and now Genius’ CSS is highly componentized and reusable.
component_namecomponent_name-descendantcomponent_name-descendant-descendantcomponent_name--modifiercomponent_name-descendant--modifierimports/z_index_variables.scss.z_index() mixin.z_index_variables and end its name with _context._x_variables.scss or _y_mixins.scss.@mixins, %extends, or $variables, otherwise they’ll render their contents as many times as they’re imported.imports/_helper_mixins.scss doesn’t indicate the role of its contents very clearly, and imports/_song_page_padding_variables.scss is too specific and can’t be reused._leaderboard.scss should style the .leaderboard component and all its modifiers and descendants.mobile/_leaderboard.scss to mobile/_mobile_leaderboard.scss.mobile/_leaderboard.scss, desktop/_leaderboard.scss, and shared/_leaderboard.scss — in these cases, the shared version should be the master reference, with the platform-specific overrides/additions being as small as possible.