The Applications team at Litmus is responsible for almost everything that is user-facing. We build for the web, primarily using Ruby on Rails, with a handful of other languages, tools and frameworks.
We hold certain beliefs and ideals that shape us as a team. While not an exhaustive list, these are some of the ones that have stood the test of time:
We believe in using the right tool for the job. We lean heavily on Rails and the traditional request/response web lifecycle for most of our work. That said, we reach for component frameworks like Vue when there's a clear benefit, and we've implemented full client-side MVC/SPA when the product demanded it.
We minimize barriers to shipping software. We're big fans of testing, using a mix of unit, request, and feature specs to provide good coverage at the right levels. We use those tests to protect ourselves from regressions and to bolster our confidence, and because of that, we're able to practice continuous delivery, using automated deploys to ship many times a day.
We are thoughtful, reflective, and always looking to improve. We work in the open, with strong opinions that are weakly held. We tinker and experiment with our processes and tools, and foster an inclusive, flat structure to encourage everyone to take ownership and improve the things they care most about. We leverage those as opportunities for individual career growth through increased responsibility and impact, improving our teams from the bottom-up.
There are certain traits and habits we look for and foster in our people. These aren't platitudes posted on the wall in some random boardroom; we practice them on a daily basis. They profoundly shape how we work individually and as a team, and have an outsized impact on our culture.
As a distributed team, communication is essential. We leverage the right medium for the task, employing a mix of written, asynchronous , and synchronous communication to share our ideas and progress. We also make liberal use of emojis to help convey tone. 🧂😁
Despite the talents and skill sets of our team members, we recognize that the best and most rigorous solutions come from collaboration. Being humble and open to feedback is how we foster that collaboration, level up our skills, and ship better products.
We believe that code reviews and automated testing allow us to move faster, with less risk. Maintaining proper test coverage allows us to rely on our CI/CD process, enabling us to ship changes to production many times a day.
We pride ourselves on shipping well-built, thoughtful solutions. When faced with competing priorities, we cut scope first, and when we can't address debt in the moment, we make plans to tackle it.
Rushing rarely leads to good work. We set expectations as a team, and we hold ourselves accountable to those. We treat uneventful releases as a sign of success; well-executed launches should only involve the flip of a switch.
We have lives outside of work, with benefits and a supportive culture to back it up. Our 28+ day vacation policy is explicit to encourage us to actually use that time. Bringing your best self to work only happens when you're fully recharged, and that means disconnecting — without guilt.
How We Work
Setting the tech aside and thinking about process, here's some insight into how we team up and execute on projects at Litmus:
While our departments are specialized around tech stack and their associated responsbilities, the primary team most engineers are working with on a day-to-day basis is their feature team. They're responsible for specific products and features at Litmus, based on a roadmap set by our product team. These teams are a multi-disciplinary, with engineers covering both the application and infrastructure stacks, a designer, product manager, and engineering manager. They have autonomy in deciding how their products and features are built, which involves regular collaboration with everyone on the team, as well as external stakeholders.
Most of our teams follow two-week development cycles. Some adhere to a scrum process, others use kanban; teams are free to self-organize however they see fit. Despite these variations, there are some common traits across all teams:
- kick-off documents/meetings when starting a new project
- weekly/bi-weekly planning meetings to organize for the short-term
- bi-weekly demos/retros to share what we've done, discuss what went well, and what could have gone better
- regular discussions about timelines, scope, and project feasibility bolstered by technical investigations
You're only as good as the company you keep. Our Applications team is a motley crew of talented developers with a diverse set of skills and backgrounds. Interested in working with us? We're hiring!
Adam Hynson Staff Software Engineer
Ana Castro Senior Software Engineer
Charlie Cook Senior QA Engineer
Chelsea Roston-Rappazzo Software Engineer
Chidi Ekuma Software Engineer
Chris Tucker Mear Senior Technical Program Manager
Daniel Grieve Senior Software Engineer
Eddie Cianci VP of Engineering
Jon Lyons Senior Software Engineer
Jordan MacDonald Director of Engineering
Leo Policastro Staff Software Engineer
Mark Connell Engineering Manager
Max Wolff Senior Software Engineer
Peter Aitken Principal Software Engineer
Rahim Packir Saibo Software Architect
Rob Ruder Staff Software Engineer
Saalik Lokhandwala Software Engineer
Sam Holton Principal Software Engineer