It's that "I've seen some shit" look -- a kind of world-weary daze of someone who has been through a few business cycles, several verses of the "this new language/paradigm/whatever will solve all our problems" song.
It's the look of someone learning yet another "teh shiny" just to stay current -- with full knowledge that it's yet another idea from the 1970s, repackaged to appeal to a modern audience.
The look of someone who simply lacks the energy to resist the zeitgeist. Who has to listen to everybody oozing religious zeal over the flavor of the week.
The look of someone who is thinking "cool, monads -- now can we roll up our sleeves and ship this product? Remember our product? We get paid for shipping product"
I would say the difference between a junior and a mid is experience breadth of knowledge. Knowing what tools, patterns or architecture to use and when.
The difference between a senior and a mid, is that a senior knows when NOT to use them.
In other words, juniors and mids tend to focus their attention on technology. Seniors tend to focus on delivery.
A junior is much like an apprentice. Often they are being told what to do and told (or hopefully TAUGHT) how to do it. They don't show a lot of autonomy. A lot of mistakes happen from a lack of understanding and foresight.
A mid-level developer is mostly autonomous within the confines of a planned out project. Given a specific scope and criteria, they mostly get the job done with some help from a senior. Their errors and bugs are typically of the architectural and performance type, though a lack of foresight can plague the less savvy mid-level.
A senior should be nearly completely autonomous. You tell them the general thing that needs doing and they are able to do it on their own. They can see the impact a decision would have far enough down the road to accurately weigh pros and cons. On top of that, they are able to help the mid-levels and juniors get better at their craft as well.
Here's a really good Quora answer talking about how engineers get promoted at Google. I think Google is a good example to look at for promotion (but not necessarily for every issue) because they're known to have a very well-defined process for promotion.
I'll highlight just one aspect I've been thinking about:
Imagine your company has a programming problems that is a shaped like a vague cloud.
With a junior developer, you need to do the work to dig into the cloud, define its boundaries, segment the work, and write it all up as tickets. Then you give it to the junior dev who focuses on each one independently. They are not responsible for the end result, though they may be asked to verify the parts they coded in production.
With a senior dev you say "solve this problem" and walk away to do other work. You know they can just dig in, figure out the right solution, code it, test it, and maintain it.
Ability to set down the fun and desirable nature of coding. To put priories and your focus in hiring, direct-report development, meeting collaboration and product organization.
To ask your direct reports where they want to be in 5 years and help them get there - without disregard of what that means to the day's need
It could be just a title if you work for that kind of company. Or, it could be VERY meaningful- which is what I'm sure the poster was looking for, instead of a flippant answer that suggests you're frustrated and/or don't have a clue.
Exactly. For company A it means you have 6 years experience. For company B it means you can lead a team and mentor people. For company C it means you know so much about Java you can write the book. For company D it means you can type and open word. Coming up with a precise definition is futile. It is just going to be anecdotal.
I don't entirely disagree, and I think this to be a quite helpful response to the poster, which was the point of suggesting your previous answer was just being flip.
Company to company the specifics certainly don't hold constant but one could argue that the progression from junior to senior involves more responsibility, autonomy, and accountability at most places.
Yeah, it's just a title, so what makes a senior dev is that title on their resume. Everyone has their own view of what should merit getting that title so it's not an interesting discussion topic. (For fun though, my view is senior is just an understanding of how your work ties to business value.)
Core dumps, memory leaks, hardware faults, and plain bad luck.
Big O, data flow, always learning -- or out you go.
Manager metrics, schedules hectic, methodology hegelian dialectic.
Taking the heat, feature creep, open office, uncomfortable seat.
Holy wars, revolving doors, carpal tunnel, all you can take? There's always more.
Fucking suits, random reboots, and the ever present "thousand language stare".
Oh yeah, pressure -- lots of pressure. And time, time, time.
Metric shitloads of time.
Time, man. You gotta do your fucking time.