How can I avoid using LLMs as a software developer?
asked 8 hours ago by @qa-rwpyboecgd95lgl0u7wl 0 rep · 1,688 views
Introduction
I've been developing software very successfully for many years. The reason I have chosen this profession is multifold:
I'm a creative person and I need to create things
I have an insatiable drive to think
Financial compensation one may expect for doing this
I can do my thing without constantly socializing with superficial small-talk
The drive to solve real-world problems and to be a force for the better
To work from home
It has been a great ride to do this and I achieved quite a lot of things. Yet, the industry gradually deteriorated. I do know that sometimes libraries and APIs are needed, but I witnessed too many times the drive to use some library only to solve some problem we could have otherwise easily solved, which to me meant that the specific decision was "going with the vibes" rather than a rational choice. Sure thing, there are libraries that can save us weeks or months of work and easy to integrate while being well-written and I do not argue against the use of such libraries, as the realities of software developer forces us to take the shorter route many times in order to save costs and efforts.
And then came in managers, scrum masters, standups and all kinds of things extroverted people forced down our throats, believing those are helpful. Sure, I do recognize the value of periodically reporting what progress we had and what blockers we face, but, to be quite honest, we have:
issue trackers we also need to maintain which provide the information of what the progress was
ability to comment on tickets when we are stuck, tagging those whose attention we are seeking
ability to PM people if there is a blocker
So a good compromise is to have a daily written short summary of what is being done and what the problems are, whilst daily standups are causing interruption of the work and then having to rethink what the plan was once the meeting is over. I do not tend to face blockers, but if it happens, I will invest a finite amount of time trying to solve it and do research if it is still unsolved again for a finite amount of time and finally messaging the person who may know the answer if solving the problem took more time and intended. So in the rare case when I enountered a blocker I did not have the means of waiting for a whole day for a standup to mention the issue and then later wait for help, so I reached out to whom it concerned in such cases. Hence, at standups my "blocker" section was empty usually because there were no blockers, occasionally because I removed the blocker much earlier than the standup. My listing of what I solved was oftentimes uninteresting for those whom did not actively work on it and vice-versa, lots of people were mentioning what they were doing and what blockers they faced and many times those comments were completely uninteresting for me as I lacked the context of what they were doing exactly and what the goal was.
The latest vibe is to use LLMs.
The merits of LLMs
Since LLMs have been trained on data publicly available on the internet and hence can provide summaries and even generate code very quickly, some may find it useful. Its summaries are a click of a button away for things that previously took a while to search for. It also generates code and it is a quick process, so some argue that it's increasing productivity.
Problems with using LLMs
As a software developer I have serious problems with the usage of LLMs. I will outline what my problems are, dissected into categories. I do not expect others to agree with me, since we are supposed to be thinkers and if someone thinks or feels differently, that's fine by me.
A. It is thinking instead of me
This is very very subjective, I know, but we do need to be honest. As mentioned in the introduction, I have chosen this profession because I want to think and I want to create. If the LLM does the thinking for me in some areas and I am to prompt it and wait for its answers, then I am no longer a programmer, but a quality inspector. Sure, I'm doing that while reviewing PRs already, but not being allowed to write my own code is crossing a line.
B. Cognitive debt
While doing software development, doing the research needed to implement or fix a feature I am getting context, valuable information that helps me grow with the code and to reuse that context later at other problems that partially or entirely share context with the initial problem. Not getting that context in the order of getting more productive (which may or may not be true) does not allow me to grow as a developer.
C. Atrophy
Atrophy is a real problem. If we don't use our abilities to think, then it gradually degrades, so we will become more dependent on LLMs and less able to do the craft we master at each iteration. Having like 15 agents run and all one needs to do is to review what they produced significantly reduces or even removes exposure to very important aspects of software development which is being lost over time. Instead of growing as developers, we grow our cognitive debt and shrink our abilities.
D. Superficiality
Any deep thinker knows that your thinking depth is different if you solve a problem yourself in comparison to handing it over to someone or something else. So if we are to use agents to do stuff for us, then we automatically lose depth and reducing ourselves to be reviewers of a large volume of code we have not written but are responsible of. I am a deep thinker and having to submit to superficiality is detrimental to my motivation. I have also seen quite a lot of code authored by colleagues whom are smart people, but whom did not notice they were duplicating the same id in HTML, duplicating the same functions in different React components, leaked critical API information, written extremely low-performing solutions ran a query for each member of a set rather than running one that finds all and it's been frustrating to see these sometimes long PRs and comment on every fault left in there, it was also frustrating to read PRs which seemed correct with the limited context I had about the ticket, but when actually testing it I realized it was completely wrong. Yet, now I'm being asked (to use a euphemism) to do it myself too.
E. Backdoor
Any context I am giving to the LLM is as safe as shouting all the info from a rooftop of a house in a crowded street. So if I am to use it, I would always need to be very vigilant on what context it is given, to create an OS user for the LLM and to always keep an eye of what info I might be leaking instead of concentrating on the work. It's seriously disturbing particularly in the occasional case when some urgency clouds one's judgement.
F. Security issues it may fall into
If I'm writing code, then I keep a keen eye on any potential security issues I may need to address. Since reviewing work is more superficial, by definition I cannot think of a code not written by me in the same depth as if it was my code. If a colleague has written the code then I'm sure he/she was doing his/her best to keep it secure and my second pair of eyes are useful to try and discover what he/she may have missed. Yet, code generated by an LLM has no original author. So particularly when someone works on payment modules using LLMs I am extremely worried for multiple reasons:
that LLM will process that code on remote servers
sensitive information like API keys/secrets, passwords need to be kept out of its context, a worry we did not have while the only person having access to our dev env was ourselves
if the LLM touches very complex, interrelated stuff and misses a detail that may have large security impact may be completely missed by the reviewers of that LLM code, or else the reviewer would have to take a very long time to reread code last read years ago (because context was not being refreshed, see point B.) which defeats the purpose of LLMs
some solution it may have downloaded from the internet and "inspired" from it (plagiarism is the right word here from unattributed sources) may have been completely secure on its own context, but not in ours for reasons that we would only detect in case of deep thinking which is seriously limited (see points A., C. and D.)
trusting some code I did not touch at all but which was completely rewritten without my knowledge in a way that makes the code I'm writing insecure for relying on a previously made robust solution that was vibed to something else in the meantime
G. Unpredictability
The same set of prompts may very well result in different solutions. Earlier if I found some golden road to a solution, that idea used to be reusable, because I mentally abstracted the pattern I used to solve the concrete problem and that abstraction was reusable either as it was or with slight modifications for later similar problems. Now, if I'm authoring prompts and getting thousands of lines in response, assuming, perhaps overtly optimistically that the solution would be very good, in order to reuse the same pattern I will need to very carefully study the solution, burning more time than I would have had if I had to code it myself, the alternative being to conclude it's correct without careful study or learning. And this is the best-case scenario. In other scenarios I would prompt all day in the hope of getting something tangible for something that used to be an easy task.
H. Accountability
I'm extremely uncomfortable to be accountable for a code I did not write nor was I given enough time to study it.
Let me elaborate on this. Writing code has never been a culprit for me. It's the thinking that takes the effort, so if I need to reduce effort in order to get more productive, that means I need to think less and prompt more. Which generates more lines than the amount I would have written, based on a style that I'm unfamiliar with, so studying this longer code would take me way more time than writing my shorter, more robust code which I understand already before even writing a letter.
So if I am indeed getting more "productive" by using LLM, then by definition I will let parts of "my code" slip my scrutiny with me superficially scanning it over (if at all, depending on how much burden I need to lift in what amount of time) and therefore I will take responsibility for something I do not fully understand nor trust it wholeheartedly.
I. Code bloating
We always need to aim writing less code to solve the same problem, not to embrace bloated code generated. Back in the day I used to pick up the spaghetti code of low quality devs and reduce it as much as possible, differentiating database code from structure from style from backend code from frontend code and apparently I'm being expected to generate the spaghetti code myself.
J. Potential brain frying
Of course "increase of productivity" is euphemism to "solve" more problems in the same amount of time for the same money. So if my productivity increases by 10% (a very optimistic estimation as it may very well decrease due to use of LLMs) but I'm "rewarded" by a 60% increase in expectations and the obligation of rapid context-switching between many agents, that's not good for mental health.
K. Reliance on something that might not be there
Prices might be increasing, servers may get down. If I heavily rely on LLMs, then once they stop being available, for whatever reasons, I'm left in the dark, with less abilities, no context accumulated for a while and a lot of bloated code I do not understand.
L. Detrimental results on the environment
The data centers waste a lot of energy and water, they are very bad for life around them and I do not want to be part of the problem by using them and contributing to their financing.
M. Epistemic collapse
I very much care about the general intelligence of the members of society around me. Since many are increasingly using LLMs to do work they used to be able to do themselves, we already are at a stage when people start to forget how to write an email, how to pronounce their own thoughts, how to focus and think on something deeply, how to read a book, how to properly reason (and the bar was not very high on that one in the first place), I do see a quick degradation of cognitive abilities at large, a zombification of society.
N. LLMs potentially eating themselves
As more and more LLM-generated content floods the internet, the amount of useful, genuinely intelligent information to collect decreases in ratio over time, so LLMs will increasingly learn from content authored by them or content created by people using LLMs to create the content and the models will possibly degenerate as a result.
O. Autonomy
As a software developer I am coding for money and therefore I need to fulfill tasks I receive. My position is that as long as:
my performance is equal than or better than of peers
my work quality is acceptable
I am reliable
I'm helping others
I'm finishing things by deadline
company secrets are safe with me
I should have the autonomy to decide how I work. If I'm told how I should work, moreover, if that way of working is something I find unethical, then a very important principle was breached and created a precedent. If my autonomy as a software developer was breached now, what's the guarantee they won't introduce unilaterally more problematic rules?
P. I am an introvert
I do not want to socialize too much, I'm more comfortable alone than with others. Sure, I can help whenever help is needed and I can reach out for help when I need to, but normally I would like to be left alone to do my thing. Having to constantly chat is something I hate doing and if the thing I'm chatting with is not even a person, then it's all the more worse.
Q. Contributing to the problem instead of solving problems
If I'm using LLMs then I support the incredible waste of resources, environmental damage and obscure or even malicious plans of LLM owners. Palantir has a really troubling manifesto and I really do not want to contribute to all this.
The situation
I have a proven track record of excellent results. I have a lot of contextual knowledge. I help and helped others many times. I am not slower than others whom use LLMs. Yet, I'm being demanded to use LLMs and they keep a leaderboard on who is using up how many tokens, which I find very troubling at personal, professional, philosophical and ethical levels alike. I really like to develop software but only if it is me who develops it. I find it hard to understand why would it be useful for the company if I wasted their money to prompt for solutions I can do. I would find this kind of work uncomfortable.
The advice I'm seeking
I do think that in 6month - 1 year this vibe will fizzle away and some companies will need developers to fix their vibe codes. If I'm right, by that time those whom used their brain all along and did not give in to the pressure will thrive. If I knew for a fact that this will happen, then I would take a 6 month-period off work, developing only hobby projects and letting the industry learn a hard lesson without having to face it myself.
However, if I'm wrong, then this would be a waiting for a result that never comes, wasted up resources and seeking for work with a 6 month gap that would be not so simple to be explained. I'm seriously considering quitting my current cooperation, even though it has been very good for both sides. This latest move of the other side is hard to accept or tolerate, yet, I have a responsibility to earn money with honest work and while using LLMs is not what I am looking for, it would be good to know when this enshittification of the workplace ends, if it ends at all.
In the meantime, I do see the symptoms of a global economic crisis when even with my past it may be hard to find work, especially without using LLMs. Because it is not worth it to leave a workplace because of forcing me to use LLMs and joining another one that does the same.
So, is there a way to efficiently find work that does not require the use of LLMs?
P.S.
Thanks for reading this long post and please excuse me if you find it less technical than my posts in general. However, I think this is a valid developer question that affects everyone here, even those whom are more open to use LLMs than me. Because, at the end of the day, such a use of force to use LLMs may have the hidden goal of replacing devs, so even if you are enthusiastic about LLMs, you might find yourself looking for non-LLM work at some point.