Skip to content

Latest commit

 

History

History
126 lines (90 loc) · 7.74 KB

Senior_Developer_1.md

File metadata and controls

126 lines (90 loc) · 7.74 KB

Senior Developer I

💻 Tech

Expertise in our "core" languages and frameworks

  • You have a deep knowledge of one of our core languages (Ruby, JavaScript, Dart), including more rarely used parts. You have a solid understanding of at least a second one (Ruby, Javascript, Dart, Elixir)
  • You have a deep knowledge of the frameworks we use (Ruby on Rails, React, or Flutter), including some of the more rarely used parts.

Expertise in infrastructure and tooling

  • You have a deep understanding of the core technologies (like the HTTP protocol, relational databases, …).
  • You take responsibilities in the support channel and do deployments
  • You have a deep understanding of our infrastructure setup, and can participate in troubleshooting problems in this area.

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 learn new technologies or languages independently.
  • You are an expert in one or more technical areas and from that you have learned the tools and practices to explore new topics efficiently

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 developments related to our core technologies.

Write readable and maintainable code / solutions

  • Your PRs are of good quality on first try and require minimal feedback to be excellent.
  • You think of most of the edge cases and include tests for them
  • You often take the performance and security implications of PRs into account
  • You can justify your decisions and understand the trade-offs between different approaches.
  • You can break down a large technical problem into clearly defined tasks.

Managing technical debt

  • You are able to identify areas of the codebase in need of refactoring and come up with solutions.

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.

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.

🎯 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

💬 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 or 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.

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.

Help others succeed

  • Helping others is a 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.

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 actively influence our coding guidelines based on your experience from reviewing multiple PRs.

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 squad members (e.g. through whiteboarding)
  • You can come up with a workable technical design that solves the requirement
  • You involve your squad members in the discussion and encourage them to come up with solutions

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 within your squad or team, 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 members to clarify open questions
  • You work across teams (dev, QA, stakeholder) to ensure new code launches smoothly and user needs are met

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

🎓 Teaching / Coaching / Growing

Knowledge sharing

  • You can write down guidelines in an area that you have more knowledge than others.
  • You can deliver a knowledge sharing presentation when others ask you for it.

Mentor more junior colleagues

  • You can take the responsibility for an internship / traineeship. You set the short-term goals for the person, assign the tasks, and explain basic concepts.

Conduct interviews

  • You participate in our technical interviews as one of a few interviewers. You can evaluate answers to our standard questions.

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

  • You can deliver a full presentation at the local programming group.
  • You contribute to our engineering blog.