Ask HN: What is the most painful problem you have day-to-day as a software dev?

41 points by putnam ↗ HN

102 comments

[ 2.7 ms ] story [ 163 ms ] thread
Dealing with management who would rather hope than plan.
Developer: "This is a difficult problem that requires careful planning and cooperation between people in different companies."

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?"

Long commute to the office.
do you also need to go to the gym?

I had commute problem where i was 1 hr commute by bus and didn't have time for the gym, I could have solved it by buying a car.

but instead I got a bicycle and commuted that way instead, at my most unfit I could still cycle faster that the previous commute by public transport would take, an I even enjoyed it.

Some problems are opportunities.

Once you’re accustomed to it, bicycling to work is not much exercise. It’s certainly better than nothing, but I would not see some mild cardio as a replacement for running and/or strength training.
it just free cardio, you can burn about 600 calories in an hour which would otherwise be sat in a car or bus.

you can use it for strength training if you do a few sprints, but the main pull of it it that you don't realise you're burning many calories unless you really try.

breathing fresh air for an hour is great too.

It really depends on where you live. Biking to work simply isn’t feasible in the LA area — it’s not like you can just hop onto the freeway. And the air isn’t exactly fresh either.
Then go faster. At least on the way back home you can go all out.
It depends on how much effort you put into it. While one's body will adjust to the load cycling puts on it, that doesn't mean that one cannot increase the effort put in to compensate.

The commute will become shorter due to increased speed, but that doesn't stop one from putting in more effort to maintain an even higher speed.

Ok, sure, I guess some people have the luxury of a dedicated bike path with no intersections. Here in the city, I can’t get close to my (low) top speed because I hit a res light every block or two. When I used a suburban trail, it was mixed-use, so I had to go even slower to navigate safely around pedestrians and potholes.
bike paths can be counterproductive and sometimes dangerous if badly designed. they are good for learning to ride at the weekend but not worth it if you commute daily, it's better to keep your line and learn defensive riding.
I once heard it said about cycling that "it doesn't get easier, you only go faster." After a decade or so of mountain and road biking, I agree with that sentiment. If it's easy, that just means you're slacking. Which, on a commute I could understand -- who wants to work up a massive sweat before plopping yourself down in a chair for 8 hours?
That's a good suggestion. I'm getting back onto long distance racing--perhaps I'll start running to the office again.
Deadlines. I'm terrible at estimating how long something will take to complete; especially if other people are involved.
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.

switching context between components/templates backend/frontend for single features (angularjs), I wish there were frameworks to inject a features into an application an you'd only have to touch one file (or directory)
React!
sure, that's the move.

i'd like to use something like react that creates both backend/frontend code in the future.

you end up with 5-6 files that just pass the same data from one to the next (form/model/component/xhj/api/model/etc..), react just removes 2 or 3 files from that equation.

Try Nuxt. It has easy-peasy server side rendering.

If you know Angular then you'll be at home with Vue (used in Nuxt), which is much nicer and a bit faster and smaller and a bit more useful for actual app-building than React.

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.
Corporate proxies.
At my company, it took us several years and the concerted outcry of hundreds of developers, but internal IT is now finally abolishing our proxies, one office at a time.
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.

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
I have to be honest here in saying that to give a good answer, I took my notes on why I left my last position in November.

I will be starting in a smaller, more human-focused foodtech company in January (shout-out: http://felfel.ch/en/)

Software is used everywhere. If you care about the broader impact of your work, take your skills to an organization who’s mission you respect.
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.

(That being said, I still love coding!)

Somewhere, perhaps unbeknownst to management, there's a Perl script at the heart of every company that has survived thru the 90's.
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.

What you describe does not sound like engineering.
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 :)
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.

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.
Where I work it's lack of process. I get work thrown at me randomly from all directions.

Also with deadlines that I have no say in, usually created by non technical people.

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.
I am reading through GTD now (brought it years ago, but in an amazing twist of events, never got through it) and his suggestion would be to have exactly one in place, where all your information gets put, then you sort through it one at a time, not to do the item, but to figure out where the item belongs: in your case it is very clear that it does not belong on slack, but in a bug tracking system, so just put it there.
It's a cycle:

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.

I had similar issues -- I ended up writing relatively copious notes, which meant that I didn't lose track of what I was doing and I could answer when asked what the status was of X, "oh yeah, you told me to do that on tuesday, but I had put it aside due to foo, bar and the release of bax".
Unnecessary meetings.
Today I was invited to an indefinite series of phone meetings with four+ people two times a week because someone has one or two questions he can't be bothered to ask by mail.
getting management to believe that not being able to run tests locally is a huge problem.
Maybe you could find their equivalent - ask if they would be okay with waiting 5 minutes after changing an Excel file before seeing the results, or having to wait 5 minutes to see if an email actually sent.
The minimal/empty intersection between coding environments with acceptable performance (Vim, Sublime, etc) and environments with reasonable code intelligence (JetBrains).
Visual Studio Code seems like a good balance. You can push Vim and the others pretty far as well, eith a lot of fiddling with plugins.
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.

What successful products are out there? Developers can be one of the worst markets to try and sell to; even Microsoft gave up and decided to give away VSCode (which, despite having little to actually do with Visual Studio, is still them acknowledging that it's a hard market).
why do you think Microsoft gives VSCode away. Seems to me they are quite committed to it.
1. Every piece of software and the OS wanting to update/reinstall itself every other morning. So much for app start times!

2. Dependencies that don’t install their dependencies and require hours of configuration.

Getting distracted and messing up my flow.
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.

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.
Opening Hacker News 15+ times a day.

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?

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.

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.

This. Seriously, no one minds if you take breaks where I'm at. I'd bet it's an unreasonable minority of companies which do.

If your company has salespeople, they probably spend a large amount of time chatting. It is what it is. Some amount of it is healthy.

dealing project managers.

they are very bureaucratic. They create tons of excel files to track project progress, and drag you into 8a.m. meetings to discuss how to update those excel files.

Sounds like a bad PM. I currently work with one of the best PMs that is like a huge shield against upper management and politics
I work on Windows and run nightly builds of a developer branch. Occassionally some big regressions slip through, like networking or Hyper-V not working, broken graphics drivers not allowing multi-mon, and prerelease SDK's that break Visual Studio.

Still fun though, and I enjoy finding and filing bugs.

Communication with other people. In my experience, even a two-dev project can be worse (in terms of overall quality, coherence of vision etc.) than if I just did everything myself. Of course, the more people the more mess the project becomes - but, at the same time, most software is just too large to be written by a single person or even a very small team. Hence, the usual end game is a crappy code base and a product that barely works.
Newish CTO who puts technical concerns before common sense decisions in a small company.

Example: App is already crashing due to server load a month prior to black friday, his decision instead of optimizing things and finding the problems is to write unit tests for the month. Finally a mutiny happens by the senior team and everyone scrambles to fix and improve things a week before BF and we make it through by the skin of our teeth.

I agree the priorities in that situation sound misplaced, but I would not characterize that as putting technical concerns first. Fatal bugs are a technical concern.
There are other things, that's just an example of the startlingly poor decision making skills.
That sounds annoying. I have the opposite problem, but I still sympathize.

Sometimes you get someone making really bad technical decisions so the direction forward looks good to upper management in the short term.

It's a hard balance to meet the needs of the technical requirements and the business requirements, but that's why it's their damn job!

My office is loud and I am not allowed to work from home or stay late(management will actually kick us out of the building after 6:00PM)
Bose noise-cancelling headphones are a godsend for this problem. Look for some droning atmospheric music (I like post-rock and post-metal for this purpose), put on the Bose, and you're in your own little world.
Code reviews where people come up with BS just to have something to say. Or creating a clean design only to have it turned into spaghetti by others.
At least there were code reviews where you worked. In my current job such a thing would be considered a waste of time.