> For the complete documentation index, see [llms.txt](https://hanfak.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanfak.gitbook.io/workspace/career/senior.md).

# Senior Dev capabilities

* Understand the in and outs of the language (not just frameworks);
* Understand everything about the framework they use and this includes:
  * Development and release process;
  * Known bugs;
  * They should have, at least once, made a PR with a bug fix to that repo;
  * Awareness and basic understanding of competitors;
* Understand everything about the build & release process of their application;
* Understand how a backend REST api works;
* Depending on the application, they should be able to design a CI/CD pipeline
* Solid understanding of OOP principles;
* Solid understanding of Functional principles;
* Solid understanding of unit and integration testing (coverage >= 80%);
* Databases understanding, at least understand how an ORM works and know the most common DB concerns
* Doing code review and writing code every day.

## Skills

### The Ability to Deliver Bug-Free Code Quickly and Consistently

* Deliver\
  – Things actually get finished, and to spec – often exceeding the spec to cover scenarios the spec writer hadn’t considered.
* Bug-Free\
  – QA and customers have a very tough time finding bugs in their code. When they do, it’s usually minor and a painless and/or quick fix.
* Quickly
  * This is perception based, but generally technical and non-technical staff agreed it was “Quickly done”.
* Consistently
  * Management considered the pace of delivery predictable, which is not the same as “the same”. Management could develop a good sense of when to expect work depending on the phase of the project, volume of meetings, quality of specs, etc.

### The Inability to Be Bullshitted

* “Bullshit” comes in many flavors on a software development project:
  * Laughably incomplete, inconsistent, and/or non-existent specifications
  * Hilariously unrealistic deadlines
  * Tragically incompetent co-workers

### The Ability to Explain “Why”

* A junior engineer cannot explain why they are doing what they are doing in the way they are doing it.
* A mid-level engineer has justification for some of their actions/approaches but not all.
* A senior engineer knows exactly why they are doing everything they do, and can explain the rationale of their choices in exhaustive detail
* makes them good coaches and mentors to other members of the team.

### Complete Technology Agnosticism

* understand the technology of today is not the technology of tomorrow, and that “hot” technology never stays hot
* sophisticated method of evaluating new and old technologies that examines the technology from a wide array of angles
  * What problems does the technology solve better than other solutions?
  * Where did the technology come from?
  * What is the switch cost to, and away from, the technology assuming it is adopted?
  * How ready is the organization to adopt this technology?
  * What is the learning curve for this technology?
  * How readily can we find staff who know this technology?
  * Is there commercial support for this technology?
  * What is the anticipated life-span of this technology?
* lead them to reject “hot” technologies in favor of ones that are tried-and-true.
* to push for unproven technologies because of how well they solve a particular problem
* there is a methodology of this evaluation, not simply a desire to learn or not learn something new.

### A Process to Estimate Work

* As long as time and money are constraints for a project, work estimates will be required during the planning progress
* extremely difficult
* accuracy is not the goal of the estimate, so much as predictable margins of error.
* if you are within 30% of your estimate you are doing a good job estimating.
* senior engineer views estimates as a difficult challenge to be surmounted, and as a result will normally ask for dedicated time simply to come up with the estimates.
* will not give an off-the-cuff estimate even if their job is on the line, as they understand the dire consequences of a “guesstimate”

## Key actions

* write documentation that is useful

## Types

* The All ‘Rounder
* The Code Whisperer
* The Earth Mover
* The Domain Expert

## What comes next?

* Staff
* Engineering maanger

## Links

* <https://medium.com/better-programming/the-differences-between-a-junior-mid-level-and-senior-developer-bb2cb2eb000d>
* <https://dottedsquirrel.com/better-developer/the-marks-of-a-true-senior-developer/>
* <https://www.colbyfayock.com/2020/05/what-is-a-senior-developer-and-how-can-i-become-one>
* <https://dzone.com/articles/the-rise-and-fall-of-a-senior-developer-8>
* <https://building.echo.co.uk/posts/on-being-a-junior-engineer/>
* <https://jg.gg/2020/11/23/are-you-a-senior-developer/>
* <https://frontside.com/blog/2016-07-07-the-conjoined-triangles-of-senior-level-development/>
