I'm a senior backend engineer in a healthcare startup, but I think the single biggest determining factor to why this place is so awesome is that my coworkers genuinely, complete respect each other. That manifests in lots of ways:
- Arguing and infighting is nonexistent. When Joe proposes something and Jane disagrees, it's on a professional, technical level. Joe knows this and responds in kind. Agreements are made and consensus reached.
- Sometimes we make mistakes, but we all know that it's because a smart person acted on perhaps incomplete information, not because they're incompetent or untrustworthy. We have actual blameless post-mortems to figure out what happened and how to prevent it, and then we move on.
- If you want vacation, you take vacation. We know you're not a slacker who's trying to get away with working as little as possible.
- If I have a question about a management decision, I ask the CEO to explain it. He makes time to meet with me and we discuss it. There's never any "because I said so". There've been times when I think I might have made a different decision (or maybe not; he has more information about it than I do), but I've always been 100% convinced that the decision was reasonable and justifiable.
There are literally no hiring requirements more important than "treats others with respect". If you're an asshole genius, don't bother applying because you won't fit in at all here. Those people would wreck our corporate culture so we avoid them like the plague. No one is so much better than my awesome coworkers that it'd be worthwhile.
I work at Amino. Here's a blog post from our hiring team that expounds on this a bit: https://amino.com/blog/a-letter-to-amino-candidates/
Not related to the subject at hand but still worth reading: https://amino.com/blog/struck-by-what-bizarre-diagnoses-in-m...
Basically, how to you strengthen and guide this part of it:
>When Joe proposes something and Jane disagrees, it's on a professional, technical level. Joe knows this and responds in kind.
(Assuming that you're not rejecting pull requests with "this code sucks,") It's time to escalate the problem with management. Otherwise, you need to plan to spend more time mentoring, and/or find another strong member of the team to split the mentoring with.
I've met one of the three co-founders twice, first for an interview and second for a weekend with his family. All three co-founders join me five days a week for a brief standup/scrum and one day each week we include a sales and strategy update.
They pay in the range of my market value and have steadily increased my equity share of the enterprise. I supplement that income by teaching sea kayak technique and rescue year-round and snowboard instruction in the winter.
I try to put in at least four hours of work every day, including weekends, and balance that with four hours of year-round kayaking, hiking, house-work, seasonal snow-sports, or some other physical activity.
I do this "job" to keep my brain sharp and hope to continue well past the point of typical retirement. The same applies for my non-"job" activities. If I did not need to worry about saving for retirement, I would probably still do this. The joy comes from solving problems, not from stacking cash.
Become the low-key hero your co-workers need.
p.s. I started kayaking seriously twelve years ago because I would see these people in their 70s surfing big waves in 16' boats. "That's what I want to be when I grow up, that or retired!"
Well done for achieving work-life balance.
I am looking to increase the impact, not reduce it. I know that I need more bone-rattling in my life and can't justify the purchase of a Juvent. Skateboarding provides benefits similar to that of a Juvent, plus I might learn how to fall (and skate).
Incidentally, that 10/90 ratio happens to dominate everything else worth pursuing also. Sports in particular. You get that initial ramp up high and then when you hit the part with smaller and smaller gains, that's where "learning to love the grind" kicks in. It's much harder than it sounds, too!
Reasons I've quit jobs after a year that had nothing to do with lazyness (in fact, I'm often one of the people who puts in the most hours in my teams, and praised for it so as long as I keep putting in the hours):
1 - There's no connection between my boss/team-mates apart from the work. We have nothing in common. We see the world differently. We like different things. Interactions not related to work are strained. We probably wouldn't choose to spend time with one another if work didn't force us to. This is actually kind of a big deal, since I wind up spending most of my waking time with my coworkers, who it'd be nice to actually like and enjoy spending time with. There's only superficial due dillegence you can do for this during the hiring process. Most people seem at least decent during the interviews. It may take time to find out they're really not your type of people, and you're not theirs.
2 - Getting blamed for something out of my control, and having no power to change it. You can't fix it because the boss says no, but you're the one who gets blamed when things go wrong.
3 - Being surrounded by a company full of money-chasers, whose sole reason for existence seems to be to make more money. This is related to reason 1 above, and kind of makes me depressed.
4 - Working crazy hours for long periods of time. There's a lot of talk about 4-hour-days on HN recently. Well, if you're a fan of 4-hour-days you can probably understand how debilitating 12-, 14-, and 16-hour days are, especially when you have to work them for months if not years on end.
5 - Being forced to do boring, menial work you're way overqualified for because the company is too cheap to hire someone less skilled to do it. This leads to extreme boredom and frustration.
6 - Having no growth opportunities and feeling stuck in your position.
7 - Having spineless bosses that constantly kiss up to upper management and force the team do whatever they're told no matter how ridiculous or wrong they know it to be.
8 - Being underpaid and feeling unappreciated -- especially when you choose not to work crazy hours, which seems to be the only way some people can be impressed.
9 - Being treated with contempt by people who don't understand what you do.
10 - Feeling like your life is slipping away working on crap you really don't care about.
11 - Learning new technology -- something that got me excited a decade ago -- just seems like more of the same, and a drudge, full of irrelevant minutia.
12 - Having lots of interests outside of work that I'd much rather be spending my time on.
13 - Having to deal with mountains of bureaucracy and political bullshit. Having to hear endless cheerleading from upper management that everyone knows is a load of crap, yet having to smile and applaud.
14 - Feeling seriously depressed and burnt out, in large part due to much of the above.
I wish I could say companies like the above are rare, but they're way too common.
I've never been able to achieve this, which is probably one of the reasons I've burnt out more times than I can count. I'd probably be retired by now if only I could have loved the grind. Instead, I'm now probably never going to be able to retire in my lifetime.
Somewhere along the way, I decided I wanted to make a product for myself. Something complete, contained, and ready to release to market -- good or bad. It was that process of trying to make something stable, complete, and market-worthy that let me understand the grind. The last 1% is so much more awful than the first 99%, and it's in those details where all the "mental gains" are made.
Today, there is no shortage of opportunity to get a feel for what it takes to make a complete product. Whether it's the app store, a functional web site, or just anything that gets, oh say, 1000 users. You just need to go through the abuse of completion once to get an appreciation for the grind. Once you know what you're in for, then you'll be more selective about what to start. Moreover, the end goal will make the grind seem like a logical step instead of endless toil -- this is where the grind is understood and appreciated.
Just my opinion and experience! Hopefully it helps.
"Today, there is no shortage of opportunity to get a feel for what it takes to make a complete product. Whether it's the app store, a functional web site, or just anything that gets, oh say, 1000 users. You just need to go through the abuse of completion once to get an appreciation for the grind."
The problem is: I don't really care about making some stupid app or website. That sort of thing interests me about as much as scraping out a sewer.
I'm interested in things like reading old books of fiction, essays, and literary history. I enjoy feeling like I'm communing with the truly great minds of the past. Nobody's going to pay me for that -- especially as I don't really like to write articles, books, or essays myself -- and that's really critical for any kind of success in academia.
I have other interests, but they're very mercurial. What interests me today might bore me tomorrow, and I'd probably hate doing any and all of it if I was forced to do so day in and day out for years on end -- especially if I couldn't choose my own subject matter as my mood dictates.
The second problem for me is I really don't care about the business and marketing side of self-employment and running one's own startup. That's even more boring to me than writing code for apps I don't care about.
I'm sure your advice is great for many people -- particularly if they're young and still enamored with technology. But unfortunately, I think I've just turned in to a grumpy old man who really couldn't give a damn. Too bad I can't afford to retire and go off to mind my own business, reading old, worm-eaten books until I die.
Yes, I'm very happy with my job. I work at a company which cares deeply about solving hard problems well, and that care translates into good working conditions, great work/life balance, support from management for engineering concerns, and a very nice benefits package. There is also a focus on having separate promotion tracks for managers vs. more technically inclined people.
There have been jobs where I have either tired of the novelty of the problems, changes in management, changes in company policy, etc., but at that point I find a new job in a better company and continue to find happiness.
If you're not happy where you are, and you are considered a senior dev, then take responsibility for yourself and find a position that you enjoy. If you're locked into a company because of golden handcuffs, lack of local resources, or family obligations, then find activities outside of work that provide what you're missing.
How do you feel about working in this industry? Have you moved jobs a lot?
The reason I ask is my parents have been "working" or in their adulthood as parents/slightly before having children for roughly 30 years and for the most part have kept the same jobs. So as a new software engineer fresh out of school, they find the idea of needing to switch jobs for higher pay, new challenges, etc. to be a bit unbelievable and disagree that I should eventually do that.
My parents are the same way.
But seriously, great answer. I am in a similar situation time-wise. 30+ years as a dev. My situation is a little different. I am currently working at an international bank out of NYC. The people I work with are great, but the company situation is not that great. Poor, outdated equipment, horrifically restrictive IT security policies (no DLs from Github, or very limited, many legit dev sites blocked, horribly intrusive performance killing anti-virus software, etc, etc, the list goes on and on: basically a dev nightmare)
But you know what? I don't care. On the days that I actually get to write software, I feel at one with the universe. It doesn't even matter what that software is for. I am certainly not saving the world or even working on cool stuff, that is unless you consider publishing Risk & Analytics data feeds to be cool (;D). I just love writing software and always have. I consider myself to be greatly blessed by my circumstances. I had a 10 year period where I played at being a team lead and a middle manager and absolutely hated it.
Long story short: love being a senior dev. Hope to do it for as long as I can.
By your question I suspect what you really want to know is how to be a happy senior developer. I'm not in the "web world" so it might not be applicable but here is an approach that has worked for me:
1) Work for small or tiny companies. A tiny company doesn't have many "dark surfaces" for incompetent/lazy/"political climber" types to grow in. When there are only 4 people rowing the boat you can tell pretty quick if someone isn't pulling their oar. Large enough to have an HR department? Probably too big.
2) Work on new code. I've almost never worked on code older than a year that I didn't write. You know who needs developers to write green field code? New, tiny companies, that's who. Startups are small but you they aren't the only small companies.
3) Work with nice people that are smarter than you. Working with people smarter than I am has always been a given for me...
4) Try contracting, direct if possible.
[1] I've been doing this for 30+ years.
[2] Not sure if this applies to women. :-( My wife is also a developer and it kills me how much harder working life is for her simply because she's female.
I've found that anything interesting is more than just writing a generic website or a generic web service.
1. My work see the light of day. My efforts matter. I don't mind working hard as long as it is not wasted. At large corporations, projects, even big ones, are often scrapped for reasons that aren't anything related to the the technical work. I get it but it still sucks and it really makes me not want to try hard. Having effort and outcome being correlated with each other is a huge motivator.
2. I know what's going on but am never the smartest person in the room. Working with people at least as smart and skilled as I am is amazing. I don't have to worry about other people and their work. We can just divide up the work and be reasonably sure things will get done in a reasonable way. If not, talk it over and fix it.
3. I have a lot of responsibility and independence and we attack the problem. I've had the opportunity to learn and experiment with so much in just two years and those experiments are actually getting deployed. Having a hand in pushing things like Docker, Clojure, etc. at my company is amazing. I remember all the silly meetings at my old job over the choice of language for QA that ended up exactly where we started versus now when we decided to try out a new tool written in Clojure even though none of us ever used Clojure. We are all smart enough engineers, why should a new language stop us from solving the problem.
People in that latter category tended to be more brilliant in general (for example a problem comes up and they immediately know of 3 different ways to solve it, half a day later they tested all 3 for that particular problem, half a day later a first implementation is up and running, while it'd take most other people a full week to reach the first step), but they seemed to have way more up and downs with their mood and happiness and general.
Obviously this is a generalization from my ~10 years or so in professional dev environments.
As a senior dev who tends to identify more with the second category in terms of happiness fluctuations, I've been trying to be more like people I've known in the first category.
I'm on a very small team where I'm the technical lead and I code every day. I make whatever tech decisions I want.
I have a salary that's not large, but I also work a 30 hour week. 100% remote and nobody cares when those 30-ish hours are as long as I get stuff done and make some rare client meetings.
I trust my boss, who does the sales for the company, and generally she sells these really great projects with a lot of padding so there is always plenty of slack (praise bob).
Sometimes the projects are kind of dumb, but I'm still learning new things and they are large enough in scope that I can dive into some fun stuff.
So with all that, working is not a bad deal for me at all... it's something that I spend a whole lot of time doing, but it's also fun and pays well and I still have time for my 16-year-old, a girlfriend, and playing some music with friends.
I've tried hunting for a new job, but there's definitely a glut of senior software engineers these days. This current job, whilst boring as hell, pays well and doesn't demand overly long hours from me. And since I have my side project(s) to serve as a creative outlet to satisfy my 'coding' urges, I've stopped caring about finding other work for the time being.
About 5 years into my career I was asking myself the same thing. At the time I must have gone through 10 - 15 full time gigs, either quitting or getting fired so I knew something was not right. I could do the work but definitely never saw myself in there for the long run so quickly lost the passion for it.
Co workers were always friendly and sociable, but with very different interests, I'd also never imagine myself as them in 5 to 10 years. Sounds judgmental but it's important to sometimes look at who's around you as you more often than not end becoming them. Looking back, it was a lot to do with me not being that confident in what I wanted to do or become and a little lost.
I started working remotely which gave me so much more freedom as far as traveling and training in other things that I've really enjoyed the last 3 years. To the point where if I'm not coding for a couple of weeks - I really miss it.
I'm grateful everyday for the amount of freedom and money you can make programming when you compare it to SOOO many dead end careers out there.
TLDR; Keep asking questions, keep trying different roles, hang out with people doing jobs in completely different industries: service industry, sales... keep at it, something will click :D
Even though the company is just me, I approach it as a business and do a mix of hourly projects and fixed fee projects. At any given time I have 1-3 projects going on at once.
What I work on depends primarily on the client. With some clients it is all about the 'why' and we do real business analysis. These are massively rewarding.
Other clients treat me like someone who "Shovels poop for money" and just want me to do whatever they say. These are not as rewarding--but are often profitable.
I love programming, and do quite a lot of it. But watching what the software devs do all day, I'm not sure I'd enjoy the drudgery.
What keeps me out of the drudge zone is the fact that my work is not predictable -- I get the weird problems that are not fully within any particular skill set. So it can't be planned or managed.
Now I'm a coder (actually now I'm a manager, so less coding, but still a bit) and I really love my job. I wish I could work more. I love coming to work, I love my team, and we really have a ton of fun.
Our office is really chill but I have my own desire to be productive and write high-quality code. My teammates are great.
So my advice is: Don't give up. Like relationships, you can't stop searching for the right now, but because all the others have been terrible so far. Good jobs are out there!
Ah, the Scourge Of Agile. I yearn for the day people see it as the micromanaging abomination it is and we can get back to treating developers like adults, not naughty children.
I work for a biometrics software company. We all work about 40 hours a week under normal conditions, more if and when circumstances warrant it. Our boss was previously on the team and promoted from within; he is also excellent at shielding us from distractions from above if we do not need to know about them. I am paid slightly less than the median for a person of my relative experience, but that is mainly because of the drift that happens when you work at the same company for a number of years, and I don't mind much because the environment is quite nice. Everyone is polite, professional, and is a valuable part of achieving our company's objectives (we employ less than 100 people). Despite working primarily on a product that has been around a long time, I am always doing something where I am learning something new. I get 3 weeks of vacation every year (but rarely use all of it) that I can use pretty much whenever.
If you are actually somewhat decent at writing software and live in or near a competitive market, I would encourage your to be as selective as possible when it comes to "working conditions", but watch out for gimmicks that are designed to keep you in the office, like free meals. I'd also stay away from any companies where excessive overtime is commonplace (it's a sign of poor management), or where there are lots of attempts to portray the company as more than just a company (it can be a sign that they will not respect boundaries between their desired identity for you and your individual will).
I've been at my current job for 12 years. 6 years ago I was really annoyed with work. It seemed like we were in permanent maintenance mode, so there wasn't much fun stuff to work on, and I didn't have a lot of say in what I was doing or where it was going. I went and interviewed with competitors and a few startups. I was offered a job at a startup, but when I looked at the work, it was hardly any better than what we were doing, the product was doomed to fail (and it did), and I would have been doing longer hours for fewer benefits and working with people who were far less senior than me but who had very large egos. I ended up turning it down and instead talking to my manager about why I was unhappy. As new projects came along, I got to do newer things that were more interesting and came to love it again.
It's not all good. We currently have one or two people in our upper management who are not good at their jobs and who don't seem to care about their employees' well-being. But we're working on fixing that and the downsides are not nearly bad enough to consider leaving again. If they get worse, I may decide it's time to jump ship, but there's a good chance they'll get better and I'm actively working on making that happen.
Else the job is fine.
Ho! And I inherited a fork of 500k slocc using 5 languages and so much frameworks I can't count them anymore.
I am the janitor of a huge codebase with a management under acid, but it pays enough for me to not sleep under the bridge, so I guess I am happy.
Remember to thoroughly vhet your future employer. Job interviews are a two-way street. There's nothing wrong with finishing an interview and then telling the employment agency that you don't want to continue the interview. I did that a few times while looking.
It took me almost a decade of bouncing from a few different jobs, and failing miserably at trying to run my own company, before I found my current job.
My job isn't perfect, but no job is. I'm board and eager to move to another opportunity, but that opportunity will be chosen very carefully. I've already made the mistake of moving too fast, and I'm perfectly happy to sit in my current job for another 2-3 years if I need to.
Why? I interviewed at another company about a year ago; and for reasons that were hard to explain, it just didn't seem to be as good as my current job. A few months after they offered me a position, they were acquired and the team now has quite a bit of stress. Changing jobs wouldn't have improved much.
This is what it boils down to, imo. Currently I'm working on a horrendous legacy code base with a very low performing team, in a very low performing organization. Over the years I've learned what matters to me, and this job has what I need: good pay, time off, and I can come and go as I please so long as I'm here for "core" hours (ie on location, not remote). The last part is another way to say my boss is cool. He's new too, although he's been here longer than I have. We're both dismayed at the do nothing culture, and terrible code here.
That's about all anyone can ask for IME, find out what matters to you and optimize for that. When I go home I don't give a thought for work, I get to concentrate on my family 100%.
Part of why it works out so well for me is that I have enough clout to avoid things I don't want to do. IE, I don't want to be a manager. When my manager, (who's titled a director,) decided that I was going to become a manager, it basically went like this:
Me: "I don't want to be a manager."
My boss, "You're not going to be a manager, you're just going to do [everything that a manager does]. You need to grow in your career."
Me: "That sounds like you want me to be a manager."
I saw right through that and made it pretty clear that I wasn't going to be a manager, and I wasn't going to be tricked into being a manager without the title of manager. If I was going to be forced to be a manager, I was going to take that job I mentioned in my original post. It helped that I missed a meeting with upper management because a job interview ran long.
In part, it's not that I don't want to be a manager, I don't want to be a manager for the company I work for. I know too much of the code to be hands-off, and I'm remote. The culture is far too interrupt-driven in our office to be a remote manager.
Working conditions are nice, I'm on one of many small-ish teams (usually 5-10 people including management), 9-5 work doesn't raise eyebrows, I get to work with decent technology (clojure/scala/typescript), my colleagues are clever, and I've gotten much better at programming.
One of the best parts is that though it may be a bit circuitous, I can usually see exactly who I'm helping and how.
http://www.fowllanguagecomics.com/homework-bonus-panel/
So yes, being a senior dev often means spending way too much time doing all of the less-fun things on a project. Planning and scheduling, maintaining all of the infrastructure others depend on, interfacing with other groups, etc. Spending half of every day reviewing (and having to argue about) others' code is even more annoying than having your own code reviewed once in a while. Being the "debugger of last resort" is satisfying once you're done, but can be intensely frustrating while you're in it.
This list of gripes suggests the solution: one must actively resist all of these extra roles. Relentlessly. Yes, you'll be dragged into doing all that stuff anyway, but if what you enjoy is designing and coding then you have to protect that time. With all that said, here are some of the keys for me:
* Find fun projects and good people to work with. Always important, but ever more so as you become more senior.
* Work from home (at least part of the time - for me it's practically always)
* Explicitly block out time for the different activities. Set aside a morning for code reviews, an afternoon for your own coding, etc. For me, working in a time zone three hours ahead of most of my peers is a huge plus here.
* Require meetings to be scheduled well in advance. Decline with prejudice when people get too casual about this. Make it clear every once in a while that you're doing this as a matter of policy/principle. To soften that, show interest in the content e.g. by providing offline feedback.
* In general, say "no" a lot. Be polite, compromise or defer when you need to, but don't be a pushover and don't be passive-aggressive.
* Accept that you might get dinged for all these things. You might get fewer promotions or smaller raises, maybe even a bad review. OTOH, the increased focus on what you're best at and most passionate about might improve your performance compared to being pulled in seven different directions.
Most important, if you get dinged in a review, escalate. There's nothing like the company founder going to your boss and and saying that the thing you're getting dinged for is not your job.
I have had to shift around the day-to-day tasks I work on occasionally, but finding and working on high leverage parts of our technology and business is pretty rewarding.
As for the purpose, I mostly included it in my question to specifically not get answers from less experienced people, who may still be in their honeymoon period.
The background here is that I am in a job that will allow me to retire in 5 years (and nothing else pays even close in my country) but is so mind-bogglingly nonsensical that I wonder if it would make sense to change it to something satisfying even if it having to work much longer.