Implementation
#BestPractices and #GuidingPrinciples for implementing anything in code.
When writing code, it's important to know our general philosophy as a software company, and where the software itself fits in with the bigger picture.
Code exists to serve our product, which exists to serve our customers and users. In other words, our overall priorities as a software company go in the following order:
- Customer / user
- Product
- Code
Put another way: A technical solution that fixes an issue for a real user is far more important than one that is merely technically elegant or “good.” “Done and deployed” is always better than “unfinished but elegant.”
To drive this point home: we are not pursuing technical perfection. We're pursuing perfection of the customer's experience. Code is the means by which we most often get there, but it's not the only way.
With that in mind, it's helpful to follow some guidelines:
In general, take the shortest route possible. This doesn't mean doing things the wrong way, or writing bad code in the name of getting something done. Rather, it means that you should pursue the simplest solution first, even if it doesn't cover 100% of use cases.
What is simplest? It's whatever accomplishes our product and customer goals without excessive re-architecting, unneeded complexity, etc. If a solution has technical shortcomings but accomplishes our product and customer goals (without harming them), it is a good solution.
For any shortcomings, you should note them in commit messages and task trackers, and create new tasks (attached to the original task) to address any issues later, if needed. But, today: ship it.
Solve for today's problems before solving for tomorrow's. It's important to keep our long-term vision in mind whenever developing something new. But your priority should always be to solve user problems that exist today before solving hypothetical ones that might exist tomorrow. Prepare for inevitable change and eventual gotchas as much as possible — but don't let it keep you from shipping complete solutions today.
Keep the big picture in mind. Before starting a task, it's important to know what the product and customer goals are, so you can make the right development decisions on your own. Knowing what our priorities are will help you determine what's important or not, what to focus on, and when you're finished. We hold all team members to this high standard, so everyone is aligned on our mission of building some of the best software products in the world.
If you're ever unclear about the larger vision, goals, and strategy, ask us until everything is clear. If you don't understand why we're doing something, making certain decisions, etc., then that's a failing on our part.