Skip to content

Latest commit

 

History

History
176 lines (135 loc) · 11.4 KB

Principal_Developer.md

File metadata and controls

176 lines (135 loc) · 11.4 KB

Principal Developer

Principal Developer is a technical leadership role, without people management responsibilities. This means that you are responsible for technical initiatives and you will be influencing your peers indirectly - by acting as a role model, sharing your knowledge, mentoring, and discussing/promoting changes to our code and overall team structure.

The promotion to this role is opportunity-limited. This means that in order to get promoted you need to possess the necessary skills and there has to be a need for a technical leader in the team.

💻 Tech

Expertise in our "core" languages and frameworks

  • You have deep knowledge of one of our core languages (Ruby, JavaScript, Dart), reaching to its internal workings. You have a solid understanding of at least a second one (Ruby, Javascript, Dart, Elixir).
  • You have deep knowledge of the frameworks we use (Ruby on Rails, React, Phoenix or Flutter), reaching to their internal workings.
  • You keep on top of the ongoing development of our core languages and frameworks and evaluate how we can best make use of their new features.

Expertise in infrastructure and tooling

  • You have a deep understanding of the core technologies (like the HTTP protocol, relational databases, ...) and know them enough to mentor team members.
  • You take responsibilities in the support channel and do deployments
  • You drive improvements to our tooling and infrastructure setup.
  • You keep on top of the ongoing development on our core technologies and evaluate how we can best make use of their new features.

Ability to explore and master a new technical topic

  • You are able to research a new library of substantial size / complexity and integrate it into our application.
  • You can debug a library that we use by analysing its code, open issues and submit PRs.
  • You can perform basic tasks in programming languages that you don't know when the situation requires that.
  • Your are able to research and evaluate new technologies efficiently and present their in-depth comparison to the rest of the team.

Know what else is out there

  • You are interested in how other companies are solving similar problems and comparing our solutions with theirs.
  • You keep on top of cutting-edge developments related to our core technologies and the wider industry.
  • You regularly bring technical innovations to the team and drive their integration into our applications.

Write readable and maintainable code / solutions

  • Your PRs are of very good quality on first try and usually don't require a lot of changes to be excellent.
  • You think of most of the edge cases and include tests for them.
  • You reliably take performance and security implications of PRs into account.
  • You think about the bigger picture when submitting PRs. You identify recurring patterns and start discussions about them.
  • You can justify your decisions and articulate the trade-offs between different approaches.
  • You can translate a business requirement into a concrete technical solution.

Managing technical debt

  • You regularly and actively identify areas of the codebase in need of refactoring and come up with solutions.
  • You regularly make judgments about priority of tasks, and the long-term health of the codebase.

Initiate positive change

  • You point out areas that need improvement and suggest good solutions as a starting point for discussion. You look for the best solution within the team.
  • You contribute to the long-term technical direction of our products and projects.

Source control

  • You know how to maintain multiple branches you work on, rebase a branch, squash commits.
  • You can troubleshoot git problems of your colleagues.
  • You have an understanding about git's internal data model, how commits are stored and linked together, how to configure hooks and other advanced features.

🎯 Self management / Focus

Look for and act upon feedback

  • When receiving feedback in a PR you react to it, learn from it and adjust your future development style based on it.
  • You proactively reach out to ask for feedback, for example after being squad coordinator for a season you ask your squad members for feedback.

Handling "being stuck" / time management / following through

  • You know when to take a step back and try a different approach vs having to dig deeper and learn more details
  • You realize when you need help or other opinions and ask your team members.
  • When you're not able to progress on one of your tasks (for example waiting for product answer or code review) you can switch to a different task.

Self reflection and continuous self improvement. Awareness of own strengths and weaknesses.

  • You have a clear idea of the topics you want to learn and you identify new topics to add to this from your work.
  • You easily acquire new knowledge.
  • You admit mistakes and learn from them.
  • You learn fast from your mistakes.

Following up on tasks

  • You keep a list of tasks delegated to you and follow up on them, organising your own time.
  • You are comfortable with handling tasks that span over multiple months and require multiple small steps to be completed.

💬 Communication & Collaboration

Interact well with team members

  • You are friendly and pleasant to work with. You can resolve most of the personal conflicts by yourself – by reaching out and suggesting a conversation.
  • You can help others resolve a conflict – for example by suggesting to move a discussion from a PR to a meeting by mediating.

Help improve our team process

  • You participate actively in our existing team processes by note-taking, scheduling meetings, and taking on action items from meetings. You document changes in our team process in Don't panic.
  • You offer suggestions to the wishes of others mentioned during a retrospective.
  • When you are not satisfied with some aspect of our team process you mention it during a retrospective, schedule and lead a meeting to resolve it.
  • You notice sophisticated process problems that span over multiple weeks. You can write down a proposal and present it to the rest of the team.

Interact well with business stakeholders / customers

  • When a task you're working on benefits from a direct contact with the person requesting the change, you are able to formulate questions, present a draft of the implementation and incorporate feedback into your solution.
  • You participate in our support duty. You can identify what the problem is by asking correct questions. You point out work-arounds and clarify any confusion about the behaviour of the system.
  • You can explain how a particular area of our system works to a colleague from another department.

Help others succeed

  • Helping others is the major part of your work day. You not only react to the help requests from your colleagues, but also actively search for the opportunities to help – within your squad, team or support team.
  • You often prioritise "unblocking someone" over your individual contributions.

Code Reviews

  • You deliver insightful code reviews. You can assess how the pull request fits into the bigger picture and spot major logic errors. You notice and suggest opportunities for refactorings. Your reviews are constructive and when you are not satisfied with some area you can help the author with implementing a better alternative.
  • You use code reviews as a tool to mentor your colleagues.
  • You can deliver a basic code review for a change outside of your area of expertise (for example different programming language).

Remote work

  • It doesn't make a difference to the rest of the team whether you're remote or not.

⏳ Project management

Translate a business requirement into a technical solution

  • You ask the right questions to explore the important edge cases of the requirement.
  • You notice where a new requirement conflicts with existing functionality or does not "fit well" with our software design and you suggest changes to the requirement to make it fit better and easier to implement.
  • You build a mental model of the problem and can communicate it to and discuss it with your team members (e.g. through whiteboarding).
  • You can come up with different approaches for technical designs and can judge and explain the tradeoffs.
  • You involve your squad members in the discussion and encourage them to come up with solutions.
  • You can lead the ideation and design of a feature together with colleagues from tech and non-tech teams.

Structure a large project into manageable parts / deliverables

  • You are able to take a large project and turn it into manageable smaller parts that can individually be tested and have clear boundaries.
  • You break projects down so that the parts have minimal interdependencies and provide releasable features early.

Risk management

  • You proactively detect problems and risks not only for your squad but also for the whole IT organization and communicate as well as mitigate them well.

Organize a squad and its deliverables

  • You take over the role of a squad coordinator frequently.
  • You organize stand up and planning meetings for your squad.
  • You keep track of the current progress of your squad and help your team member to clarify open questions.
  • You work across teams (dev, QA, stakeholder) to ensure new code launches smoothly and user needs are met.
  • You also follow the work of other squads. In case another squad is not on track you proactively help finding a solution.

Estimate and communicate progress and deadlines

  • You can come up with estimates on the complexity and duration of a feature.
  • You communicate progress proactively and express your concerns in case your squad is not on track.

Leading long-running tech-centered projects

  • You are able to compile convincing arguments or business case calculations to justify and promote long running projects.
  • You identify necessary big, longer running initiatives and promote solving them.
  • You initiate, prepare and lead these initiatives. You set the goals, identify the need for other people to help, organize their work. and your own time to see the project through to its success.

🎓 Teaching / Coaching / Growing

Knowledge sharing

  • You can write down guidelines in an area that you have more knowledge than others.
  • You actively identify areas where you hold the majority of the knowledge and schedule knowledge sharing sessions out of your own initiative.

Mentor more junior colleagues

  • You can take the responsibility for an internship / traineeship. You set both the short-term and long-term goals for the person, assign the tasks, and explain basic concepts. You can give feedback about the progress of the internship / traineeship.
  • You can establish a long-term mentoring scheme with another team member to help them acquire some skill.

Conduct interviews

  • You actively participate in our technical interviews, ask follow-up questions outside of our standard list and evaluate the overall performance of the candidate.

(bonus) Represent Liefery outside the company (e.g. Conferences)

  • You can deliver a presentation / lightning talk at a programming conference.
  • You contribute to our engineering blog.
  • You contribute to open source projects.

🏃‍♀️ Leadership

Role model

  • You are a role model for your colleagues. Your technical achievements inspire them to develop, learn from you, and help you in your projects.

Influencing without managing

  • You take responsibility for the engineering quality of our products, our code base and our tooling and you influence our product management or other departments by suggesting improvements.