Loading...

Principles of Successful Software Engineering Teams

Bruno Miranda

VP Engineering at Doximity

Loading...

Problem

No team is created equal. Establishing tenets to guide software engineering teams is vital to their success.

Lessons Learned

1. Shared Code Ownership There's is no "my code" or "your code", it's our code and we are responsible and accountable, in 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 be responsible about limiting 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 choose to 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 going forward. These honest sessions allow for positive and negative feedback to flow thru the team in a respectful manner. Issues are then addressed as action items shortly thereafter.


Be notified about next articles from Bruno Miranda

Bruno Miranda

VP Engineering at Doximity


CommunicationOrganizational StrategyCulture DevelopmentTechnical ExpertiseTechnical SkillsProgrammingSoftware DevelopmentCareer GrowthCareer ProgressionSkill Development

Connect and Learn with the Best Eng Leaders

We will send you a weekly newsletter with new mentors, circles, peer groups, content, webinars,bounties and free events.


Product

HomeCircles1-on-1 MentorshipBounties

© 2024 Plato. All rights reserved

LoginSign up