Over the years, the Shutterstock development team has grown from two people to almost twenty today. We’ve tried to maintain a consistent development culture during that time because it provides a spirit that makes us want to be here and keep getting better at what we do.
A while back we decided to see if we could write down a few core principles that we stand for. What we came up with is our “Developer Ethos.” We do our best to uphold it and look to it for guidance.
It’s a living document that we like to re-visit and update. Here’s its latest incarnation.
Get feedback as early as possible, and work together
- discuss design, implementation, approach, etc.
- get feedback from developers, product managers, QA, end users
- feedback mitigates risk that we’ll get too far off course
- working together consistently produces better ideas, better code
- sharing encourages us to write code we’re proud to show
Prefer encapsulated, loosely coupled systems for core functionality
- loose coupling means you’re only solving one problem at a time
- it’s a good sign if we can release the code on CPAN
- as with unix command line utils, firefox extensions, etc, less is more
Choose the smallest implementation that provides a way forward
- if we need to iterate, we’ll iterate—let’s solve the problem first
- “a way forward” is a key part of this ethic—avoid creating tech debt, and think about what’s good for the business in the long-run
- think incrementally, develop incrementally, deploy incrementally (this is harder than it sounds—challenge yourself to break things up into smaller pieces)
- diffs should be comprised of core functionality changes
- smaller implementations mean less testing, fewer bugs
- if a similar problem has been solved before, reuse that solution
- if we need to refactor, let’s, but separately from new functionality
Make your code readable, understandable, maintainable
- optimize for humans reading your code, then for performance
- name variables carefully, be explicit, write comments
- a wise man once said, “write for someone who’s not as smart as you”