No team is created equal. Establishing tenets to guide software engineering teams is vital to their success. What follows is a list of items highlighting important principles of a successful team’s philosophy.
1. Shared Code Ownership
There’s no “my code” or “your code”. It’s our code, and we are responsible and accountable for bad and good decisions.
2. Open Discussion Forum
No question is off the table; no question is a bad question. Be it via email, async chat, or any other medium. We strive to make everyone’s voice heard. Never hesitate to ask questions.
3. Work/Life Balance
The environment is fast-paced, but we choose to limit work hours to 40 hours per week. Burnout is a serious issue — with deep and long-lasting ramifications — we must avoid it.
4. Write Reusable Tools And Re-use
Writing reusable code takes more effort, more thought, and more time. This is precisely why it is worth doing. One-off tasks are easily thrown together, which makes them easy targets for sloppy and dangerous code.
5. Document, Document, Document
If you have to say something twice, it should be documented. We advocate using the Wiki religiously. When in doubt, search the wiki. The answer is probably there. If it’s not, find the answer and make sure to document it there.
6. Prototypes are Not MVPs
Be wary when building a prototype; if you have good reason to believe it will become an MVP, ensure it is built as such. MVPs are well-planned, estimated, tested, and designed from the ground up with a strong foundation for expansion. Prototypes are basic proof-of-concepts.
7. Leave Things Better Than You Found Them
Challenge the status quo; just because something was that way when you first saw it does not mean it should remain that way. Software is constantly evolving, and so should we.
Strive to not only clean up after yourself but to leave things in a better state than first encountered. Over time, software builds technical debt; it’s our duty to tackle the debt little by little, as we stumble upon it and pay it back.
8. Learn New Tools But Choose Wisely When To Use Them
Be wary of shiny toys. Understand that when building production-level software, we must be cautious of untested new technologies. Although we are eager to stay ahead of the curve and find the best tool for the job, we must adopt new technologies carefully.
9. Teach What You Learn
Don’t hoard knowledge. Share what you learn, even if you only think a few will be interested. We provide several channels for knowledge to be passed around, use them generously. Lunch & Learns are a great forum for knowledge sharing. Ensure you’re following best practices and practicing what you preach. By teaching others, you empower them to make their own decisions and solve problems on their own. Be mindful that people learn at different paces.
10. Learn From Mistakes and Adapt
Retrospectives allow us to look back, learn from our mistakes, and improve things in the future. These honest sessions allow for positive and negative feedback to flow thru the team respectfully. Issues are then addressed as action items shortly thereafter.