- understand fundamentals
- can create and destruct abstractions easily
- deliver whole, working products. This means design, code, and deployment, the whole shebang
- always knows the next step in debugging
- switching between technologies really easily
- best practices are automatic (simplify, commenting, naming)
- architecting large systems
- being able to quickly understand other people's code
- communicate technical to nontechnical
- being curious and staying informed about new technologies/frameworks/best practices
- being able to write lots of code
- being able to write lots of code fast
- work effectively with other engineers
- estimating timelines in the right ballpark
- knows what's valuable and what's not
- do both quicky, dirty hacks and robust, elegant solutions
- knows when to do which
What Makes a Great Software Engineer
October 03, 2022