Skip to content

Latest commit

 

History

History
76 lines (36 loc) · 5.54 KB

File metadata and controls

76 lines (36 loc) · 5.54 KB

What's a Super Developer

Context

This is a list of characteristics that the ultimate developer might have. It’s written in the second person to motivate you and feel personal, but it’s unlikely that you’ll ever achieve it all. This means you can spend your career working on it, if you want 🙂.

It started when I spent some time trying to define what a "senior developer" is. This term is historically associated with a description like this, but due to title inflation, companies today would typically (and ironically) give a person with these characteristics a more "senior" title. Additionally, I received the feedback that almost no-one achieves all those points. And that’s OK. This is therefore the description of a "Super Developer", something any developer with any title should strive towards.

I welcome feedback. You will probably think of things to add. That’s great. I would especially welcome points to delete, or combine. The more you list, the more you have to list. Especially under technical excellence, I guess that could be endless.

You're oriented to growth rather than status

  • You're humble and self-reflective. You admit knowledge gaps and acknowledge mistakes.

  • You seek feedback. You encourage constructive criticism from any direction (junior/senior). You address rather than avoid conflict.

  • You want to learn. You try to learn from everyone. You see mistakes and tricky situations as learning opportunities to be discussed openly, and extend the same “permission to fail” to others.

  • You want others to learn, so you help them however you can, such as advising, pair programming, conducting code reviews, giving talks. This desire influences your execution of all other activities.

  • You want others to grow, so you promote a culture where people can succeed. You delegate, trust, cheerlead, and support team members. You share the spotlight.

  • You consciously embrace ideas from others in an attempt to fight not-invented-here syndrome and the natural bias against change.

You're social and dependable

  • You communicate effectively with people of different knowledge backgrounds and levels of understanding via varying mediums (face-to-face, email, etc).

  • You are organised and dependable. You read and answer messages, arrive punctually, do promised jobs, you don't "forget" things.

  • You can be trusted to represent our company in front of the customer.

  • You demonstrate empathy: You try to understand others' viewpoints and put yourself in the shoes of those you interact with. You respect that others can have different viewpoints.

  • You're proactive. You solve problems and create value because you see a need, not because you were asked to. You act outside your official area of responsibility. Left alone, you can be productive for long periods of time.

  • You challenge and disagree in a helpful manner, including towards authority. You're not known for complaining in the background, but rather for addressing the elephant in the room, asking uncomfortable questions directly and making concrete suggestions for improvement.

  • You criticise the work of others sparingly, instead making your high standard tangible through example.

  • You understand the importance of psychology and emotion in team productivity. Maybe you're even fun to be around 🙂.

You seek technical excellence

  • You fight for simplicity. You reduce complexity, abstract appropriately and understand the value of doing less. You think YAGNI and hack together solutions which are "good enough for now".

  • You build for future software maintainers. You care about naming, make decisions understandable, work to reduce cognitive load and document as appropriate.

  • You depend on tests for your daily work. You practice TDD some of the time, apply different levels of test, understand testing compromises and can reason about the optimal amount of tests for the business case.

  • Everywhere you go, you aim to improve things and create value - the scout rule.

  • You invest in efficiency: you seek optimal paths and ruthlessly eliminate or automate non-value-add work steps, seeking efficiency, reliability and job satisfaction.

You understand where the money comes from

  • You build for business value: you see technology as a means of creating profit for the business, not an end in itself. You have at least some concept of how business, and in particular your company, runs.

  • You are product and customer-focused: you seek the link between your work and customer value, enabling you to question proposals and suggest alternative approaches.

  • You are outcome-focussed: you know why you are in a given meeting, writing a certain message, or assigned to a particular project. You participate to serve that goal.

  • You take on unspectacular but necessary work, because you value the outcome.

  • You fight for lean e2e delivery everywhere. You find ways to do get smaller packages of work to the customer sooner and more frequently, despite those around you wanting to "optimise" by working in big chunks.

  • You take responsibility for the full business life cycle of your software. You don't just code tickets, you deal with load spikes, launches, migrations and security issues.

People want to work with you

  • You ace the one key metric which perhaps sums it all up: "the degree to which other people want to work with you is a direct indication on how successful you’ll be in your career as an engineer. Be the engineer that everyone wants to work with." - John Allspaw