As a general rule of thumb, we will not unnecessarily scale our engineering team. Small teams are more productive, competitive. Everyone in the team knows their role and everyone wants to work with competitive people. In small team it is easier to understand/rectify the issues and resolutions are easier too. We believe that engineering teams don't always need a manager, as everyone in the team is competitive enough to manage themselves.
For year 2024, Team Ehsaan will have the following three roles. We can improve as the engineering team scales. For a small engineering team up-to 10 people, this seems like an ideal hierarchy.
Role | Description |
---|---|
Engineer | Creating solutions to business problems |
Senior Engineer | Handling most complex parts and mentoring |
Engineering Lead | He may handle people management aspects |
Every role will have the following three parameters that each peer in the team will be working:
(re-phrase)
- Skills
- Engagement
- Coachability -- Every resource is coachable at any given ladder and is either coaching or being coached at the same time.
- Typically 0-2 years of experience
- Capable of working on smaller, tightly scoped and routine problems that could include minor bug fixes.
- Proficient in basic language and framework features. Basic understanding of design patterns and approaches in the code-base.
- Demonstrates curiosity by digging into the why behind certain decisions and prioritizes their own development to meet their goals.
- Has basic knowledge of baseline tools e.g. Git, IDEs, Terminal etc
- Participates in delivering simple bugfixes end-to-end.
- Has a habit of communicating proactively about their work and blockers.
- Actively seeks help to unblock themselves.
- Demonstracts good work management with regular guidance. Able to understand priorities of daily work against project needs.
- Work needs detailed reviews on a regular basis.
- Receives constructive feedback with an open and growth mindset.
- Typically 2-6 years of experience
- Capable of working on clearly defined features from start to shipping.
- Proficient in advanced language and framework features. Fully understands design patterns and approaches in the code-base. Consistently writes high quality code.
- Demonstrates proactive problem-solving, consistently enhancing code quality and leaving a lasting positive impact, while also being a go-to resource for peers seeking advice and contributing to the team's professional standards.
- Effectively utilizes our primary tools for daily tasks, adeptly diagnosing issues and optimizing performance, showcasing a deep understanding and proficiency in leveraging these tools in all circumstances.
- Demonstrates ability to handle or triage many production issues. Can be relied upon to lead the resolution of bugs or minor incidents related to their work or area of expertise.
- Presents pull requests that demonstrates competency with standard patterns and principles, but may require oversight from senior peers. Provides actionable feedback across team pull requests by junior developers and peers.
- Provides technical advice and suggestions during planning/scoping.
- Actively seeks help to unblock themselves.
- Prioritizes tasks and project work with little direction. Works confidently and effectively, persists when faced with uncertainty or ambiguity but pulls in support when needed. Contributes more broadly to planning within the team.
- Work is reviewed with some back and forth and the occasional need for material direction or implementation changes. Trusted to review non-critical pull requests to clarify style, readability, performance issues. Makes material contributions to documentation: features, procedures, runbooks.
- Provides context and clarity to the engineering organization by producing and maintaining documentation.
- Receives constructive feedback with a growth mindset. Provides specific, well-considered feedback within area of expertise, when asked. Is able to disagree and commit.
- Typically 6+ years of experience
- Acts as a subject matter expert on multiple systems. Makes strategic decisions around major components.
- Capable of working on smaller, tightly scoped and routine problems that could include minor bug fixes.
- Proficient in basic language and framework features. Basic understanding of design patterns and approaches in the code-base.
- Demonstrates curiosity by digging into the why behind certain decisions and prioritizes their own development to meet their goals.
- Has basic knowledge of baseline tools e.g. Git, IDEs, Terminal etc
TBD
TBD