I'm also a freelancer, and I've also said exactly this. I was happy to profit handsomely from the incompetence and apathy of my clients.
But in recent years I realized I was wrong. It doesn't matter how well it pays, I feel like I'm wasting precious chunks of a very limited lifetime being a disciplined and methodical janitor for my clients.
Now it's more important to learn, to stretch, or to contribute to a more worthy cause than just getting paid well to do shitwork.
Time well spent is worth far more than anyone will pay for it.
The unintended side effect of prioritizing learning over invoicing is that revenue now seems to take care of itself. It's all a bit Zen.
If the insist on doing it the way they want, I am happy to admit that they may well know more about the business than me and do it anyway. But I'd rather have a reputation for steering my clients in good directions with both advice and direct technical help. That way people will be confident I'm not trying to take them for a ride. Plus better technical specs out of it and clarity around what needs to be done.
The best one can do is be patient, and help them do with what they got.
- to them, I'm helpful. So I feel useful, because I got actual humans that are thankful that I'm here. I need that to live, to be happy.
- the money allows me to have a very good life style, so I can enjoy many things I couldn't otherwise in what you call my "very limited lifetime"
- high rates mean less hours, which mean I get to spend time with people I love, have fun and contribute to open source projects.
It's not perfect, sure. But it's pretty sweat.
I wish people would have told me that years ago.
One extreme example is there is this homeless guy who is a retired very good teacher who has a way of both teaching kids and correcting problematic behaviors. Unfortunately, he doesn't advertise and he doesn't up his rate ($20/hr IIRC). It's a shame.
Unfortunately, for me, being a do-gooder didn't pay very well.
I often wonder if I should have stayed in the rat race during my most productive years and then used that nest egg to fund my activism.
I honestly don't know.
Same with the people I help technically at work. They're all brilliant scientists. They get confused by the difference between VGA, DisplayPort, HDMI, and DVI. Or get extremely frustrated when a button on the UI moves.
I think software developers don't quite understand how big a deal it is to a 70 year old when the button to do something moves. Probably a quarter of my day is often just figuring out how to reconfigure things to their liking or else spend an hour retraining them because of some unnecessary UI change in Windows 10, after which they will still forget and ask for help again.
God forbid you break apart an application into multiple programs or have online activation or a license server. I think I hear at least a daily rant about how you can't just buy software anymore and now you can only rent it for a bit.
We have versions of software that are 13 years old because the publisher switched from an unlimited permanent license to a per-seat per-year license model. Rarely worth it when the instructors get confused by new software anyway.
Back when there were RS232 (aka 9 pin) connectors on PCs, my dad's computer had two mail connectors, one CGA and one serial port (I think it was a serial port, but I'm not sure, as those connectors were usually female). I took the VGA cable and accidentally plugged it into the serial port. When I turned on the computer, I heard the startup chirping noises, the screen was black for a few seconds, and then white smoke started pouring out of the power supply. I turned it off REAL fast :) Somehow the computer still worked after that.
EDIT: changed VGA to CGA
I don't see how that's possible without really crushing it in there. Also, CGA & EGA were the same connector as serial (DE-9), which would've been easier to confuse.
It could've been worse: I knew a guy in high-school who plugged a parallel printer into a Mac classic's SCSI DB-25 (the same physical connector as a parallel port, female on the computer; DB-25 serial is a male connector on a PC) and baked it into "apple pie" with that "lovely" magic smoke aroma.
My 84 yo mother was technically competent. Currently has mid-stage dementia. Long term recall still remains impressive. Apparently unable to learn new skills, habits.
Every software update is cleaving a few more things from her life.
My siblings and I thought upgrading her to an iPhone was a good idea, some years ago. Initially, sure. But now I wish we had a snapshot of her tech stack from her early 70s, and found a way to keep that working.
It would've been impossible to do this with commercial software as basically nothing has a 25+ year old support life. Because everything is open source, nothing needs to change.
The gesture controls Apple implemented starting with the iPhone X are also very confusing for an Android user, eve though I also use gesture controls on my S10.
But in the end, you'd get used to it as you did with Android.
I have paired up with some terrible programmers, with bad coding habits, weak knowledge of their ecosystem and no capacity for any kind of architecture design, but that eventually did better than me because they worked way more, and were more persistent.
This idea that bad code will waste productivity is not that important if one person accepts to work 30 hours more than you every week, including to fix the mistakes they introduced by writing said code in the first place.
If you can produce something working that satisfies the requirements you can't be terrible in my book, no matter what I think of your style
Agreed on the levels of complexity in basic apps nowadays.
Last time I stumbled on an "io game" built this way, the lack of WASM debugging tools made it very hard to hack at the game :(
Of course, people would say "what's the point" when JS is a thing and widely supported. I wonder if there'd be a) a compelling improvement in performance and b) a compelling improvement in reliability if we just wholesale replaced it based on lessons learned? I reckon even just keeping JS and eliminating implicit coercions would be a huge improvement (as well as maybe automatic semicolon insertion) and reduce the debugging times considerably.
I don't know about "less quirky", but Microsoft tried with VBScript. Google tried with Dart. Initially, Dart meant to be interpreted by the browser (not transpiled to JS). I'm sure there might have been similar, smaller projects, but Javascript-in-the-browser has momentum that's hard to beat.
I'm trying my best :D
<link rel='stylesheet' href='res/lettercrap.css' />
<link rel='stylesheet' href='res/style.css' />
;oIn all my personal projects I just copy-paste past CSS from existing projects of mine to new ones, at most just changing two or three colors.
The number of developers I've worked with who handle broken builds with "The build is broken! Why did you break it?" instead of "I shall now proceed to read the error message which will helpfully tell me precisely why the build is broken and how to fix it" has always astounded me.
I've yet to find a way to handle error messages that will actually convince devs to read them. All I've found to date is apologizing for an unclear error message and offering to help with anything they had trouble understanding.
1. It took too much of my time. Since I was doing this in addition to my dev duties, it was not something I could afford to spend time on. 2. When I first started, I would resolve the issues myself. But I soon realized the builds were usually broken by the same suspects. Sending it back to the devs (and also requiring them to buy a box of donuts on breaking the build) put a quick stop to this. 3. Builds were usually broken by people checking in their code in a hurry right before they were done for the day. Calling them and having them fix it after work (as opposed to me having to sit additional hours after work fixing something they broke) very quickly put an end to the practice of checking in your code in a hurry and leaving for the day because you had a dinner to make it to. I don’t want you to miss your dinner, but if it’s important enough that you can’t be bothered to make sure your code is working then you can also wait till the next morning to checkin your code.
Except I do. And as with anything, feedback takes you back to reality.
Plus you learn where you tend to make mistakes and thus have a chance to study a bit more about area to learn how to not make mistakes.
- read a stack trace
- find things in the doc
- use the debugger
Most people, professional devs, signing up for my __advanced__, yes, specifically requested to be advanced, Python trainings, don't know how to do this.
Again, I try to be extremely nice about this, because nobody likes to feel inadequate and I'd rather have people learning happily this and improve their life and work.
It takes a lot of courage, if you are 40 and being in the field for 2 decades to admit you need to go back to this.
But it's not what I was expecting from the industry.
Hey, it makes me feel useful :)
So when you get to something that is complicated and has the potential for deep strategies and shortcuts for efficiency (e.g debugging), it's no surprise that experienced coders might want a refresher.
Impostor Syndrome may be a thing there, too.
E.g only "java.lang.NullPointerException", only the top of the stack, missing "cause" etc. :D
You have it easy, the devs here in Cardiff push code that doesn’t even compile locally, then start howling that “Jenkins is down!” when the build fails. Or even just “the server is down” with no other details. Like I just telepathically know which of our 5000 VMs is “the”.
My experience in learning computing in school was going through large months long projects where later stages built on early stages but the entire project was throughly documented and paint by Numbers so long as you followed the directions exactly. If you came up with a valid but undocumented solution you would break the assumptions of the documentation and forever be hacking the program to get it to work which was still possible just time consuming and nobody knew how to help you. The end result is students who can follow docs without fucking up but who also don't know how to fix things other than by rolling back to a known good version.
I've found these sorts of problems to be very difficult to solve in academics due to the need to standardize assignments and grading yet a few months doing an original project will infuse you with troubleshooting mojo.
Agreed. I was told, and later had to tell others something to the effect of "okay, so what did the error message say? did you search that?"
Moreover, having person who made bug is just good practice. Feedback, basically. When people know about own errors and have to fix them, they learn more about errors they make.
It perplexes me that you could get through a 4 year degree without learning how to read a compiler error message though. I'd be less perplexed at this happening in a super condensed and streamlined boot camp though.
Then again, neither was version control...
Only time I felt students got shafted was a Web Dev elective. People who weren't already pretty experienced with JS had a really hard time (we were on the quarter system, an HTML/CSS/JS+React/Redux+Node is pretty ridiculous to cover in one quarter).
If the expected cost of decoding the error messages includes a lot of reverse engineering of crap code, people won't bother.
It was a major, major issue in early C++ template metaprogramming. You couldn't give good names to some of your constraints so the errors were nightmares.
I resisted joining a startup that exited for 8-figures because one of the devs was emotional/blame-oriented and another one of the devs, a female, was too into me.
1) She didn't know what MD5 was. Had never heard of it. 2) He attended a meeting, seemed to keep up then emailed notes talking about 'Jason encoding'.
I thought these are pretty general concepts to anyone even in passing, you should probably know they exist at least? But maybe I'm in a bubble.
Heck I know what it is and I've only used it a few times outside of copy/pasting stuff w/o needing to think about the underlying details too much.
E.G: I tell beginners to use django, not flask.
Because people usually don't have the skill or knowledge to take proper design decisions. They need something to guide them, otherwise the project architecture will be terribly wrong.
Last year I worked on a flask site were the devs stored the password hashed as unsalted md5. And another one with an API that returned sometimes JSON, sometime plain text. And this year one that, to be deployed, required you to run a build process on the prod server, and defined the upload folder and static media folder as the same.
My take on this is: if you want to go the minimalist route, you need to be very good already.
I think it goes deeper than just not caring.
I too have spent the last 25+ years working as a contract developer and in my earlier years I would say I did care.
However, as time has passed I've come to realize caring can cause tension which then becomes problematic.
In most case people (i.e. higher management, fellow developers etc) really don't like too being reminded that they are doing things wrong.
My current approach is to raise an issue once, raise that same issue a second time but on the third attempt, bite my tongue and just leave it at that.
The same thing goes for when you aren't a contract worker and management has slightly different (but not necessarily invalid) opinions on what the right thing is. Depending on your point of view, that and what you said are exactly the same thing with a different lens applied. That is, the "right thing" as viewed from the angle of engineering best practices may or may not be the same as the "right thing" for getting some product out the door, even if many of us wish it was.
My English still needs work.
I actually care. Especially about people and how they feel at work. In kinda why I do this job: it's so easy to make their day better.
I had no trouble with your original post.
However, in my reply I tried to convey the fact that over time my level of care had diminished.
There was a time when I did care.
However after decades working in this industry I can honestly say my level of caring has been beaten down to a minimum.
My impression was your post was reflective of the start of that process.
Gah. I wish I could rebut this but I’m not sure I can. How does one find work for a tech/IT company that actually embrace quality?
Every single business is full of people who are adequate. From the line staff all the way up to managers. Cynical people call it the peter principle, but it might just be that an average manager is only averagely good at judging who is good at their job and therefore average people are just as likely to get promoted.
Or work in a smaller company.
Google was a superpower in 2001. I started working in Enterprise IT then and people thought that I had miraculous powers.
Today, it's a crutch and almost anywhere you look, people are searching for random stuff to throw on the wall to see what sticks.
(sorry, too cynical... but I'm in the field for more than 20 years)
I suppose you could start your own company but then you will ultimately have to choose to ship and eat or perfect and starve
You don’t just try to solve ALL the problems of the organization, which you were not hired to do.
If you were actually tasked to do that, you would want much more compensation.
I also disagree that the risk of an attack is low. An F500 company is the sort of target that can end up in the sights of many different threat actors.
Halifax never paid the price for badly handling their data after all.
Whatever people talk around here, Reddit or random conference is unheard at these companies.
Most devs just punch cards and are happy to know just enough to get going.
Talking about best practices is a lost battle, unless there is someone from above pushing them.
Because everybody seems to just read past this and think "oh yeah, yeah that is how things are", I'm gonna say it: That is terrible.
I mean, it's your business whatever you decide to do, but I disapprove.
What gave you the idea that it's ever okay to decisively not do the right thing? Especially when the reason is money. Sorry but if your reasoning is "I'm not doing the right thing but that's okay because it is profitable" then you are actively ruining the world. You get no respect from me for that.
I find this line particularly insightful. It was the biggest lesson I learned in my transition from academia to industry. No one cared that my work was correct and on time, they cared that the vendor we used caused us to miss the deadline and because I was in charge of the overall system, it was still my fault. A tough lesson, but a good one.
Very clever :)
okay going to play devil's advocate on this one and say that some error messages could be improved. that's all.
Half of the devs from there that I was in contact with were not capable of:
- googling a solution to a problem efficiently. When they hit a wall, they turned to me with an empty look like they were lost.
- read an error message to troubleshoot. A stack trace is utter mystery.
- use effectively the UI of their laptop. Some can't even Ctrl + S to save, they look up the "save" entry in the menu.
We are talking about people writing code every day, in several programming languages: fortran, c, c++, java, Python...
Because I'm a freelancer, I don't care. I'm paid extremely well to be very nice to them and solve all their problems.
But I'm very glad I don't have to be held responsible for anything those people end up putting in production. And I have no reason to believe it's different in their security department.
However, and this is a good lesson to all of the geeks like me that think work is about doing the right thing: the output they produce is good enough in our society. Its cost/value hits the sweat spot. Business is not about doing things right, it's about being profitable.
If you have one scandal a year, but it costs you less than making sure you have a secure system, and you are not legally challenged, then you are golden.
In fact, the chances to have even one scandal are very low. Actual risks of failure or attack are low. And consequences in case of crisis are low too. People don't care that much about privacy, cyber-security, etc. And policy makers won't enforce their laws anyway, at least not to any extent that will endanger the company.
So if the software allows people to do their job IRL at a reasonable price, under an acceptable deadline, good enough.
In fact, David Goodenough is a very funny French meme: https://www.youtube.com/watch?v=ho4W5LnFl6s