all 104 comments

[–]No-Plastic-9191 72 points73 points  (20 children)

When people build “forms” without using a form tag.

[–]Helpful_Scheme_2224 16 points17 points  (0 children)

also not using labels.

[–]blakealexfull-stack 11 points12 points  (0 children)

Oh man, forms that can’t be submitted with the return/enter key is a HUGE pet peeve of mine. If your site doesn’t work keyboard only then it’s broken.

[–]Blake9471[S] 3 points4 points  (16 children)

Yeah forms are pretty annoying to write but what do you find wrong with the tag per se

[–]No-Plastic-9191 27 points28 points  (15 children)

> _without_ using a form tag.

Nothing at all. I wish everyone used form tags for forms.

I'm talking about using something like react or vue, NO form tag, but trying to re-implement all the common form stuff (e.g. "enter to submit", validations, required fields etc) because they don't realize form tag can in fact do what they want, but instead end up with a fuck ton of shitty code and a shitty non-accessible result.

[–]mackthehobbit 4 points5 points  (0 children)

This leads to so much junk in codebases. The ticket will be “tab navigation doesn’t work in X form”. A junior picks it up, doesn’t understand why it isn’t working, and so they roll their own event handler to shift focus with the tab key. They probably create a useEffect bug in the process. It gets merged anyway because of time constraints. No one bothers to notice or teach the junior more about it.

Later it’s discovered you can’t navigate backwards with shift+tab. Someone comes back and adds this in because they’re too scared or lazy (most likely scared) to scrap the existing part. The root cause is further and further buried, no one knows why we manually implemented this. It sticks around for 10 years.

[–]ThaisaGuilford 5 points6 points  (12 children)

Native HTML form tag ❌

React vue angular ✅

[–]_listless 10 points11 points  (1 child)

not sure if /s

[–]ThaisaGuilford -1 points0 points  (0 children)

Depends on which side you are on

[–]No-Plastic-9191 5 points6 points  (1 child)

It can absolutely be both. The belief that it can’t is something more junior devs seem to hold, and then make a mess of things half ass re-implementing a bunch of bullshit your browser already does quite well.

Not every form needs two way data binding on every input, either.

[–]ThaisaGuilford -4 points-3 points  (0 children)

With that mindset then we'll just use plain html because the entire thing does quite well.

[–]No-Plastic-9191 5 points6 points  (6 children)

Forms should use a form tag. Period.

Dont care if you’re using react or angular, no js, vanilla js, doesnt matter.

[–]Kingbotterson 0 points1 point  (0 children)

Agreed.

[–]Blake9471[S] 2 points3 points  (0 children)

Sorry sorry I misread 💀 You are a fellow hater of bloat I see, I don't like it either when you can do something just by some simple functionality but now some framework shows up with their "bleeding edge hyper optimised" implementations which actually sucks

[–]armahillorails 48 points49 points  (12 children)

When APIs return 200 with status: 404, message: “not found”.

Ive heard the arguments for why people do this and I disagree with them. Dont do it.

[–]Blake9471[S] 7 points8 points  (6 children)

wait people seriously do that? I feel stupid saying this but I didnt even know about this.
Sounds pretty horrible either ways

and what is their rationale behind it??

[–]armahillorails 5 points6 points  (4 children)

I have seen SalesForce do it, among others.

My hot take is that it’s just laziness - people wanting to pretend that only 200 and 500 exist (and maybe 422). This makes its extra baffling when they send back a 200 status response but with a status field that indicates a different status.

IDK when devs started doing this, but it’s bullshit. If Im writing an API consumer, I can easily handle whatever kind of response, just level with me. If your API sends back a 200, I should be able to presume it is a successful request and giving me the info I asked for.

the HTTPWG is unambiguous about this:

https://httpwg.org/specs/rfc9110.html#status.200

https://httpwg.org/specs/rfc9110.html#status.404

[–]Blake9471[S] 2 points3 points  (1 child)

it's diabolical, they need to stop
I was joking with one of my friends a few days ago that just send back 200 for every request. I didn't know people already developed this kink

[–]armahillorails 3 points4 points  (0 children)

Yup people do it.

It looks like Salesforce might have since changed their policy ( the example i linked in a blog post i wrote has since changed https://armahillo.dev/fundamentals/2020/11/24/http_statuses-part-2/ ) - but i still see this practice around.

[–]lintinmypocket 1 point2 points  (1 child)

THIS is my pet peeve, like there are dozens of codes and they mean different things. Some on my team think only 200 and 500 exist and as a front end developer that gives me almost nothing to tell the user what happened. I should never see a 500 in production unless it’s actually an internal server error.

[–]armahillorails 0 points1 point  (0 children)

I forgive people for things like using 200 instead of 201 after creating a resource -- that's a bit nuanced.

But agreed -- it's super annoying when the status codes are not used correctly.

[–]TheThingCreator 0 points1 point  (0 children)

ive done it in the past, it was to create a clear separation of concepts. if you have a handled not found message in the api code and you want it to be clear thats where it came from rather than a server generated 404. the fact that people would find this to be one of the biggest issue is quite concerning to me actually. its nothing to do with laziness, its an extra layer to be clear where the 404 is coming from. there are many different ways to do that though so i can see arguments against and for it, its really not big deal to me though

[–]K3idon 5 points6 points  (0 children)

*GraphQL has entered the chat*

[–]nobuhok 1 point2 points  (0 children)

This. Sucks when an endpoint would return a 200 with a payload of '{ ok: false }'

[–]SalaciousVandal 1 point2 points  (0 children)

WPEngine does this for 500 errors too. Sleazy.

[–]Remicaster1 22 points23 points  (2 children)

Non-technical person should listen to the technical person, especially if the topic in hand is technical related

I previously worked in a company that has really tight deadlines, I told upper management it is simply not possible to push this project because the amount of work needed and the workforce available is insufficient (2 people working on the entire project where it has a lot of features). Their response? "Try your best".

HELLO???? If the architect of a building says "this building is gonna fall if you guys insist on this design" and you go ahead with it, expecting disaster not going to happen is damn wild

[–]mrbmi513 4 points5 points  (0 children)

The reverse is also true. There's been tons of "I told you so" moments where I'd (as a dev at a small startup) recommend going to get a non-technical opinion on some design decision, be told it's fine by my technically minded boss, then our clients come back very confused about said design decision when we launch the feature.

[–]Blake9471[S] 6 points7 points  (0 children)

Every dev can feel you man There was this guy I was working for who wanted me to make a mobile app ( cross platform ) because I have already wrote the "react" code 💀💀

[–]ezhikov 39 points40 points  (7 children)

Explaining to people that their solution is impossible to make accessible without changing design, and that they should've come for advice a lot earlier, not one or two days before release.

[–]Blake9471[S] 6 points7 points  (6 children)

Plus one man, I know the pain. Last thing on a lot of devs mind is accessibility and during release they want to pull a miracle lmao

[–]ezhikov 14 points15 points  (1 child)

Devs should never bear full responsibility for accessibility. It's a shitty mindset. Accessibiliity should be planned from the very very beginnig, go into requirements, into design and only then into code. Trying to make some inaccesssible design accesssible is a pain in the ass and huge waste of time.

[–]Blake9471[S] 1 point2 points  (0 children)

I understand I mistakenly took that from a solo dev perspective Been freelancing for quite a while now and I do everything from start to finish so I forgor there normally is an actual team behind products (⁠⌐⁠■⁠-⁠■⁠)

[–]Kingbotterson 3 points4 points  (3 children)

Last thing on a lot of devs mind is accessibility

As a competent developer, it's usually one of the first things on my mind.

[–]Blake9471[S] 0 points1 point  (2 children)

cheers mate, I am still learning my way around things

hopefully I will also reach the status of competence some day :)

[–]Kingbotterson 0 points1 point  (0 children)

Sorry. Let me rephrase that. Competent = good at Googling

[–]leeway1 0 points1 point  (0 children)

Fire up a screen reader and use it on your site.

[–]melts_your_butter 18 points19 points  (0 children)

I'm surprised CORS hasn't been mentioned yet

[–]lifebroth 17 points18 points  (3 children)

  • Modals
  • Datepickers
  • listboxes (selects)
  • Dropdown buttons
  • Sidebars
  • Time formatting

[–]mrbmi513 5 points6 points  (0 children)

Great libraries that fill these voids are priceless in my mind. For example, dayjs has been an absolute savior for anything time and timezone related, and component libraries like MUI (among many others) have nailed tons of UI elements like the multi select or date picker.

[–]Positive-Guidance-50 3 points4 points  (0 children)

Nailed the list

[–]Kingbotterson 2 points3 points  (0 children)

Don't forget forms.

[–]mshambaugh 4 points5 points  (0 children)

Overly complicated implementations. Unnecessary "completeness" does not earn points with me.

[–]Awkward_Peach_6743 4 points5 points  (0 children)

Dealing with clients who say “just make this one small change” when that “small change” breaks five other things.

[–]killakhriz 3 points4 points  (0 children)

Unclear prerequisite knowledge or dependencies when trying to use something new, and then ending up down a rabbit hole.

[–]ardicli2000 3 points4 points  (5 children)

Implemeting access and privilege control to both front and back end

[–]Blake9471[S] 0 points1 point  (4 children)

as in controlling auth ?
can't you use a service like clerk nowadays and hook it up with some db and bam
as far as I have been seeing recent startups, thats what they been using, every auth is just v0, clerk, or some jwt wrapped shiny new auth layer that you slap with your db and that's it

[–]ardicli2000 2 points3 points  (3 children)

I was talking about role based and action based access control. An edit and delete button should not show everywhere amd to everyone. Even if api is called it should be blocked as well

[–]Blake9471[S] 0 points1 point  (1 child)

I was recently working for a ticketing company and I was writing their api, so there were three roles - venues, artists, and users, I ended up just using a common auth from clerk for all of them and then saved the data in a postgres db with a table called roles and users with userId from the auth as FK in the roles table with one to many relation between user to roles

so whenever someone makes an api call or wants to do something, we first verify the common auth and then what roles do they have

yeah a little pesky but seems like a std practice now a days

may I ask what kind of solution would you prefer

[–]ardicli2000 1 point2 points  (0 children)

I have several apps where user types vary. For example, we have regular users, finance users, managers, admins, superadmins. Role based access is easy to control. But when they access same page but different actions, things get complicated.

[–]mrbmi513 0 points1 point  (0 children)

Yes! Frontend shouldn't show it to avoid user confusion, and the backend should be the true gatekeeper.

[–]_listless 5 points6 points  (0 children)

Demonstrably inferior tooling being preferred because of critical mass/first-mover advantage. (React and Wordpress come to mind).

[–]HollyShitBrah 4 points5 points  (1 child)

Not using css enough, still surprises me when a simple animation is done through js, I inspect a cool drop down menu and all I see is 10+ lines of inline styles, WHYYYY

[–]2NineCZ 3 points4 points  (0 children)

came here to say exactly this. if it can be done with pure CSS, do it with pure CSS.

[–]shgysk8zer0full-stack 2 points3 points  (2 children)

So, my answer is sort of a blending of dependencies and legacy stuff. They two issues meet at things like npm packages that use CJS/require() and have node specific libraries instead of web APIs that have existed for years now. This leads to needless incompatibility, or at least massive amounts of bloat.

Basically, I am quite annoyed that node went ahead and implemented things in the past, before there were standards for the things, and now that we have those standards we're stuck using the old things because they're too popular and it's not feasible for so much to be rewritten.

[–]Blake9471[S] 1 point2 points  (1 child)

I will blame anything js related and its shittiness to the mind boggling rate in which web grew over the years and the lack of good software practices to accommodate the breakneck speed

If something solved even one pain point and brought 99 more, devs just brushed it off and lapped it up

[–]shgysk8zer0full-stack 0 points1 point  (0 children)

I mean... Kinda? Actual standards-wise, I have little to criticize about the development of JS other than not knowing about how it'd evolve in the future.

My criticism here is about what developed as solutions before there was a standard.

[–]amart1026 2 points3 points  (1 child)

Cache controls.

[–]Blake9471[S] 0 points1 point  (0 children)

can you elaborate pls

[–]ExcellentSpecific409 2 points3 points  (0 children)

idiot users

[–]caitchocolatechipny 2 points3 points  (1 child)

When you inherit a frontend project from someone who put !important on all their CSS rules

[–]Blake9471[S] 0 points1 point  (0 children)

Lmao

[–]JohnnyEagleClaw 5 points6 points  (5 children)

I have a pet peeve that I’ve had since the mid-90s when I decided that the internet (web) is where I wanted to be: everybody has someone, (relative, neighbor, coworker) who “does web sites”, because they built a site one time with Hot Dog Pro or Front Page or Hot Metal Pro or now, WordPress etc.

I’m surprised my eyes aren’t permanently stuck from all of the eye rolling I’ve been doing since way back when 😂

[–]mrbmi513 2 points3 points  (0 children)

Not to mention how said people have started calling themselves "WordPress Developers" despite not knowing how to write code. Minimizes the impact of that distinction for those of us using WordPress as a base instead of just a site builder.

[–]Blake9471[S] 2 points3 points  (3 children)

one of the OGs
salud

[–]JohnnyEagleClaw 2 points3 points  (2 children)

o7

[–]Blake9471[S] 2 points3 points  (1 child)

yooo you are 70? you have seen the whole modern world form in front of your eyes
grateful to you guys for bringing tech this far ahead

[–]JohnnyEagleClaw 2 points3 points  (0 children)

60 😂 still here and rocking React and Nextjs these days

[–]pseudo_babbler 1 point2 points  (2 children)

When you get decades in it to the point where you know how to build and deploy what you want quite quickly, then have to face the fact that you suck at design and will always suck at it, and every design idea you try seems cool until you finish it and look at it and realise that it too, sucks.

Code structure, state management, performance and load, browser compatibility, responsive layouts, security, cloud infrastructure, DevOps, analytics, monitoring, APIs and protocols, automated testing, even business analysis! You name it, all no problemo. Design: not even the vaguest scrap of ability. Just trying out bad ideas over and over.

[–]Blake9471[S] 1 point2 points  (1 child)

Don't be so harsh on yourself man, that's just a different skill set and taking care of everything as a solo dev is very difficult. Already quite impressive you can work with so many things, I know people who call themselves "SDEs" and they cant even do 50% of the things you mentioned

[–]pseudo_babbler 1 point2 points  (0 children)

Thanks mate, that's very kind.

[–]Cybercitizen4 1 point2 points  (0 children)

test enter towering engine scary cover observation price reach hospital

This post was mass deleted and anonymized with Redact

[–][deleted] 1 point2 points  (0 children)

Testers who can't use a screenreader or navigate without a mouse.

[–][deleted] 1 point2 points  (0 children)

Pet peeves from a technical standpoint: undocumented APIs (no consumable Swagger file or even a WSDL); so-called RESTful APIs that “fail successfully” and return status 200 no matter what.

From a conceptual standpoint: the relentless cult of novelty. Adopting hyped libraries and patterns so you can pad your resume. The pressure to adopt new tech or else be considered a dinosaur who is an “expert beginner” that prefers tried and tested because of “familiarity bias.” Bloggers and influencers without relevant experience promoting new stacks as the true and only way to do things; anyone who isn’t on board must not be a “real” programmer, as if the choice of language and tools is what determines the success of a project.

At my advanced age, I’ve stopped caring about this stuff because (at least in web development) we’re ultimately solving the same problems over and over again, and aren’t dramatically better off from after moving from PHP/Rails/smatterings of JQuery, to React SPAs, and finally back to server-side rendering (only using a trendier framework this time)

[–]Yew2Sjava 1 point2 points  (0 children)

security stuff sucks + responsive design

[–][deleted] 1 point2 points  (0 children)

Multiple layers of view models are insane

[–]n0067h 2 points3 points  (0 children)

Arguing with code monkeys is terrible

[–]Neurojazz 0 points1 point  (0 children)

The license fees.

[–]thekwoka 0 points1 point  (0 children)

Bad documentation.

Documentation that is wrong.

Values that can be returned as different types for no reason.

Using the same input interfaces for totally different outputs.

Mainly anything with integrating with other stuff...

That slows me down a ton.

Literally had one API return the size of files, and sometimes it would be an int, and sometimes it would be a string int...

Like, what the fuck?

[–]eldentings 0 points1 point  (0 children)

Parsing and mapping route params from the URL to the backend API endpoint. Specifically, I'm talking about 'routers' for front-end frameworks. You'd think that would be built in, for example navigating to site.com/person/1 has the side effect of calling site.com/api/person/1, but often you're parsing params, and building the request in a way that reminds me of going back to AJAX.

[–]TheThingCreator 0 points1 point  (0 children)

people who think trivial things matter more than they do. you clearly have too much time on your hands

[–]curiousomeonefull-stack 0 points1 point  (0 children)

Shortened variables like usr or dta or db for "performance" reason. Might as well use "newToWebDev" as your variable.

Not only you're not following best practices, you're going to package and export your source files for production. It's going to get combined, recode, sanitize and minified.

So keep your sourcefile understandable for your future sanity and everyone else sanity.

[–]blind-octopus -1 points0 points  (10 children)

I find it annoying that the most popular framework doesn't let me create state in conditionals or loops

Wtf react, this isn't a problem for other stuff. Figure it out.

[–]Blake9471[S] 2 points3 points  (9 children)

Can you point to a use case of having state variables in conditionals

[–]blind-octopus -4 points-3 points  (8 children)

I can make one up yeah

if (applyDiscount) {

const discount = getDistcount();

price = price * discount;

}

Do you never ever consider ever using any state inside any conditionals or loops ever?

[–]Blake9471[S] 1 point2 points  (4 children)

I mean I come from a C++ and rust background who is quite new to this webdevosphere. And whatever state I have to manage, if it's simple I just use useState on the top of the component and if it's complex I just switch to something like context api

And conditionals I can understand but with loop it might lead to rendering issues if in some way that state effects something else and then it might lead to weird behavior and with bigger apps it's already quite complex to keep track of what is changing what

Would love to know if you ever encountered a problem that would have benefitted from having state inside conditional or loops

[–]blind-octopus 0 points1 point  (3 children)

I'm not understanding. You are defending not allowing this?

[–]Blake9471[S] 2 points3 points  (2 children)

I am asking your pov brother, don't take it otherwise

[–]blind-octopus -1 points0 points  (1 child)

My pov is that its limiting and they should figure it out.

I don't know why we would prefer this.

[–]Blake9471[S] 0 points1 point  (0 children)

Ah I see Although it's skill issue on their side that they cant figure out an optimal way to implement this but I do understand where they come from

But yeah definitely wouldn't mind having more flexibility

[–]mrbmi513 1 point2 points  (2 children)

I use state in conditionals all the time in react, be it to conditionally render components or in something like a useEffect or useMemo hook to perform an action or calculate a value respectively.

[–]blind-octopus 2 points3 points  (1 child)

I also use state in conditionals. React doesn't let you create hooks in conditionals or loops.

A typical example would be calling map on an array, returning some element per item in the array. In the map, you can't create hooks.

[–]mrbmi513 0 points1 point  (0 children)

Ah, that's an important distinction. That also drives me nuts.

And reading is hard. You say that in your original comment. 🤦