Engineering Competencies
What does doing well mean for engineers at startups or otherwise?
Most startup leaders dismiss codifying competencies as a frowned upon big company practice, while operating with similar models informally in their heads. While I agree that it may be an overkill when you are pre product-market-fit (PMF), it becomes a high ROI activity as you hit the pedal for growth after achieving PMF. A little effort early on in your journey will pay dividends in the long run. You will spend less time and energy to get your team to row in unison, which means more time to delight your customers.
It is not so much about getting the perfect list defined for eternity, rather a snapshot of what matters the most for your organization at a point in time. Add, remove or replace as you grow and evolve — just don’t change them every month.
My goal was to lay out a simple set of competencies to help engineers visualize their successes and growth, and align them with the needs of our organization. The only other requirement for me was to keep the list short, so everyone could remember them by heart. If they didn’t, it wouldn’t have mattered.
My leads and I used these competencies as anchors to provide tangible feedback to engineers every quarter. As an added bonus, I observed that it made the performance review conversations objective, smooth and quick. Engineers walked away with a clear understanding of their strengths and areas of growth.
With that said, let’s go!
Competencies
The points under each competency are provided to help with contextualizing the competency, not meant to be used as a checklist.
Code
- You write efficient readable code. Your code is well documented with thorough test coverage.
- You are responsive to code review feedback and learn from them. You provide timely code reviews, finding functional and style issues.
- You proactively and effectively debug and fix problems in the team’s codebase.
- You own end-end delivery of your code from design, code, test, and deployment. You maintain code once it is live and improve it over time.
- You are mindful of any technical debt you are taking on and propose plans to address it.
- You seek out, learn in depth and promote industry best practices and standards (reactjs, code profiling, perf optimizations, django, sql, etc.,)
- You prefer to use tried and tested libraries / frameworks where necessary rather than reinventing the wheel.
Execution
- You deliver high quality software at a consistent, predictable and fast pace.
- You break down projects into smaller tasks which are easier to complete and parallelizable.
- You effectively manage time and know when to ask for help to unblock yourself.
- You take ownership of your projects, collaborate with relevant stakeholders to gather technical requirements and create plans of action.
- You proactively communicate progress and status with relevant stakeholders, and peers.
- You anticipate roadblocks and have strategies to de-risk timelines.
Design & Architecture
- You evaluate pros and cons of different approaches to deliver efficient and maintainable solutions.
- You produce architectures with clean interfaces, scalable and extensible components.
- You are responsive to design feedback and learn from them. You provide design feedback keeping broader product architecture and design in consideration.
- You make reasonable and conscious tradeoffs between short term results and building for the long-term. Short term decisions are made with a clear understanding and consensus, with an eye towards solving the needs of our users and market as quickly as possible.
- You demonstrate deep understanding of users/customers and design/build solutions to solve customer needs.
Collaboration
- You actively seek code and design feedback. You provide constructive, respectful and actionable feedback during code and design reviews.
- You work well with peers across different functions (Design, Product, Ops, and others).
- You develop your junior team members to grow their skills. You jump to help unblock your peers.
- You give and solicit feedback graciously, both reinforcing and redirecting to continuously improve yourself and the entire team.
Citizenship
Citizenship is about going above and beyond to improve your organization. This can take different shapes and forms, whether it is about cleaning up the code base, starting new initiatives, defining interview practices, etc.,
- You help with recruiting new members on our team, improving the recruiting process.
- You onboard and mentor new team members, and help to proactively shape and evolve the culture of our organization.
- You leave things in a better state than you found them in code/documentation and enable others to leverage your work.
- You make your team more efficient with automation, improving processes and technology that slow everyone down.
- You share knowledge and domain expertise with others.
That’s it. Hope this helps as a starting point when you want to set expectations with your engineering teams.
P.S. I put together these competencies while I was running engineering at a growth stage startup. Over the next few weeks and months, I’ll plan to share more such constructs I had put together during my previous stints.