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.
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.
I will be starting in a smaller, more human-focused foodtech company in January (shout-out: http://felfel.ch/en/)
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.
It can be to pretty demoralizing when you realize how ephemeral your work is.
(That being said, I still love coding!)
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.
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.
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...
I use this band https://www.amazon.com/gp/product/B072DYNTYB/ between work breaks. Helps to work from home :D
Also with deadlines that I have no say in, usually created by non technical people.
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.
2. Dependencies that don’t install their dependencies and require hours of configuration.
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?"
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.
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.
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.
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.
Also, architecting anything always feels like the first time.
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.
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?
Discipline, mostly. It's a skill to learn, just like any other, and it helps in all walks of life.
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.
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.
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.
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.
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!
Getting people to leave me alone so that I can get some work done.
I doubt anything could be done about the first, but it would be nice if there was something that could be done about the second: I am half considering putting on the DND blinders found elsewhere on the front page.
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.
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.
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.
"We cannot possibly do that in the time frame you promised." - developers are obviously at fault here
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.
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.