The feeling that writing software doesn't matter in the slightest in the grand picture of things.
As a full-stack web engineer, I don't help cure cancer, fix world hunger, or even make people using the software happier. I help business take the customer's money to make managers on both sides of that deal happy.
I'd say 95% of the code I've ever written hasn't done enough good for anyone to justify the money, time, and effort that went into its creation. Probably 25% was obviously doomed before I started writing it. Very little of that wasted work was of a sort that improved my skills in some significant way or had any redeeming personal value.
Talk about demoralizing. It'd be nice to have a role that felt a bit farther abstracted from the level of raw, random input to cold economic processes that most development is, so I could at least fool myself into thinking I was a bit less... used.
Wouldn't software help enable accomplishing all of the work you're comparing yourself against? I have the same feeling sometimes but software absolutely has the power to positively impact people's lives, the environment, basically anything. If you really feel strongly about this - I'd suggest looking for a job that enables you to work on something along these lines. Doesn't even have to be a non-profit but there are for-profit companies with great missions
That's a gloomy stance to take and one that in all likelihood is thoroughly misguided.
While it's true that most software doesn't directly help cure cancer, fix world hunger or any of the other big, seemingly insurmountable problems, software massively helps with those quests:
Where would the Bill & Melinda Gates Foundation be without software (and I don't mean the fortune Bill earned with selling software)?
New cancer treatments are often found through software-assisted processes.
Organisations like GiveWell use software to objectively analyse the positive effect charities have.
Even if you don't take these pretty direct positive impacts of software for the greater good into account, in order to be able to do their job organisations that try to make the world a better place need boring administrative systems like CRMs, ERPs and CMS, too (not to even mention operating systems like Linux and web server software like Apache). If it weren't for software all of this would have to be done manually, which would make these organisations much less effective.
On top of that there's the unprecedented opportunity for worldwide communication and coordination made possible by the Internet.
There are lots of ways that writing software can help people's lives, even in small or seemingly frivolous ways. I write games for a living and take satisfaction out of the idea that I'm bringing joy to a lot of people's lives. My work doesn't solve a lot of the fundamental problems or address any of Maslow's lower hierarchy of needs. But if I can create a space where people can experience the feeling of discovery or mastering a new skill, can get their mind off the rest of their lives and escape into fantasy ones, I'll consider that a job well done and the world a marginally better place for it.
I disagree here. I was a pre-med, who, after a wild (and aimless) few years after college got into software because it had such an impact on the collective whole. You may want to consider joining a start-up or finding a project that you can be passionate about. But it does matter - writing good code anyway :)
And even if it does (potentially) matter, the lifespan of code is horrifyingly short. Companies shut down. Management regimes want to be "impactful" and rewrite all the things.
It can be to pretty demoralizing when you realize how ephemeral your work is.
Suffering through technical interviews where the potential employers are inexperienced at delivering said interviews.
Simultaneously nitpicking & grandstanding without once discussing the realities of software lifecycle, managing complexity, change of business focus, development pragmatism etc is a red flag.
In a recent interview - with the entire development team for a 10 customer product with great potential - spending a couple of hours picking over a mutli-tier caching architecture to serve a million views of a million variants of a million products, when your login form is broken, doesn't impress me much as a candidate.
Compilation times and flakiness of bespoke build systems. Most of my time is C++ (game dev) and while we've reduced our compilation/link times with the standard tricks ("unity" files and distributed compilation) I'd still love for it to be as fast as something like C# or C for that matter.
It would be cool if there was some way to build a "progressive" C++ compiler where initially the generated code was poorer quality (except perhaps along a hot path ala https://en.wikipedia.org/wiki/Profile-guided_optimization) and gradually refined/hot patched into a running process.
I am the sole technical person where I work, responsible for basically anything that involves electricity. Nobody knows or cares what I do as long as nothing appears broken.
Sometimes the sheer weight of it makes me think I'll never finish this project, ever, and I should just give up right now and go find a new job.
What's more is we're about to (unknowingly) add more by rewriting some things in an obscure language that doesn't have any way to automate testing & deployments, use version control, etc...
SI joint. The clock's going to tick over to 40 next year and most of the last 20 was spent in a chair in front of a computer. Now I spend around an hour every day stretching and doing exercises to try to reverse some of the damage.
Right on. I had major SI problems until I got injections. The next day the pain was completely gone. Once I had no pain I learned exercises and have been pain-free for two years now.
Bug reports in Slack can die in a fire. Make me a ticket, I won't remember that there was a bug reported at 2:32 on Thursday if I'm not taking care of it right then, and there will be reams of text to scroll back through to find it.
Everyone is. No-one wants to pay for what it takes to get a decent estimate, which incidentally also requires a near-perfect idea of what you're gonna do ahead of time which is also usually lacking and which no-one's interested in figuring out and committing to. Look at the space shuttle software development process and how much time they spent nailing down requirements and such so the rest of the process would be highly predictable—IIRC it was like 1/3 of the duration of a project. Ain't no-one in business gonna commit to that.
Most software projects are half-cocked and operating on a shoestring. Anything other than "start on this, we'll tell you to stop if we don't like your progress, use something like story points so if we're still doing this in 6 months we'll have an OK-ish way to predict the way the project will go for the next month or two" is delusional. Can it be done? Yes. Here's what it costs. Actual development can start in 3-6 months. You gonna pay for it? Didn't think so. Want us to just start now and see how far we can get in a month or two? Cool.
Managing daily burn-outs where my mind prevents me from looking at code objectively and patiently. I recently have tried putting on meditative music and trying to clear my head so i can be productive again. It is really hard for me to code for 8+ hours a day.
I do not aim to code for 8 hours per day in a professional context. I know very few people who can really honestly do 8 hours a day of "thinking" work on a regular basis. It may be possible in some cases: perhaps on a new project where there is a lot of boilerplate code to write and you are free to make design choices as you see fit. However, most of the time when writing code in a existing large complex code base I find that 5-6 hours a day is a very productive day for me.
I work from home I work in bursts of 2 hours. When I get stuck/bored (either because I don't have any more focus left or I'm stuck on a tricky problem) I will read, shower, go for a walk, or take a nap. When I come back to the problem, I generally find I am able to resume work.
I find that I get as much done if not more than my coworkers who must be in the office 8 hours a day. I also graduated from my PhD using similar tactics, while many of my classmates seem to LIVE at school.
My point is just that the 8+ hour work day may be possible for some types of tasks, but for real "thinking" work I don't think it is a good goal. You are burned out because you are trying to do achieve an unreasonable goal. Redefine your goals so you can succeed and be happy.
The real world is full of tradeoffs. Sure, delivering early is a good thing. Sure, doing everything we can to prevent bugs (or at least find them early) is good. Delivering early is good, more features are good, beautiful interfaces are good. But you can't have all these things at once, even if you could spend infinite money on infinite developers (which would be un-good in its own way). Oh yeah, work-life balance and employee retention are also good.
I'd be a lot happier without the architects who only care about clean APIs. The reviewers who only care about braces and variable names. The devs who only care about core algorithms. The testers who only care about reporting as many bugs as possible. The performance engineers who only care how fast it is. The product managers who only care about features. The project managers who only care about schedules. Work with me, people, instead of just flinging demands at me from every direction at once. Or go screw yourself, because if everyone else is going to be that way then I might as well be too.
The crippling feeling that the way I'm designing this is probably wrong and there surely has to be a better way to do this and I am not smart enough to think of it.
Also, architecting anything always feels like the first time.
Not myself, but for my colleagues, it's their toolchain. Whenever I sit with someone else and watch them do something, I grit my teeth at how they work against their tools rather than with them.
Repetitive Stress Injuries. They make the entirety of the job, hell. Trying to get worker's compensation and physical therapy has been hell. I used to enjoy programming, like many here. Now, I mostly think about how to minimize typing and trackpadding, while keeping my posture proper and taking breaks every hour. As you can imagine, this does not lead to amazing amounts of productivity as it takes me about an hour to get into the proper mindset to code most days. I work from home, however, so I'm still more productive than anyone in the office. I long for the day when voice recognition becomes decent for people with accents so I can code with my voice like my American coworkers. Right now, the detection rate in a silent room with a very good mic is around 50% on a good day, so it's mostly useless. Yeah, there's shitty tooling, horrible boilerplate all over the place, stupid features to add, and all kinds of shit like that, and all that stuff sucks a million times worse with every single keystroke or tap. I'm still in my 30's too. I just can't imagine doing this shit for another 30 to 40 years or more. I wake up in pain, I go to sleep in pain, and I feel pain from RSI during my sleep as well as most of my days, sometimes including weekends. And on top of all that shit, I still have to think through solutions and program. If I could do anything else and still make a decent living, I would, but I see no other options.
Use general wide-used web development tooling like Webpack.
I'm in a classic .NET web development team that started using web forms, we now use a CSS preprocessor LESS via BundleTransformer the last few years and Typescript using the tooling in Visual Studio. It works, but it misses good stuff like live reloading and LESS source maps. I know from my free-time project that Webpacks works quite well, but I don't know how I can sell this to my team.
How well do you eat? One thing that helped was to realize that HN (and Reddit, et al) is the brain equivalent of junk food, and just as bad for you. (The irony of writing this on HN is not lost to me.)
Discipline, mostly. It's a skill to learn, just like any other, and it helps in all walks of life.
Working as a JavaScript developer in a heavy Java shop for a major dot com.
Everybody, on one hand, expects you to be a jack of all trades with mastery of: markup and various templating engines, CSS and presentation, anything related to events and asynchronous logic, distribution, and so forth.
On the other hand your skills are generally not valued, though frequently requested and required. They consider JavaScript and the web an inferior platform and inferior skillset for amateur developers, until they are required to do some of that work themselves. When I am not available to assist the excuses and blaming of things piles up.
Fortunately, I don't work in that industry any more.
I hate being the framework, library or programming language guy who has to Google things for his coworkers. I'm good enough to do their jobs for them, but my advice is often times ignored when they didn't explicitly ask for it.
The minimal/empty intersection between coding environments with acceptable performance (Vim, Sublime, etc) and environments with reasonable code intelligence (JetBrains).
This is my top one as well. Most intelligence is slow yet can be outsourced to a (on premise) cloud. I find it quite strange that in 2017, there is no universal API to delegate code analysis computation onto distributed nodes. Language servers are a good step, yet this concept should be expanded to (macro) code analysis, automated code reviews, memory leak detection, (unit|integration) tests, large scale refactorings, builds, deployments, basically anything a modern IDE does.
Some of above is already there, but they are separate products which don't integrate well. For example: You can find a distributed build environment for .NET & Java. This also runs test, so there is some level of integration. However, I'd also like workflows like refactor-build-test-analyze-fix-refactor until satisfactory.
Trying to keep a good posture so I can minimize the back pain. I find that more than any dev problem I face, if I feel uncomfortable sitting while thinking, it distracts me.
[+] [-] ThePadawan|8 years ago|reply
As a full-stack web engineer, I don't help cure cancer, fix world hunger, or even make people using the software happier. I help business take the customer's money to make managers on both sides of that deal happy.
[+] [-] ashark|8 years ago|reply
Talk about demoralizing. It'd be nice to have a role that felt a bit farther abstracted from the level of raw, random input to cold economic processes that most development is, so I could at least fool myself into thinking I was a bit less... used.
[+] [-] giveahoot|8 years ago|reply
[+] [-] BjoernKW|8 years ago|reply
While it's true that most software doesn't directly help cure cancer, fix world hunger or any of the other big, seemingly insurmountable problems, software massively helps with those quests:
Where would the Bill & Melinda Gates Foundation be without software (and I don't mean the fortune Bill earned with selling software)?
New cancer treatments are often found through software-assisted processes.
Organisations like GiveWell use software to objectively analyse the positive effect charities have.
Even if you don't take these pretty direct positive impacts of software for the greater good into account, in order to be able to do their job organisations that try to make the world a better place need boring administrative systems like CRMs, ERPs and CMS, too (not to even mention operating systems like Linux and web server software like Apache). If it weren't for software all of this would have to be done manually, which would make these organisations much less effective.
On top of that there's the unprecedented opportunity for worldwide communication and coordination made possible by the Internet.
[+] [-] SeanBoocock|8 years ago|reply
[+] [-] edraferi|8 years ago|reply
[+] [-] buildawesome|8 years ago|reply
[+] [-] mceachen|8 years ago|reply
It can be to pretty demoralizing when you realize how ephemeral your work is.
(That being said, I still love coding!)
[+] [-] jhowell|8 years ago|reply
[+] [-] 5h|8 years ago|reply
Simultaneously nitpicking & grandstanding without once discussing the realities of software lifecycle, managing complexity, change of business focus, development pragmatism etc is a red flag.
In a recent interview - with the entire development team for a 10 customer product with great potential - spending a couple of hours picking over a mutli-tier caching architecture to serve a million views of a million variants of a million products, when your login form is broken, doesn't impress me much as a candidate.
[+] [-] SeanBoocock|8 years ago|reply
It would be cool if there was some way to build a "progressive" C++ compiler where initially the generated code was poorer quality (except perhaps along a hot path ala https://en.wikipedia.org/wiki/Profile-guided_optimization) and gradually refined/hot patched into a running process.
[+] [-] tvanantwerp|8 years ago|reply
[+] [-] thebiglebrewski|8 years ago|reply
[+] [-] nulagrithom|8 years ago|reply
Sometimes the sheer weight of it makes me think I'll never finish this project, ever, and I should just give up right now and go find a new job.
What's more is we're about to (unknowingly) add more by rewriting some things in an obscure language that doesn't have any way to automate testing & deployments, use version control, etc...
[+] [-] h_r|8 years ago|reply
[+] [-] mbrameld|8 years ago|reply
[+] [-] codewritinfool|8 years ago|reply
[+] [-] dominotw|8 years ago|reply
I use this band https://www.amazon.com/gp/product/B072DYNTYB/ between work breaks. Helps to work from home :D
[+] [-] dmalik|8 years ago|reply
Also with deadlines that I have no say in, usually created by non technical people.
[+] [-] _asummers|8 years ago|reply
[+] [-] virtualized|8 years ago|reply
Boss: "Please do this one small thing for me immediately!"
Boss' reward center is stimulated and they forget about the one small thing shortly after.
The other ten one small things get pushed back.
Boss remembers about a few one small things from weeks or months ago.
"Why does everything take so long? Your productivity is too low."
Boss comes up with another bad idea to feed their one small thing addiction. Back to the beginning.
[+] [-] psyc|8 years ago|reply
2. Dependencies that don’t install their dependencies and require hours of configuration.
[+] [-] greysteil|8 years ago|reply
[+] [-] 11thEarlOfMar|8 years ago|reply
[+] [-] virtualized|8 years ago|reply
Product manager: "Yeah whatever it will be fine"
(no planning nor help in cooperation between companies)
six months later
Product manager: "Why didn't you tell me earlier that there was a difficult problem?"
[+] [-] reaperducer|8 years ago|reply
[+] [-] ashark|8 years ago|reply
Most software projects are half-cocked and operating on a shoestring. Anything other than "start on this, we'll tell you to stop if we don't like your progress, use something like story points so if we're still doing this in 6 months we'll have an OK-ish way to predict the way the project will go for the next month or two" is delusional. Can it be done? Yes. Here's what it costs. Actual development can start in 3-6 months. You gonna pay for it? Didn't think so. Want us to just start now and see how far we can get in a month or two? Cool.
[+] [-] jpmoyn|8 years ago|reply
[+] [-] montecarl|8 years ago|reply
I work from home I work in bursts of 2 hours. When I get stuck/bored (either because I don't have any more focus left or I'm stuck on a tricky problem) I will read, shower, go for a walk, or take a nap. When I come back to the problem, I generally find I am able to resume work.
I find that I get as much done if not more than my coworkers who must be in the office 8 hours a day. I also graduated from my PhD using similar tactics, while many of my classmates seem to LIVE at school.
My point is just that the 8+ hour work day may be possible for some types of tasks, but for real "thinking" work I don't think it is a good goal. You are burned out because you are trying to do achieve an unreasonable goal. Redefine your goals so you can succeed and be happy.
[+] [-] notacoward|8 years ago|reply
The real world is full of tradeoffs. Sure, delivering early is a good thing. Sure, doing everything we can to prevent bugs (or at least find them early) is good. Delivering early is good, more features are good, beautiful interfaces are good. But you can't have all these things at once, even if you could spend infinite money on infinite developers (which would be un-good in its own way). Oh yeah, work-life balance and employee retention are also good.
I'd be a lot happier without the architects who only care about clean APIs. The reviewers who only care about braces and variable names. The devs who only care about core algorithms. The testers who only care about reporting as many bugs as possible. The performance engineers who only care how fast it is. The product managers who only care about features. The project managers who only care about schedules. Work with me, people, instead of just flinging demands at me from every direction at once. Or go screw yourself, because if everyone else is going to be that way then I might as well be too.
And thus do I become part of the problem.
[+] [-] sssilver|8 years ago|reply
Also, architecting anything always feels like the first time.
[+] [-] majewsky|8 years ago|reply
[+] [-] ashark|8 years ago|reply
[+] [-] mnm1|8 years ago|reply
[+] [-] sebazzz|8 years ago|reply
I'm in a classic .NET web development team that started using web forms, we now use a CSS preprocessor LESS via BundleTransformer the last few years and Typescript using the tooling in Visual Studio. It works, but it misses good stuff like live reloading and LESS source maps. I know from my free-time project that Webpacks works quite well, but I don't know how I can sell this to my team.
[+] [-] breakpointalpha|8 years ago|reply
Seriously, "Focus" is the hardest thing to do when I have the entire internet and my phone right in front of me.
How do you manage?
[+] [-] fragmede|8 years ago|reply
Discipline, mostly. It's a skill to learn, just like any other, and it helps in all walks of life.
[+] [-] austincheney|8 years ago|reply
Everybody, on one hand, expects you to be a jack of all trades with mastery of: markup and various templating engines, CSS and presentation, anything related to events and asynchronous logic, distribution, and so forth.
On the other hand your skills are generally not valued, though frequently requested and required. They consider JavaScript and the web an inferior platform and inferior skillset for amateur developers, until they are required to do some of that work themselves. When I am not available to assist the excuses and blaming of things piles up.
Fortunately, I don't work in that industry any more.
[+] [-] virtualized|8 years ago|reply
[+] [-] closeparen|8 years ago|reply
[+] [-] jitl|8 years ago|reply
[+] [-] sharpercoder|8 years ago|reply
Some of above is already there, but they are separate products which don't integrate well. For example: You can find a distributed build environment for .NET & Java. This also runs test, so there is some level of integration. However, I'd also like workflows like refactor-build-test-analyze-fix-refactor until satisfactory.
[+] [-] billconan|8 years ago|reply
[+] [-] pvinis|8 years ago|reply