An incomplete list of skills senior engineers need, beyond coding
skamille.medium.com
skamille.medium.com
This list should also include: How to admit you don't know something as a senior engineer and learn from junior engineers who are closer to the new technologies.
As a junior engineer I found that I respected senior engineers more when they asked me to teach them something they didn't know.
As a senior engineer I feel like I get a lot more respect from the junior engineers when I just admit, "I don't know that can you teach me more or point me at some good resources?". For that matter, I get a lot more respect from other senior engineers when I give them exactly the same response.
Very true! And if they see senior engineers asking questions, they will hopefully feel more comfortable doing the same.
If you're pretty junior, or you work with a lot of loudmouths, you might need to turn the volume up higher to make sure you're listened to. If you're senior, or talking to a group of people more junior than you, you can get away with being a lot softer with your words. (And you often should, to avoid intimidating the juniors). And its not really about volume. Its about your word choice.
Low volume: "Hm, that sounds ok but I'm worried about performance."
High volume: "This will be unworkable because of performance problems. We need preliminary benchmarks, or a plan for solving those problems before we can move ahead."
(For reference: I've been paying my bills with code for a good 20 years now.)
I've learned 80% of what I know about Javascript, Typescript and React from one dude on my team who was freshly out of university. The dude was (and still is) a damn genius at that stuff.
If he doesn't burn out by overreaching, he'll be a legend by 2025 =)
We literally took away his work laptop and disabled his office key access so he wouldn't work during his summer holidays :D
I have decades of experience, but there’s often stuff I can learn.
Here’s an example: I have developed an SDK, with heavy documentation, but I have found that written docs aren’t actually very useful, as no one reads stuff anymore.
So a new engineer on my project showed me Postman. Before, I’ve used far humbler REST explorers. In turn, I showed him Charles Proxy.
I’ve actually gone way beyond what he needed with it, because it’s a great tool.
It is not a 100% replacement for my docs, but it will help a lot.
I can develop an architecture that is way beyond anything he can do, but it’s worthless, if he can’t write stuff that uses it.
A line from another article posted to HN today I remembered is:
"An API without a reference implementation and command-line client is called a gray box."
I totally agree with that. If your API/SDK has an easy way for me to copy/paste some code or command line examples to "play" with it, I'm about 1000% more likely to take it seriously.
In hindsight, I guess it's sort of forgivable given his age. The topic probably wasn't even invented yet so he couldn't have learned about it in school.
Not everyone learns the same terms for the same concepts. Maybe you should be a little more accepting that not everyone had the same education you did.
"That operation is O(n log n)"
"Sure, but that operation doesn't happen on every loop, the entire algorithm is still O(n)".
However, language for concepts evolves with time, and younger programmers shouldn't assume that older programmers don't know a concept because they learned it by a different name. (Though they might not know the concept).
I remember seeing production code slow to a crawl once because of that one. It wasn’t long after I’d left university, where I’d studied CS but the lectures on complexity theory had seemed quite theoretical at the time. Suddenly, here was a vivid example of how it could cause a problem in practice, in a situation as everyday as putting some text in a UI. The solution — using a string builder — then led me to several other principles about choosing an efficient internal representation for data and it being OK not to convert that data into its “true” form until you’re ready to use it. I suppose I should thank whoever made the original mistake, because despite causing a frustrating afternoon with a profiler, it also created several lightbulb moments early in my career.
"All science is either physics or stamp collecting." -- Ernest Rutherford.
I suspect there are many people who understand the Big-O, Omega, Theta, and Little-O implications (the physics) but might not have heard the term "constant time amortized" (the stamp collecting).
(Not that knowing accepted names is bad, it's much much easier to communicate when everyone shares a set of terms that they agree on the meaning of...)
My graduate level algorithms class used average or probabilistic cost, but never the term amortized.
A constant time operation has bounded runtime for every input, but an amortized constant time operation can allow for much longer runtimes so long as they happen sufficiently rarely. Concretely, doing an amortized constant time operation N times should be O(N).
Why not use actual statistics jargon at that point?
Sometimes we need to realize that the reactions of people inside of the software community are almost purely due to their own personal (usually social) insecurities and are not worth addressing.
We have an entire thread giving credibility to someone who absolutely idiotically dismissed another person for not knowing the meaning of a single word.
The person who was temporarily ignorant of the meaning of that word is not the one I am thinking needs to be ignored here.
Insertion is O(1) (constant time), most of the time.
But once in a while the collection will need to increase the size of the underlying array, which causes the entire table to be reorganized. That specific insertion will then be O(N) (where N is the size of table). The good news is that this reorganization happens only once every N insertions.
So amortized insertion is O(1), even if in the worst case it can be O(N). Depending on your use case you can hand wave the worst case away with "amortized it's constant time", or you can choose a tree instead, for a more predictable O(log N), or you could use some other mitigating tactic, like initializing your hash table with enough storage _for all use cases_ so you can guarantee O(1).
I suggest that you consider whether it’s possible that other people know the same concept under a different name and don’t write them off as quickly if they don’t know your favorite term.
I am surprised at how blithely you assume the terminology you learned at your particular college is universal, and how parochially you seem to look down on people just because they don't share that particular terminology.
So my advice would be don't be too quick to judge people based on assumptions you make about them.
Definitely! This is something I do a lot and love to do. I’m excited when i realise “oh, rather than reading and reading in this topic - I can ask (a person who happens to be junior) if they’re not too busy”.
Everyone learns off everyone the whole time.
And often the interactions themselves are the teachers. My mind was blown when a particularly bright child asked me what's the difference between a dream and reality. The best I could come up with is that this 'reality' has a larger continuity and is the one that people in this large continuation agree to call 'real'. I don't know what I could have said if he mentioned a recurring dream with a continuing state. I did say that boils down to a label assignment in case it that should ever come up.
This makes reality a social phenomenon, beyond just physics. For example, institutions are a reality because many people believe in them; the police don't go away when criminals stop believing in the law.
If you get enough people to believe in your dream, it can become real, self-sustaining. Neil Gaiman wrote a nice short story, taking the idea literally - A Dream of a Thousand Cats.
To be more verbose, by "institution" I mean stable, recurring patterns of behaviour (much like https://en.wikipedia.org/wiki/Institution), which isn't that far off of the continuity point made by the parent.
We were having a regular status call and since the meeting finished early there was a general chit-chat happening.
That is when we started talking about "iphone" and our boss innocently asked "what is iphone" (it had been on the market for a year since its first launch)
We started looking at each other in disbelief. But we knew this about her. She used to openly ask in a meeting without shame on things she did not know. But once she understood something she use to process that info very well.
The team really adored her because she was so good in other managerial things (like defending team, good rapport with individuals, planning, etc).
Back story was that all her time was spent with her 2-3 kids leaving no time for other things.
Not always the case, but when you see people pushing heavy, runtime-script languages full of ambiguity to modernize an old simple compiled code base, it's hard to do the wait and see and show 2 years later to the juniors: "see your lombok spring thing is now absolutely unmaintanable when all it does is 3 multiplications"
It s often a balance since nobody likes change, junior like senior, and often both sides have their crap.
“Whaaaaaaaaaat you never heard of that, its so popular, everyone’s into this”
I just wait patiently and stare, maybe an occasional “ah, mmm”
and then eventually say “so can you tell me about it”
and really the answer is no, most people can’t articulate themselves and provide filler instead
it’s usually in relation to anything someone is passionate about, or an assumption they have that supports their passion. such as a social norm or ideal, not just engineering
In the cases where I've been welcoming new individuals into teams it has always been made clear to them by me that there are no stupid questions, everything can be challenged if the argument for it can be made and that I don't know everything and wont/can't come up with all the ideas (ie they could very likely come up with a good idea to a hard problem).
In my experience this has really made it a pleasant experience to introduce new developers (fresh from uni or new to the code base/domain) to the product and team.
Just for context, in the country I reside in there isn't this emphasis on titles in the software space, and as such I am not a formal senior dev at my company. I believe I would have that title if living in a country where such distinction were normal.
> How to give up your baby, that project that you built into something great, so you can do something else
This is the only way to really scale oneself, while growing others in the process. Hanging on to a project indefinitely can rob you of an opportunity to tackle bigger, more challenging problems. It's so easy to get stuck on a comfortable track, feeling like (and probably being) an indispensable subject matter expert, while the bigger fish get away, often without being aware of them or having the necessary bandwidth to even consider their existence. This, in my mind, is one of the big differences between a senior and a staff engineer (where such distinctions exist).
I highly recommend this article on "giving away your Legos": https://review.firstround.com/give-away-your-legos-and-other.... Have shared it with many senior engineers that were looking to grow to the next level.
Oh, and +1 to the author's book "The Manager's Path". Best one I've seen for anyone looking to go down that road.
Mind you, I also try to use ADRs (architecture decision records), which basically force me and others to think about and defend a decision - something I've always missed in any project I've been in.
"A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects."
For conversation, I offer this image as to why reinventing the wheel may be necessary:
https://res.cloudinary.com/practicaldev/image/fetch/s--X_6jM...
In the last few centuries, we have reached a critical mass of scientific and technical knowledge where any further advances require a tremendous amount of specialization. There's no way or point in fighting tthat.
I am wondering how humans may or may not understand this point regarding their self-described "life's purpose".
Legit wondering upon myself.
1. How to run a meeting, and no, being the person who talks the most in the meeting is not the same thing as running it
2. How to propose a solution, take feedback, and drive it to resolution, in a reasonable period of time
3. How to mentor an early-career teammate, a teammate, a new manager who needs advice
4. How to indulge a superior who wants to talk about stuff that they don’t really understand, without rolling your eyes or making them feel stupid
5. How to explain a concept behind closed doors to a person too embarrassed to openly admit that they don’t understand it
6. How to influence others to use your solution instead of their own
7. How to get others to do something for you by asking for help in a way that makes them feel appreciated
8. How to lead when needed, even if you don't have direct authority
9. How to get others to listen to your ideas without making them feel threatened
10. How to listen to others’ ideas without feeling threatened
11. How to give up your baby, that project that you built into something great, so you can do something else
12. How to teach others to care about the things you really care about
13. How to communicate with others that have shared vested interest
14. How to help superiors feel comfortable investing in long term goals
15. How to accomplish small things that lead to larger things
16. How to craft a proposal, socialize it, and get buy-in to execute it
17. How to repeat yourself enough that people start to listen
18. How to pick your battles
19. How to help someone get ahead in life
20. How to get information about what’s really happening (how to gossip, how to network)
21. How to find interesting work on your own, instead of waiting for someone to bring it to you
22. How to tell someone they’re wrong without making them feel ashamed
23. How to take negative feedback gracefully
See what I did there?
(edit: formatting)
Much better books in this space are "The Making of a Manager" by Julie Zhuo and "Elegant Puzzle" by Will Larson. Both very insightful and actionable. The latter is a bit dense though.
Off the top of my head, in no particular order:
* How to keep learning and acquiring new abilities.
* How to recognize occasions to apply your development expertise to other types of problems (for example iteratively improve manual processes).
* How to fail fast. How to validate your ideas and make mistakes without taking a lot of resources. How to rapidly prototype solutions.
* How to divide and conquer complex problems. How to solve complex problems without knowing what you will arrive at at the end.
* How to recognize superfluous code and design.
* How to interview candidates and specifically leave your ego behind the door.
* How to be patient and persevere to long term initiatives of yours.
* How to recognize valid arguments and incorporate them in your solutions. How to change your mind.
* How to credit people for their influence and cooperation in your successes.
* How to be truly kind to other people.
* How to build trust between you and your peers and you and your managers.
* How to deal with difficult people.
* How to recognize you need help and seek it before it becomes a (bigger) problem.
* How to think big picture even in thick of things. How to deal with tactical without forgetting about strategy.
* How to take and manage notes. Even, and especially, when there is no time for it.
A senior doesn't have to be a leader.
Think of these as things which become critical after the engineer has mastered the skill of solving a hard problem.
There's only so much you can improve if the output is low. After all, if all your seniors spend their days managing, who does the actual coding? Juniors. And what happens with them after they've "mastered the skill of solving a hard problem"? They become seniors, stop coding and start teaching the next batch of juniors.
This seems like purposefully limiting the quality of the work, and increasing the time it takes.
> there becomes a point of diminishing returns in terms of pure engineering skill
It's quite surprising, if we think about it - software engineering is about as close as you can get to pure productivity multiplier. It shouldn't have diminishing returns, not so soon. It should have exponential returns. After all, the same skills that can be applied to a problem, can be also applied to a meta-problem of solving the problem faster.
By that town, all managers need to go do some technical work and get better at that.
Being mediocre at coding is fine if you can make up for it with other skills. Being downright bad is not.
Same thing for running meetings, writing passable English, being able to explain technical concepts to laymen and so on.
These are more lead developer skills.
#1 Running meeting and knowing how they work is a really good skill for every one to have
A lot of growth I've seen is about having people get opportunities to do things more commonly done by people at higher levels. While most design documents are written by seniors or above sometimes mid level/junior engineers get an opportunity to write one and all design documents get a lot of feedback anyway.
I was not familiar with the term, but useful concept. Reminds me of something I read recently about the “Goat”, the West Point cadet finishing at the bottom of his class.
Then you can see where in the first scenario you had to hire two people and only one in the second case, and in the second case you're getting even more additional value with your senior engineer doing partial manager-y things. So now the second individual is maybe 2x as valuable to the company as the first, and you can see it's a no-brainer for the company which to go with.
I don't think you can. You can be good developer and amazing and mentorship or social aspect. But if you are mediocre one, you can teach others what you dont know.
Is there a difference between a "senior engineer" and a "highly productive engineer with a long rap sheet of experience, that constantly feels like it's never enough"?
A lot of these are super redundant in my opinion.
If you boil them down I bet a lot of these would be mirrored in one living ones life in general. Some of them can be taught but so much more is earned by grit and experience.
I am not pooping on this site at all ... just remember everything in the modern world is made by a human hand. Frail and limited and built on billions of failed attempts. Life is iterative and unpredictable. It is a journey after all. Cruel and wide, with beauty written large everywhere in plain site.
Seniors should be technical enough to jump in if necessary and they should guide junior engineers as needed but execution is not the main focus of the role.
[0] The exceptions are generally people with deep expertise in domains where that's a rare attribute
At good companies, these two jobs run parallel, not one on top of the other. Management should be viewed as a sidegrade, not a promotion.
> How to influence another team to use your solution instead of writing their own
> How to give up your baby, that project that you built into something great, so you can do something else
> How to communicate project status to stakeholders
> How to convince management that they need to invest in a non-trivial technical project
> How to craft a project proposal, socialize it, and get buy-in to execute it
> How to get information about what’s really happening (how to gossip, how to network)
There is also PM work in there but that I would say hits a little closer to the senior engineer.
2. While the original post offers a nice list, my mental model on the topic is pretty simple: the higher the seniority, the more capable a person should be in strategic thinking (both technical and business), ability to successfully apply it to correspondingly larger scopes and impact (tasks -> features -> problems -> teams -> organization -> company -> industry -> economy), and soft skills.
When you broaden the scope enough, leadership takes over as a crucial tool. Not necessarily leadership in terms of management, but at least in terms of leading by example, thought leadership etc.
It’s near impossible to have company-wide (say of >200 people) impact without any kind of leadership.
Yeah I'd love to figure out how you do that. 99.9% of the time that is a cultural and political problem that you aren't going to solve by being some incredibly persuasive engineer. Oh and management won't care enough to intervene.
I think one of the things that a lot of these articles lack is something along the lines "Be clear about what you can acheive and what you can't". It doesn't matter how good your solution is, if the guy writing the replacement isn't receptive to advice that's fine, you've got better things to do.
- Actually be right -- it really is to the other team's advantage to use your solution.
- Find people on the other team receptive to the idea and talk to them. Informally, privately, in small meetings, and in large ones -- different settings will be appropriate in different social contexts.
- Have a lot of social capital already. In this context, what this means is have a reputation for getting the other team recognition and making them successful, working with them when they want to do things their way, and going out of your way to help individuals with their own (unrelated) projects.
- Put in all the work to make the advantage of your solution easy to see. Do the integration work for them, if you can. Set up a demo, if you can. Do the legwork, make the slides, do the research, solve their problems. Install it for them, if they'll let you!
- Shut up about your part in their subsequent success. All you ever wanted was for them to succeed, and they made a smart call, and that's the important thing.
At least that's the way I do it. :)
I once saw an extreme master of the technique use it to convince an entire team of 50+ people including engineers and two layers of management to change an existing piece of infrastructure (our change control system) to something better. He did it by meeting privately with every individual touched by the process, explaining the advantages and the costs, getting individual buy-in from each one. He then put together a presentation outlining the change and held a big meeting to review the proposal -- with all the people he'd already talked to, who privately were behind the idea but thought nobody had the power to change it. Once everyone saw that everyone was in, it was a done deal. And that's how you solve impossible political problems. :)
You answered your own question: Get better in the social/political/psychological sphere. Handling/tackling cultural and political problems is sort of a prerequisite to being a senior engineer. :-) This is sort of "standard career advice".
If you think going "political" is a betrayal of your values, then your thought process is part of the problem.
As far as personal development goes, don't let anyone else dictate what's important for you.
Your employer is usually perfectly happy getting more for less.
Who is the target audience of TFA? Most likely, people who want to 'level up' in their career and still naively believe that skill (versus hustling or nepotism) is the main driver of such things. [0]
Entire frameworks have been built just to afford the creators a career in consulting so they can 'level up'. Perhaps the less the average engineer thinks about such things, the better...
I should put in a caveat since this is hacker news - being actually good rather than having the appearance of being good is better for your career in startups, but the opposite is true for BigCos like FAANG.
1. Realize technology is the easy part, people are the hard part. E.g., that's managing leadership egos, and/or the egos of peers and subordinates.
2. In the context, communication is essential. Technology problems are solved with people and commms. Full stop.
3. Communication is not simply broadcasting, it includes listeningas as well. That said, sometimes (sadly?) "the whole truth" is better replaced with less than whole, or even silence.
4. Similarly, learn to "read the room." That could be the culture, the team, the project, the meeting, the individual, and so on.
Ein Mensch mit Genie ist unausstehlich, wenn er nicht mindestens noch zweierlei dazu besitzt: Dankbarkeit und Reinlichkeit. (A man of genius is unbearable, unless he possess at least two things besides: gratitude and cleanliness.)
The data model is double-entry, transaction splits, hierarchical accounts, multiple currencies.
There's also some tools support for invoicing, accounts receivable, taxes, budgeting, and various extensible reports.
To sell your project idea to management, it's far more effective to speak their language. It's career-limiting otherwise.
Without knowing how accounting works you’d sit there wondering “what the hell is that acronym in my department name in Outlook, anyway?” whereas once enlightened you understand how your team is evaluated at a higher level. It’s not just accounting, honestly, knowing how business works is advantageous for anyone.
“What do you do here?” “Oh, I’m just a cost center.” is a pretty fun tack to take with leadership, often true, and likely to confuse the hell out of them in its simultaneous honesty and correctness.
Me personally, I sometimes just ask to double check "are you sure?" even though I know a person is wrong, and say something like "I am very sure of this, let's double check" instead of saying "no, you are wrong".
This is one thing where not being in person often hurts--although even pre-pandemic that was often the case with me. If a reasonable well-aware person is reading a not to large room, they'll probably respond if someone suddenly gives a "Did I just hear what I thought I heard look?"
Edit: typo.
2.) We are also industry that writes about senior engineers as if we were perfect zen masters, with no ego but great confidence and security, with infinite patience combined with effective asertivity, knew exactly what to say when socially and politically. And yet also willing to sacrifice self whenever self interest and project interest are in opposition.
And also having perfect technical skills, both abstract thinking and attention to detail, and know all algorithms and also all optimizations and all technologies and generally being perfects perfections.
3.) Although the previous two points sounds to be contradictory, maybe it goes back to confidence and absurd expectations.
Are there people who say "I propose we subtly adjust the product in this way which saves us 7 person-months of development effort and 2 months in time to market while delivering 90% of the original proposal's value?" Yeah, there are, and I don't understand why we pretend that can't be a thing.
In over 5 years of dev, I've never been convinced in the value of design docs. I've bootstrapped several large components, I probably only kept up to date a document maybe once out of all those times, and I've never had any regret or paid a price for not having it. You can think up front, draw + share diagrams, get feedback, and have well documented source code without needing to introduce duplication and "englishification" of a system.
I'd love to be convinced otherwise though! Always looking to learn! Anyone care to pitch them to me?
Edit:
After reading the rest of the points, I'm actually pretty convinced this is more of a "how to be <role that provides technical interface with leadership>" rather than "how to be a senior dev". It sounds to me like they're mixing roles/responsibilities here - there are certainly plenty of senior devs without these responsibilities/expectations.
The point of a design doc is to get feedback on the design and to keep a record of decisions made and why they were made. That’s it. It isn’t supposed to stay up to date forever - your code should document that instead.
Once you get feedback on the design, the doc has served its purpose - archive it and move on.
I’ve picked several projects along the way and just having one or two ADRs helped me so much. Sometimes a piece was not working so well, but without knowing why it was made that way made it really risky to just decide on a change.
Like code comments and any documentation in general, design docs aren’t best for telling what something is/does but why it exists, why alternatives were discarded, why apparently suboptimal behavior was chosen and so on.
So i see the usefulness of design docs to be threefold:
1) Writing it all down in one place. You've got tons of whiteboard meetings, random discussions by the water cooler, random slack threads, ideas you think up in the middle of the night, different asks and different reqs coming in from different teams. It's useful to formally write it all down. And then once you see it all in one place, you can more easily see which parts of conversations you forgot, which decisions that you thought you all agreed on in the meeting but people actually thought you agreed on a different outcome. You can see if there are any contradictory points -- does one decision you agreed on in one discussion actually make it impossible to follow the decision you agreed on in another discussion. You've now got the big picture and see things now you're all zoomed out, that you couldn't see when each discussion was just drilled down into a single component or aspect.
2) Coordinate for review. So now it's all written down, and everyone can go through and see if there's anything that they missed. Are there actually any blockers in here? You can now send it out to all the concerned parties and they can make sure that you didn't miss anything, that all concerns and asks are being properly covered. Are all the original requirement actually being handled by this design? How long is this actually going to take now for all the involved teams and people to do. Much easier to do when you've got a complete list of everything you need to do.
3) Documents your original intent. So now you're off and implementing it all, and of course you end up building something completely different from the design doc. But it's still important to go back to it and be able to see, what were all of these original concerns and blockers and worries that we had? The design doc says we made this decision because of this showstopper, we ended up doing it a different way, but did we properly account for that in our final implementation. Why did we even want to design it this way in the first place, does that constraint still hold today, and will our end result fail because we ignored it.
1) Get feedback from your peers and other teams who need to interface with your design. Your design, or the problem you think you are tackling, could change based on their feedback.
2) Future readers can get a lot of context. Specifically, the design doc documents the trade-offs you considered and chose; this helps future engineers fully understand the problem space before second-guessing major decisions.
3) Leave some trace that you initiated/drove an effort of some design, for career/promotion purposes. You can demonstate how many stake holders/teams your work had to touch, and how difficult the problem & solution are based on various metrics in the design doc (# of ppl that participated in the review, # of services/components your design had to touch, etc). Personally this is my least favourite reason to write a design doc, mostly because I find people write heavy-weight design docs when it serves no other purpose than for perf, and design docs are often.. embelished when they dont need to be.
Instead of a design doc, you can just file a bug, or shoot an email to a wider team, to accomplish the 3 things above. However, it becomes increasing inefficient to solely rely on bugs/email as the # of peers/stake holders increases, the scope/complexity of your project increase, or the communication overhead in your company increases.
I think it really depends on how mature, how complex, how isolated, and how big your project/working group is.
Where does your work fall, and what kind of process do you personally use to accomplish 1,2 & 3?
For me, the human aspect of building tech solutions was always overshadowed by my passion for engineering. It seems that dealing with humans is indeed far more challenging and also far more rewarding. I recommend every engineer to dive into literature along these lines to get a fresh perspective. Seems like the most essential component for building successful tech teams.
> How to help someone get promoted
Any strategic or tactical advice is particular to each company. This is not a skill. The other skills include mentoring, so this seems a little redundant.
For example, when you as a senior engineer are in a meeting with management and without the junior engineers, it's important to call out "Jr. Eng X did this part of the project and did a great job".
That's what that skill is about.
[1] https://mekka-tech.com/posts/2018-08-09-the-difficulty-ancho...
— Robert Heinlein, Time Enough for Love
4. How to indulge a senior manager who wants to talk about technical stuff that they don’t really understand, without rolling your eyes or making them feel stupid
Skill learned : be able to not pay attention to a senior manager who wants to talk about technical stuff that they don’t really understand AND tells you that technical stuff is easy compared to management.
How to speak up when your team working conditions is being abused by management.
Honestly, doing this right-vs-wrong can be a career limiting move.
This made me a programmer, but oblivious to all sorts of things about how the world really works.
I needed years of conscious effort to bring myself up to a basic level, which everyone around me seems to have mastered yeeears ago.
But it’s well worth it, you just need self awareness, then realizing and admitting I’m not good at X, but will learn is the life long ultimate meta-skill.
I've been trying to summarize for my partner (a UX designer) what helps in doing a senior role well and gradually growing into leadership, and this says much of it better than I could have myself.
>How to indulge a senior manager who wants to talk about technical stuff that they don’t really understand, without rolling your eyes or making them feel stupid
maybe not how, but when. I was on a project as a consultant that was basically ruined by management being technical but on very old or non-related technologies and they were indulged in spending hours of meetings some days to pontificate and worry about details that did not apply. Obviously this was not the only problem but I swear some times it would have been good to eye roll or otherwise shut down the questions rather than let them continue.
> How to explain a technical concept behind closed doors to a senior person too embarrassed to openly admit that they don’t understand it
Aren't these a bit condescending? Sure they're directed up, but it sounds "be nice when you're looking down on them".
But worse, what if, as an engineer, you've just got a blindspot? What if the manager (or any person for that matter) has a brilliant idea that _you_ don't understand and therefore think it's stupid?
My experiences with senior engineers is that they often need to learn to keep their biases in check.
No, that's the point. It's how not to come across as condescending.
> But worse, what if, as an engineer, you've just got a blindspot? What if the manager (or any person for that matter) has a brilliant idea that _you_ don't understand and therefore think it's stupid?
I think that is covered here: "How to listen to other engineers’ ideas without feeling threatened". Just insert "manager" for "engineer".
> My experiences with senior engineers is that they often need to learn to keep their biases in check.
I'm sure there is context missing here but everyone has biases and this sounds a lot like someone feeling "threatened"...in which case, see the prior bullet point.
I moved out of engineering year ago, but this is a great list of the skills senior staff need beyond whatever their core competency is.
Words like "senior" and "principle" engineer reflect more on company being hostage to coding expertise than reflect competence beyond coding. I'm trying to think of senior or principle engineer who gave two whits about "beyond coding". Coming up blank here.
In large corporations pay is tied to title and often times titles are handed out simply to pay someone not to look elsewhere and it has nothing to do with anything else.
YMMV
Are there any templates for design docs?
This I sometimes struggle with. It doesn't help that my recent efforts in this area have been with someone who also displays every bit of Dunning Kruger and beliefs in magic thinking like "the internet doesn't have problems and retries should never have to happen so we must have a bug!" or "everything can be solved with DNS (because they don't know how DNS works, what is is or how it can be used)".
I scrolled to the bottom and sure enough:
Enjoy this post? You might like my book, The Manager’s Path, available on Amazon and Safari Online!
Outside that, the happy developers I know are self employed as consultants or own app businesses.
There’s also video game studios around the world in many places other software companies don’t exist. I think this is a very interesting trend but not sure if it pays well.
(You could be a gaming millionaire by e.g. being a very early employee at a studio with a casual mobile gaming hit ten years ago, but those are definitely exceptions.)
- understand the query language of ES
- do some Haskell
- boost my Bash productivity scripts
- swim 6 hours per week
- dance again
- repair my bike
- help my kids become even better/happier than they already are
- let the managers manage
Is it because being a winner at work is completely no longer in my scope?
Did the author mention luck and treachery as most important skills for career advancement?
This is the fundamental problem with our profession, we are goal oriented and try to make things work at all cost, and we get taken advantage all the time even when we are holding all the cards (high demand for us, low supply).
Stop making their work easy by making yours hard, you are not a fcking lap boy, you are an engineer, you solve the technical sht. Make the "management and meetings" people earn their over inflated checks or simply move to the next job for an even better pay, simple as that.
All my PM, TL, RRHH, QA, and the rest of the spreed sheet crowd have always been the same: Lest waste an hour every day in a pointless meeting to show them who is boss and pretend that we do something useful, then lets spend the rest of the day in Facebook and social media while I pest the nerds on chat every few hours asking "how is that going? do you have an estimate?". That is not working, that is been a parasite. Force them to earn their living.
For some of them this does turn into just asking why you’re not done yet.
If you are a senior engineer in a team of engineers, do you need your manager around to facilitate every meeting that discusses "next engineering steps"? If so, are you really senior?
If you, as a senior engineer, can't get a new starter up to speed on your code base (without creating a hostile environment), are you really senior?
I mean, I am not saying these things should fill 90% of your work-day, but maybe 5%? And when you do them, you should at least be passable at it. A complete lack of soft skills is not really excusable in a senior engineer. But, it is also the case that a senior engineer job is about more than soft skills.
The article is talking about senior engineers, not engineers in general.
Well duh, ok, I would expect a Google Principal (L8) or Microsoft Partner (69) to be able to perform most of this list.
The list for the exact Senior would look more like this:
1,2,3,4,5,11,15,16,21 -- L5+ senior engineer
6,8,12,13,14,19 -- manager (M1+) or L6+ engineer.
7,9,10,17,18,20,22,23 -- common "skills" that everyone executes up to their ability, but in general you would expect a corellation between the eng level and the ability in these.