Finding and fixing bugs is a lot of fun. Incidence response is a lot of fun. Hacking on new projects is a lot of fun. Writing unit tests is fun too.
Refactoring, rewriting, sprint, agile, rearchitecting things etc aren't that fun. I like a few languages and I am not too keen on learning new paradigms or languages unless I have to. I'd rather get to value now by making something that just works(and is adequately tested) than engineer something thats future proof but takes longer to get out.
What are some good jobs for a person like this?
I can almost guarantee that you’re just at the wrong company.
Some software companies can turn even the simplest tasks into a grueling series of processes, endless meetings, and joint work across a big number of “stakeholders”. These companies will take the joy and productivity out of programming and replace it with a series of rituals and set of language that people use to go through the motions every week so they can collect paychecks.
Start interviewing around. Talk to your network. Find a company that values programming and real productivity but discourages unnecessary meetings and process. You will be much happier. There is no escaping the fact that you’ll have to work on legacy code, document your work, and meet with people some times. However, it doesn’t have to be a miserable process-filled slog.
Usually, if your mind is decently organized, I find that the problem is solved before writing a single line of code. If that happens, then the actual part of writing becomes dull and mechanical - the problem has already been solved.
I’ve never understood people that just jump into coding without much of a plan - and I think the industry has shifted towards that a lot these past years. Everyone is used to learning by doing, and pretty much everyone seems to have an aversion towards reading and documenting. I feel I’m slowly becoming part of a minority.
1) that’s the difference between a job and a hobby. You do the hard parts you’re paid to do sometimes.
2) decisions you don’t like by stakeholders you don’t like aren’t always wrong just because you see some way to “code it”. A product is not just its code base. It’s is also the design, marketing, revenue and growth strategies. Sometimes even more than the code base. Sometimes code can solve these issues but more often it can’t.
3) this view often attracts comments from engineers who seem to have very limited experience in building and running successful products that can pay the bills. It requires a lot of hard work you don’t love. Yes you can find others to do that work but that’s you. You’re the one hired to do the work higher ups don’t.
If you disagree you can start your own business and learn for yourself. A business is a lot more that solving interesting problems and calling it a day. It’s building, growing and managing a business and the tasks that go along with it.
I'm currently getting my footing now as a contractor. If this is actually something that most programmers don't like to do, is there an angle for me to pitch myself as "The guy who will clean up your code base"?
There's an awful lot of very nice good quality libraries, frameworks and 3rd party code that I'm very grateful for. But there's also a lot of hacky stuff around that people blindly import as dependencies. Then it becomes someones else headache (mine!) to deal with it.
I get a task to add a feature which isn't supported by the library that the new dev imported into the system. Turns out this library was someone's introduction to the C language and they decided to publish it.
It pipes unhygienic user input straight to system calls and has boundary issues. It's mostly one function with a lot of conditional checks on arguments. There are three copies of the source file, one for each supported platform.
I'm left with a insane task, PTSD and a deadline on Friday.
Do I just pretend I didn't see that and hack in another feature? No.
Do I tell the boss the problem? Yes. Will it delay the release? No, there's a demo on Monday and we have to release on Friday. Why Friday, we shouldn't release on Fridays!
Corporate work has a bad reputation but lots of upsides. I work in a small team of 5 people on a system that has about 40 users. Its amazingly better when you can talk to everyone, know what all the users want, dont have to worry about constant uptime or scalability. Flexibility and budget to pay for good platforms. Just dont talk about the refactoring - rewrite from scratch!
Reply: Yes it is expensive, the users are all paid more than us though which means we're helping them be productive. I have to add we also own a second application that has about 100 users that we spend some time on maintenance and support.
If you haven't read it, I highly recommend A Philosophy of Software Design by John Ousterhout. His talk is a great teaser for the book: https://www.youtube.com/watch?v=bmSAYlu0NcY
Here's the thing: a program properly written for the future does not take longer to get out. Not much, at least. What we instinctively think of as "future proof" is generally anything but: by anticipating some particular kind of change that may happen some time in the future, but in practice almost never does, we end up with more complex programs that are harder to modify when an actual (typically unforeseen) change comes our way.
The best way to future proof your program is to make it simpler, according to the requirement you are currently aware of. If you expect a particular change, sure, plan for it. But for the unexpected, just keep it simple. Because simple is easier to adapt, add to, or rewrite.
That said, the simplest solution is rarely the most obvious. Making thing simple does take a bit more time than rushing through the first thing that comes to mind. But it also pays off in a matter of weeks, so it's quite worth it.
And if you have a hard time assessing what "simple" means, SLoC is a surprisingly good metric (we have research that shows this). And mostly your modules should be deep: small APIs that hide significant implementations. I think of it as encapsulation on steroids.
I like to F^3: Finite, Focused, and Finished:
- Finite: I know what "done" looks like. Tasks have a discrete beginning and end, though the schedule may be fuzzy.
- Focused: No distractions. I stay on beam, and devote full attention to the task at hand.
- Finished: I don't stop, until I have reached a point that I can wrap things. I usually punctuate this with a final tagged commit.
I've come to realize that this is kind of an aberration.I cover it, in a way, in this post: https://littlegreenviper.com/miscellany/thats-not-what-ships...
Not all companies were waterfall, they kind of just "did things" without any well defined process. This was how things were until roughly the early 2010's. I remember working for weeks, after a couple of whiteboard sessions. You'd meet about what you were going to do, work on it, and come back a week or two later. Occasionally there would be informal check ins.
> Finding and fixing bugs is a lot of fun. Incidence response is a lot of fun. Hacking on new projects is a lot of fun. Writing unit tests is fun too.
I'd agree on the first three, I'm not a huge fan of unit tests though. They seem like something a "good programmer" should do but to me it's in in the CYA lane, not programming.
> Refactoring, rewriting, sprint, agile, rearchitecting things etc aren't that fun.
I actually like refactoring code. To me it's like pruning a garden, moving stuff around to fit better. It also helps me on longer running projects to fix up crap that I wrote months/years ago. I'm always growing as a developer, and fixing foundations so they don't end up a cobbled mess is actually a pride point for me.
Agile / Sprints / Pre-Future proofing / API contract writing? Pure overhead for me. My current job is a ridiculous amount of meetings. I get like 15-20 hours of meetings weekly in my position.
This really boils down to being at a company that doesn't have technically knowledgeable management, and being on projects without a dedicated architect.
This is also why pure functional programming never takes off despite being the more advanced and sophisticated way that leverages techniques which would prevent bugs and speed up development. I understand why large companies prefer extremely verbose, repetitive code, which allows for easy scaling of engineers, but I wonder what the industry could be if engineers prioritized computer science - more robust codebases, faster development which would translate to better products that never break while at the same time evolve faster.
"Planned obsolescence" might make business sense for hardware, but I feel software has so much wasted potential at the moment.
With all that said I do love programming the way it used to be. You could often be allowed to write something pretty. (From a pure code perspective)
At the uni. I had that freedom as well.
These days solutions usually surround using duct tape, plastic straws, and a half-broken welder to force various components and 3rd party APIs to work together, even though they are usually never designed to work in that way.
Then a vendor changes its API, we need to connect to yet another service, and some people who see resume padding as their biggest goal in life will manage to throw the latest hyped products / frameworks / tool into the mix.
It is a monumental task to write that code to be pretty.
A lot of software engineers care a lot more that we are using the latest hotness than they do about making it pretty.
I worked with a bunch of people like yourself at a fast-paced adtech startup. Clean code and even sustainability were not a priority, and the company had a money printer in the basement. Has the front-end gotten so messy it's unmaintainable? No problem, let's make a new one from scratch! I loved that we were given so much time to solve interesting problems with bleeding-edge tech, but I hated the filth of the code, particularly trying to read other hackers' code. And yes, so extreme was the priority of haste that these engineers were more hackers than anything else. That wasn't really my style, so I left.
Now I work with people who are the opposite. They love fussing about the `describe` blocks in their unit tests, will draw up Excel sheets to supplement the JIRA board, and spend an afternoon arguing about whether that 100% test coverage is really covering all functionality. The codebase is a textbook of how to write beautifully maintainable, readable code. Pull requests are genuinely enjoyable. But ask them to learn a technology from the last 8 years and they just start refining their refactoring tickets.
Perhaps I will find a happy medium between these two extremes.
What steals the fun out of the profession is the process, whether it's agile or lean or whatever. Having someone breathing down your neck for every bit of work you do, trying to categorize and measure every activity into a rigid grid to try and demonstrate a form of control over a process that we all know is essentially organic, if not chaotic. Smaller workplaces generally have much less decorum but given enough time all will grow their own process.
At some point you figure out that the ultimate "problem" is always of human nature. The code you are paid to write and the problems you are paid to solve are _not_ yours. And that's precisely why you're getting paid.
For example, "refactoring" used to mean a kind of later code changes to a working system, and tools to support it. Now I more often hear of it being used to mean what I'll call "fudge-factoring", to try to finish or redo a mess the same person made (possibly the previous week) so that they could pretend a sprint task was done, for metrics/peer-pressure reasons.
Genuine software engineering is hard, but there are crafts to it, and you can find satisfaction and even aesthetic appeal in the crafts. And it can let you accomplish things that you either couldn't accomplish otherwise, or couldn't accomplish as easily.
Maybe a comparison with programming is helpful. Programming is hard, but there's satisfying craft to it when you're doing it well, and when things come together.
Now imagine the programming is being done badly -- most of your time is spent debugging, structural changes to the immediate code base are difficult, the tools are lousy, you have to spend other time figuring out some low-quality bureaucracy bloat other people made, people who don't know what they're doing have created a lot of wrong-headed theatre around pretending to address these programming-level problems, etc.
That programming done badly is a lot like software engineering being done badly.
Could a mythical software engineering done well be what you want? What if it wasn't piles of bureaucracy, but some magic professionalism that extended what you could accomplish with programming, removing some limits you found on what you could build before?
However, when the applications I built became older, as more and more people started using them, and as the underlying tech stack continued to release new versions every year, I found myself spending more and more time patching up code to fix issues reported by users. I was patching the same code again and again or doing the exact change at ten different places and messing up in multiple ways. Since these applications were mission-critical for my clients, there was no way to avoid this.
I realized that behind-the-scenes, "boring" concepts of planning, refactoring, discussing with team members, and architecting were essential for my future as a developer. These practices allow me to spend more time on the "fun" aspects of development and less on the "boring" stuff.
It's similar to going to the gym. It may not seem important in the short term, but it's essential for a healthy long-term future.
You could also consider agency work. There will be more process, a lot more checking in with stakeholders, but you’ll build a wide variety of greenfield projects, and sounds like that’s important to you.
after writing many features, adding the next one gets harder and complicated in my head, that's when I know that the code needs to be much cleaner so that adding the next feature becomes easy.
It often means that I delete code / completely skip a code base that went in the wrong direction and overcomplicated some part unnecesarily. And that's when my code gets much more elegant by achieving more and being simpler at the same time. I love it.
I look at it like professional sports. There's a saying: you're paid to practice, 'cause the actual games are fun.
That's the way I look at it. I'd write code for free, more or less. My employer is paying me for all the other crap I slog through: gnarly legacy code, weird bugs, endless meetings, etc.
As other people suggested you may consider switching to a green field project. Usually when there is a new product to write, you don't have a legacy code baggage and business is usually pushing for fast delivery and iteration. There is a lot of freedom, as long as you can deliver a working solution. Startup would be a good choice about 3 years ago, today I would advise to be more careful when changing jobs now.
The job is not without any hard parts though. I may have a lot of freedom to build a product the way I want, but I didn't have any technical colleagues to discuss problems (or joke around) with. A start-up naturally comes with a lot of uncertainty. You have to make a lot of hard decisions and then make sure they were the right ones. And it might take some time before I make as much money as I did working for someone else.
Every job will have pros and cons and you'll always need to make some trade offs.
I have worked places where it was pleasant working with others though, and those have been small companies. There always seems to be a lot of bullshit once a company reaches a certain size.
But that's not it, I like writing code, I like refactoring code, I like debugging code but I don't like that it'd be held as a knife to my throat every day forever.
At my job there has never been a slow day. At one of my past job our manager had to go for 2 weeks and that was the most productive we had ever been. We shipped more , built more , collaborated more, and it all felt like a breeze.
Right now I feel as engineers we have been subjugated to being a coding monkey. You are told what to do, when to do, how to do and how much you should have done by now. You are monitored, of made to dance, and forced to be glad that you even have the chance.
I've spoken to people who have been in the industry for 10 15 years and they say this was not how it used to be
Or do you consider refactoring something like "OK, we have 2 weeks to refactor the codebase" - because IMHO that's not a great way to do it. Instead, at work we follow the scout rule: make the code a little better each time you touch it. This is still refactoring.
And we don't do sprints either. We just have a priority list and however long the next thing takes is however long it takes. We do rough estimates but don't hold people's feet to the fire. Rarely we have deadlines and things DO need to be done by a certain time for that, but that is due to external marketing/etc. This usually only happens a couple times per year.
Learning how to deal with this is a career skill. Remember that to your employer, you are not a coder, just as a firefighter is not a hose operator.
To your employer, you are someone who delivers, maintains, and supports software. That requires a lot of non-coding work, and as you advance in your career the time demand for the non-coding parts of the job will increase.
If you know how to deal with processes -- how to streamline them, avoid them, delegate them, and use them to your advantage -- you can build the kind of role you want. So, the good job for a person like you is a job where you understand how to work the processes in your organization.
I love solving problems and fixing bugs. I LOVE optimization (when appropriate). But these are like 10% of what I'm paid for and I appreciate it can't all be the fun stuff.
Unless you're an owner or a shareholder you're essentially a skilled laborer. Clock in, ply your trade, clock out. If they're jerking you around on hours get a better job or "quiet quit". Do things you like and feel fulfilled about in your free time, it's better to take joy and meaning in the society that you theoretically are working for the privilege of living in rather than looking for that satisfaction in your work.
A quote I often think about from an article titled Smart Guy Productivity--"Son, I don't go to a place called fun, I go to a place called work."
Well you might not be aware but refactoring and rewriting are essential to any good codebase. No software is perfect because we aren't, and if you don't constantly keep fixing things (refactoring is fixing bad design), you will end up with a bunch of garbage to collect (pun!). Regarding methodologies and frameworks like agile and scrum (which includes sprints), you need some way to organize shit in an organization, real world problems cost the companies a lot of money, which in turn needs to be controlled as best as possible, agile & scrum are one of the ways we handle such things. I myself am not a fan of "trying to control the world" but it's necessary, I gotta suck it up and keep myself in harmony with others.
> I'd rather get to value now by making something that just works(and is adequately tested) than engineer something thats future proof but takes longer to get out.
This right here is why people argue over tests. So you believe you don't like rigorous testing, which is your opinion and it could/couldn't be valid based on the situation. If you are developing a program that controls airplanes, you need to make that as flawless as possible, otherwise you'll endanger lives. But yeah, if you're building a website for a small sweatshop, you can ignore tests and risk the occasional bad user experience that might happen due to your bugs.
All this being said, to answer "What are some good jobs for a person like this?", I can assure you, you can find lots of jobs you will like if you understand why these things exist. I have worked on a project that management preferred to avoid tests and keep things flowing quickly, so your "getting shit done" mentality might be satisfied easily. Try figuring out exactly what you dislike and WHY you dislike them, only then you can figure out what kind of company (maybe smaller-sized ones) will best match your liking.
I think there are parts of the process that people enjoy over others and that's based on many factors, personality, company culture, managers, coworkers, process and tooling, etc.
You don't have to enjoy every aspect of it. Just like enjoying cooking, and not enjoying doing the dishes.
The important part is being professional, doing what's asked, not being negative about it, and look for opportunities to improve that part of it.
This is what Albert Camus described as "absurd". I suggest reading "The Myth of Sisyphus". That book will shed some light on how one should live in this funny world.
Ask around places (like here!) what their SDLC is like, and if they ask you what an SDLC is you may hit onto an ideal company )or the worst possible one :-) ).
Probably don’t bother with consulting or services firms. Look for industries that can benefit from software but maybe doesn’t have big “enterprise” players yet. Consider areas like embedded and IoT where you can pretend it’s the 80s and you are shoe horning features onto tiny CPU’s with little RAM.
Alternatively, code as a hobby on the side, if you have the time and will power for it.
When I work outside the constraints of my day job, programming is a fun creative pastime that makes the hours fly by. Last night I was up until 4am just hacking on something I was interested in. I honestly didn't notice the time go by (probably not healthy, but hey I was having a lot of fun so it's fine for me)
The engineers I really respect often say similar things. There seems to be a gatekeeping class of software engineer who've been overfed on design patterns and enterprise software dogma that suck the fun out of it in big teams.
Recently this year I switched to a job that gives me hard problems to solve and turns me loose on them. I still need to attend standup and planning meetings but management is very hands off and respects my time. My productivity and love for my job has multiplied incredibly.
I think management can be a force multiplier or a complete anchor depending on their attitude. Some people need to be managed to be kept on task but for a lot of us who have a love for programming a hands off approach is much better in my opinion.
Personally I think I enjoy solving problems with just enough tech. I roll my eyes when I see hyped tech/practices tossed in with everything. I know somebody that works in a hospital as a unit clerk, and they supposedly use JIRA and are Agile.
In short, there's a lot of fake work.
We need a reboot and a flight back to utility. But it was so hard to pull off in the 90’s, I’m worried we never will recapture software development from the people who hate to program.
Nope. I love the engineering aspects that go beyond "Just programming". I don't always agree with some of the details of how those processes work, but it's all fundamentally important stuff and I enjoy working on it. I do like to keep processes as lightweight as possible though.
There was a fashion for a while to call people "Software Architects". I do not know what happened to it but I fantasise that some architect society got busy and put a stop to it.
I am a computer programmer. I do things that "software engineers" do, but I do not lie about my qualifications, which are all in science and commerce.
Computer programming is a noble craft, we do not have to put on airs.
What really gave me back the love to programming, building and even some corporate bullshit was doing my own things. Just solve a small problem, get really good at it and if you get bored just start working on the next thing.
You choose your own tools, your working hours and how big you want to get. My suggestion is to stay small and safe time for new projects :)
I like:
- Designing and architecting software
- Writing new code (e.g. new project or feature)
- Refactoring and rewriting existing code
- Automation: finding new ways to do things faster and eliminate mechanical processes (not just new tools, but knowledge, e.g. learning algorithms so that when I see a need for one I just up an existing library or snippet instead of re-discovering it myself)
- Using Linux and command line tools (related to automation, but also setting up big servers and processes is cool)
I don't like:
- Debugging
- Writing "hacky" code (prefer to write code which should last long and be maintainably)
- Testing
- Sprint/agile and other long processes
- Certain languages (e.g. JavaScript) and
I really don't like:
- Working on projects where the code quality is bad
- Anything mechanical which can't be automated for some reason
Anyways the point is that different people like working on different things, a decent number of people like doing most of the things which you hate and vice versa. So you sgould try to the right job and position where you can work more on the stuff you like, and less on the stuff you don't like. It's not software engineering which is the problem, it's certain parts of software engineering, and while you like can't entirely avoid all of those parts, in the right company I'm sure you can focus less on them and more of the parts you do like. Or, you can always try to get some easy job for the sake of getting paid, and do side projects and open-source work
And not only engineering vs programming or relationships vs love making. If you pay attention, many other aspects of life are like this too: — do you like learning but hate school? — do you like hiking but hate waking up early, driving, and sweating? — do you like seeing new places but hate planning and getting there?
Granted, sometimes some people manage to arrange their circumstances such that there’s no dichotomy there. But most of the time, on average, this is what it is. There are two ways of dealing with it: accept it as a fact and learn to deal with it or try to change your circumstances with the understanding that there’s a high chance it’s going to be the same at another place.
I have been blessed to have really great managers who have been able to insulate the team from all the BS, while allowing us to unleash our creativity and talent in making great and useful software.
Basically, they deal with all the pain so we don't have to, and as a result their teams have really delivered great value for the company.
If I had to make money by coding, this all would be gone.
So: do another job and code for fun. :)
alternatively, consider that it's just a minor component of programming in general: it doesn't deserve to be called a field: just like "using sandpaper" is just one of many activities within the profession of carpentry.
we do SE in order to program.
You're in the wrong job.
A developer has to keep on top of tech industry or they'll become a dinosaur early and find trouble getting work after you lose your job (just ask Java devs who steadfastly refuse to move off anything but Java 8).
Firefighting issues ("incidence response") due to lack of software engineering is not enjoyable when you've just manually deployed to production from your desktop computer and put the wrong build on that has migrated a prod db schema used by millions of people to one that isn't compatible with the rollback version of the software. And you'll be fixing it across your holiday and weekends.
There's a reason these processes are in place - and its to stop the wild west cowboyisms bringing down the company.
For projects I'm usually involved in: this means being disciplined, writing good quality tests, keeping code clean, documentation and following the various practises and conventions. This, if you're doing it properly, means you'll be able to ship code much faster than if just "programming".
I use scrum by choice; but you can deploy a lightweight version that cuts a lot of the bullshit if you have a good team.
If you're re-architecting things then that's a huge red flag. Unless the underlying assumptions have changed enormously or you're working for a start-up who had inept "programmers" (like myself 20 years ago) YOLO'd V1 then what you're doing ain't engineering.
I took this off of the Wikipedia article for "Engineering", but pretty much every definition I've seen says something like this:
> Engineering is the use of scientific principles to design and build machines, structures, and other items, including bridges, tunnels, roads, vehicles, and buildings
So if you're using scientific principles, i.e. you apply knowledge from sub-fields of computer science such as distributed systems or cryptography, then you're doing software engineering. Sometimes this is important, e.g. you need to understand how a system will scale under load if it is used by a large number of users. Other times it's not so important.
But all that agile process stuff? That's not science, nor software engineering - it's just project management. Sometimes project management is important, such as when you need to coordinate large groups of people, or manage delivery risks. But in my (probably overly) cynical opinion, Agile (in practice, big A, etc) is usually just a heavy-handed way for companies to micro-manage under-performing teams - and at least for me, this is the biggest thing that just completely sucks the joy out of programming.
> What are some good jobs for a person like this?
So given the above, I'd suggest seeking out companies that are working on interesting problems that require computer science principles to be applied, rather than just another enterprise CRUD app where the hardest part is dealing with the business stakeholders.
And avoid companies that require a lot of project management - places where every bit of work requires coordinating a larger number of people than you would normally think necessary. This is most big companies, but also a lot of small companies too.
Unfortunately, this takes a lot of jobs off the table. But if you're able to find something that fits you, that's a great result.
Startups on the other hand don't have time for all the bullshit because they're going to run out of money if they don't actually deliver. It's more stressful, more chaotic, but also more fun.
I like doing all the things that avoids the weird debugging and incident response. Maybe I'm old. I like lowering my mental load understanding a code base. Unit tests are annoying work, but I love the headaches they save. In the end, I love the feeling of being able to feel 'safe' changing and deploying code, and feel like it's going to be rock solid in production.
Programming, on the other hand, is kind of a chore. And I'm happy to see CoPilot, etc...
Software Engineering is disgusting.
Put it another way, say you found a hacking-only job. Would you enjoy commute, having to show up on time when tired, layoff worries, reprimands from manager, inevitable coworkers with personality issues? The only way is to code without commitments to others.
Ironically, once you got your hacking fix in, you might reach a point where you run into limitations of coding without plan and structure and start appreciating early design reviews to avoid wasted work / code reviews to avoid get bogged down by a week of debugging that could have been an hour of hardening.
We need new web UI standards that are CRUD-friendly. Social media and e-commerce have been wagging the web UI dog, but CRUD matters: it's not sexy, but runs the world. Standards improvements or addition possibilities include a state-ful GUI markup language (sort of like the best of YAML, XUL, & QML), and/or do something like Java Applets correctly, learning from security and version/package-management mistakes of the past.
Similar opinion: https://www.reddit.com/r/webdev/comments/r59nzr/i_regret_goi...
SRE/Devops person at a FAANG.
I'm a research software engineer at a medical research institution in Sydney. I'm the only engineer / developer type person on my team, and I work with other microbiologists, physicians and bioinformaticians (who know scripting/programming but specifically for answering biological questions). The system I'm building tracks samples in the lab, patient data coming in from the hospitals, and genomics data from the sequencing lab and bioinformaticians.
I do "engineer" type things, but I have full autonomy and I support the rest of the team. What we do is impactful too — our clinical trial just treated three patients.
I don't write unit tests because I can't be bothered. I do write documentation though, but for myself.
Downsides are: it gets lonely being the only one that does this, and there's no one to bounce ideas off of; no one else knows what you work on or understands what you're building (which can be a good or a bad thing); you're that "IT person" in the back.
Oh and the pay is awful compared to real tech jobs
If you just want to 'get something out now', join a startup. They're full of amateurs churning out terrible code at a rapid pace with no thought to the future
If you hate the process, then it's probably easiest to find another job with process you can tolerate - especially if the current process is working for your company. If enough people are frustrated by it you may have some luck getting the company to introduce a new process, but I'd expect an uphill battle.
If it's really software engineering and architecture that bothers you, though, I'd strongly suggest giving it another try. "Making something that just works" now, is awesome when you're writing the code in the first place, but it's an absolute maintenance nightmare, and it won't be long before you're drowning in tech debt.
A whole team where everybody says "lets just do the first thing that works" may work for a treehouse or a shed, but you'll never build a skyscraper or big project that way.
Sounds like maybe startups would be your jam. Not a lot of legacy stuff to work on, lots of bouncing around to different types of tasks, shit breaks a lot, etc.
The other idea is more of devops/systems stuff working with the cloud. Lots of solving problems with code (orchestrating cloud resources w/code) with not a lot of Project Manager overhead in the right environment. Lot of incident response.
The things we don't enjoy most of the time carry stress and fear factors within, fear can be eliminated with knowledge, stress can be toned down with simplicity, if you already know all this you can turn any process into joy if you are having such responsibilities, or you can make your own from scratch
Researcher
Artist
Analyst meaning a person who works with something like Jupyter Notebooks or VBA in Excel to do non-recurring work. Researcher meaning an academic or corporate researcher who tries experiments in code to prove our concepts. Artist meaning a person making fun things like art, cosplay, entertainment, games that can’t hurt people and don’t need high reliability.
Speak for yourself. Lots of those things are fun. Sprint and agile have more to do with the workplace, sure. But refactoring, rewriting and rearchitecting things can be really fun. The first implementation of anything is going to be burdened by complexity and wrong assumptions. It's only on the second time through that you have clarity. The joy of having the solution work pales in comparison to knowing that the underlying code is a thing of beauty. Like a jacket with a beautiful lining, paying attention to the details that nobody sees makes your product inherently better.
> Finding and fixing bugs is a lot of fun.
Refactoring is a part of this process. Squashing bugs and edge cases is fun like playing whack-a-mole, but it's also fun to see the bugs and edge cases as a chance to question your assumptions, is this really a one-off, or could I prevent all bugs of this kind in some way?
What if you just did programming but we’re told how to program?
Sometimes people get burned by processes and sometimes people just don’t want others opinion and want to do their own way in their own world.
I honestly go through ebbs and flows between the two and honestly I think a good middle ground is some process. I’ve learned a lot (and literally did just yesterday from an RFD review) so I can’t dismiss process altogether.
If I want more autonomy I’d work at a smaller company. I do miss the days of my old company where I wrote so much of the system. From payments to auth to order and fulfillment. It was fun, and I knew everyone in the company. Thinking more about it writing this just now though, I think my code would’ve been better with more reviewers nudging in the design process.
You might want to consider doing some open source hobby work as well btw; I am doing that rn.
Programming is writing code at one snapshot in time.
Software engineering is mapping that code backwards and forwards through time, making sure it works with what comes before and what comes after, in both technical and business aspects.
Programing is first and foremost a craft which just so happens to employ a lot of people and tends to pay pretty well. There is nothing wrong with keeping programing as a hobby and finding a different career. I personally know a couple of talented programmers that work in other industries.
This kind of mentality is way common in some other industries. Woodworking and apparel jump quick to mind. I bet the number of talented woodworkers that don’t have a woodworking career is pretty high.
If you don’t want to change careers, then there are some companies that value the craft more then others. In my experience the smaller the startup the more they value the craft (which unfortunately is negatively correlated with pay). Perhaps you can love your job more if you worked at a different company.
I've found that if I'm in the software department, the performance review and metrics and overall culture lean towards "how good of a software developer/engineer are you?" as opposed to "how good are you at solving the business's problem."
That said, it's tough to make progress outside of the software org. Personally I'm doing a masters in math right now and thinking about a PhD in it as well, because I need skills outside of software in order to be able to make programming part of my job but not my career.
The industry is driven by fashion and medium.com-led development.
If you're not jumping on the in-vogue band-wagon then you'll be punished.
After a while you've seen it again and again and you want to avoid it. But that puts you at odds with the industry and employers.
Science (and Computer Science) is all about getting a giant telescope into space. Tuning the entire process to discover and keep working when it finds some new and unexpected. It’s very concerned with what might happen in the future, and uses those predictions to feed into current decisions.
It sounds to me like you’ve got it backwards. It’s the science you don’t much enjoy. Maybe try your hand at something like project management to get closer to the engineering role?
Now, to be fair, I also like the common practices in the industry too. Scrum or kanban, ticket creation and estimation, and daily stand ups. When you're part of a team you need a lot of communication and effort to keep everybody working in the same direction. Besides, managers want to be kept informed. The how is not as important as the why.
* Find smaller company
* If possible find company that does some real business and needs software to run it. These are the best from my experience. I am not an employee but this is how I find my clients.
* If you hear words agile, process, methodology start from the beginning
* On the interview you should be asked what have you accomplished and how, how you could help to solve their problem.
* If instead they would start grilling you on what that tiny dot in this particular language means, ask you to complete particular tests, write code during interview start from the beginning
Obviously you should have some portfolio, some verifiable references and know what you are doing.
Take a magazine like POC||GTFO and see what real engineering looks like. Recently I came across a nice challenge there to write a program for which the compiled binary must be a palindrome. Good stuff. If you can afford, switch to something like embedded development. You'll probably make less in the short term but you'll get to keep your soul.
I'd argue this is true of any engineering discipline. For example consider this analogy: we build bridges to solve the problem of being unable to cross to the other side. But we could also solve this with, say, a boat, to paddle ourselves across the body of water instead; in fact, that's a much more immediate solution that solves the exact same problem. But is it sustainable? Is it scalable? Can it handle traffic? To address these concerns, we _engineer_ a bridge.
Software that's meant to service a lot of people can't just be written to solve a particular problem today -- it must be _engineered_ so that it's future-proof, which is to say, easy to scale, easy to read, easy to refactor, etc. So often the simplest programming challenges become particularly difficult and often interesting engineering challenges.
Finally, to actually answer your question, it entirely depends on the company, the size of the team, and the commitment to code quality and engineering that that team has. Working at Google on the search team, for example, wouldn't be a great fit for you because every line of code you write has to be engineered! But working at a startup might.
But this comes with tradeoffs. Often times, the solution you write will have to be rewritten if you want your product to succeed. Refactoring and re-architecting things are a necessary evil as technology, hardware, and languages + frameworks change over time. I've worked at places where I've found myself repeatedly having to work on the same things over and over again because of how poorly engineered they are! If you enjoy programming and solving new problems and you want to have a career doing that where presumably you're building some sort of product, you have to engineer at least somewhat reasonable solutions today so that you can work on something new, exciting, and cool tomorrow.
IMO that is the gold standard for 80% of professional software. Ship. Fix bugs if needed. Ship.
If your org wants to do pointless cargo cult process junk and this troubles you, switch employers. Preferably to a place with old steady hands.
Software engineering is not the problem. Problem are orgs that invent pointless process and encourage the managerial types to get some more process in. Not all shops are like that (yet… at least).
I suppose you can probe this at the interview. Too little process and too much are both res flags. Too little:no CI, no testing, that sort of stuff. Too much: like porn, you know when you see it.
After I've written this I realise it sounds super depressing. I would honestly not mind if there was an answer to this :)
I’d call the problem solving that balances technical, human, economic factors and produces great code “engineering”. Knocking out code on a whim less so.
My message is just be careful who you’re speaking to when saying you don’t want to engineer — I’m my book you do.
I went fully remote way before COVID. I've figured out how to cut my work with sawdust to get paid at work, and nowadays I'd say I spend more hours per workday on personal projects (programming and otherwise) than company work.
So basically, I recommend making your job a low priority and focus on finding a remote company who will be happy with your output at that level of focus. Then you can get paid to do what you want in a way.
The one thing that's getting more and more prominent that really hounds me is DevOps, tooling and deployment related stuff. Be it containerization, credentials, complicated toolchains and dev environment setup, I absolutely hate how convoluted all of this has become and how little anything of it has to do with the actual software you're supposed to build.
Pure coding honestly is boring after many years. There's a limited amount of times I can write code that listens to some event, manipulates data and passes it eventually to some api.
Doesn't matter if it's augmented reality, databases, cli tools, it's always the same thing.
On the other hand I find much more interesting setting up projects, their DX, their architecture, solving clients/customers problems under limited time and budget constrains.
I am passionate about programming, even the parts you don't enjoy like rearchitecting and refactoring, those mean "applying knowledge to solve a problem" which I really enjoy.
I detest the bureaucracy around these (teams, requirements, deadlines, etc.), but those come as either life requirements (a company must make money in a reasonable manner), or the current status quo of your entire project and its teams.
The latter at least can be resolved by leaving your company.
Actually dealing with code is a pain in the ass. It's better than digging a ditch for ten hours a day but not really enjoyable for its own sake either.
But if you are into putting together new projects, possibly you might enjoy working at small consulting companies who are into building prototypes/MVPs.
But if you join a company at post MVP, you might not get what you enjoy doing.
Optionally, there will be some pure R and D jobs, which may not have the same processes that come with software engineering but you might have to read a lot of theory though.
You're more likely to get this being a contractor or at a small company. Most of it's going to be a matter of asking the right questions though - you probably want to have some well defined area of responsibility and not have to work with anyone else in it.
I don't consider Agile as software engineering it's managed hackery intended to keep people sprinting until they drop.
Programming as an aspect of analysis is however fun.
The best thing I did in my career was move the hell out of SV and started working for a manufactoring company building internal tools, scripts and programs.
It will be hard to find the perfect job, but you will probably have a better chance outside of SV where every company tends to be a copy of one other internally.
Figuring out why some cloud formation stack BS isn’t working just isn’t fun to me. I prefer the kind of work where I can solve the problem by surfing through the actual code and figuring it out.
It sounds like you just want to stay in your comfort zone, not do anything that your don't consider "fun", and don't want to learn anything you're not comfortable with, and don't want to think about the future or any of the rest of your company.
Some of what you're describing can be found in for-hire firms that build out software to spec for other companies. The risk (for you) there is that, sometimes, you might have to learn or use new tools/tech.
At least where I have worked testing is just as process and meeting driven but the meeting are focused on test coverage not the test tool dev aspect. So I get to hack together new test tools in whatever way I like. The only process bit is I have to document how to use it well enough that someone else could run the test case.
Although I'd argue that refactoring and rewriting are part of the programming fun.
"sprint", "agile", design docs, red tape, bureaucracy, policy, and meetings are the crappy part.
I just want to write code. I will work on the most boring problems. I don't care. Hard or easy. Features, infra, whatever. Just let me write beautiful code.
I have mad respect for people like you, and always wished I was able to think in your way better. You should find a startup that has an engineering team that will complement (not mirror) your skills.
Seeking endless fun is vain and meaningless. Doing meaningful work requires discipline and perseverance, it won't always be fun but it'll be more satisfying.
I just want to build cool shit that solves problems. It's fun.
In that case I suggest finding a commercially-backed, open source project which you are passionate about. You can have best of both worlds - plenty of bugs and community interaction, all while also making a living out of it.
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999990999999999999999999999999
Hobby vs. career.
You basically want all the fun creative parts without the process and review and maintenance required for a product that has responsibilities.
It's like building a shed in your back yard vs. building a skyscraper in a city.
This is a question that came up a number of times when I worked at a company where the developers were not enjoying working there.
Even though, in my resume I use Software Engineer/Developer of course, because "programming" does not bring you money.
Why so? To be honest, I think that we, the programmers, rarely make real things. Real developers make buildings, software developers do not make anything real rather than text on computer screens.
In its root the purpose of programming as a job was developing programs that would automate processes of real economics. E.g. to automate industries(manufacture lines) or maybe to optimize transportation logistics. Today's economics is post-industrial economics. Basically, the economics that focuses on control of human attention and selling this "control" to other actors. Computer technologies is a big part of it, but it is loosely connected to automation.
Only a limited number (a big number, but still limited) of people are capable to program. This is quite specific kind of mind. And only a small subset of programmers are capable to think in terms of programming and in terms of how to influence other people (the true value of post-industrial economics) at the same time. So, the ordinary programmer, to be honest, does not fit well in this system.
On the other hand there are a lot of people who can't program, and they loosely understand computer systems, but they are good at the art of spreading influence. These people are primary agents of post-industrial economics, and they are truly rule this system. They occupy high positions in companies and corporations, and they spread their way of thinking and ways of management to other minorities (including programmers).
We, the programmers, have to deal with this situation somehow if we want to have our part of the economic pie. Perhaps, through the trade-offs and compromises. But we have to admit that we are only minor cogs in this system. That is how it is in the current Economic Formation.
Looking for better jobs in companies that value pure programming would inevitably imply of looking for companies that don't perform well in the post-industrial economics.
The solution that I see is to do an ordinary "software engineering" job the way the rulers of the System want us to do it, and in the way we don't like to do it. At the same time we can working on the stuff that we love, and in the way we love to do it solely (or maybe with cooperation with other programmers). This is the best practical compromise that I can think of.
The requirements to make things scale- Being part of a team with procedures and processes kills the fun for me.
We're all in agreement that the real world is messy and stressful to deal with. That's life!
Academia, using programming in another science. You can program all you want there but you never have to do anything like software engineering.
That's why I switched to management.
Not the attitude I'd expect from someone that claims to "love programming".
Bug hunting mercenary would be my ideal job. Not sure how to find jobs that have that need.
So I tend to gravitate to early startup life where it's all chaos and unknown and getting things done quickly is most important.
And agile can go burn in hell, however 'correct' you are doing it.
A good job tends to be one not in software
- Education
- Tech evangelism
Pretty much every problem an engineer deals with on a daily basis is either self imposed or imposed by other engineers. Most of the problems aren't even real problems because most real world issues have already been iterated upon. Most of what we do is fixing our own mistakes. Being a software engineer sometimes feels like being a self-licking ice cream cone because, if it weren't for all the new frameworks and the lack of effective team organization, a substantial fraction of us would have nothing to do. Well, besides hobby coding, which I guess can be a good thing, but I don't even know that many programmers who actually code anymore as a hobby.
What needs to go away are most of the paradigms that still get pushed around.
The tools themselves are actually pretty good. We have speedy JIT languages, package managers on every OS, no more Internet Explorer, awesome free IDEs, and more help and documentation than ever. What's gone horribly wrong is believing that we need more tools for every task domain. A mistake we've made is believing that X is "considered harmful" and to only apply the "best practice" in every nook and cranny no matter how insanely complicated things become. We've made the mistake of believing every problem is a matter of scale and almost never poor engineering. Poor engineering? Impossible! That is unless it's that of the guy who came before me and left the company.
I can go on. Why do we still use frAgile methodologies all over the place when no one can adequately measure whether it's more effective than another workflow? Why is it that every single company I work for ends up using Scum methodology but never bothers actually measuring whether performance improved as a result? Why are we so opposed to documenting our work? Why do we keep bending over backwards to make websites behave like applications and still screw it up most of the time? Why are we obsessed with code coverage when it's only weakly correlated with the number of bugs that manifest? Must we keep adding more and more lint rules?
To top it all off, it doesn't matter what you think unless you are one of the 10% that has a real say in how a codebase is going to take shape. The reality is most software engineers have limited capability to take the initiative for change.
But hey, it's a good profession no matter how crazy it can drive you sometimes. I'm not saying people should do it forever, but we can do a whole lot worse.
At the same time, we ought to be doing a lot better. With the exception of AI/ML, I believe software engineering is in a bit of a dark age.