See the entire conversation

do you ever stop and think, maybe people are over-thinking/engineering front-end development?
160 replies and sub-replies as of Nov 14 2017

I'm not blaming React/FB, but I feel like Facebook built React to build Facebook === everyone started building UI's like Facebook would build Facebook.
“Premature optimization is the root of all evil”, which we apply to everywhere but front-end development. We seem to start with an overly complex baseline and work up from there.
Late optimization is no better
For me, to grow healthy a project need to born with some powerful foundation so we can evolve over refactor
And 90% of the time unrecoverable
This quote has been used to justify so much evil in sw eng, including under engineering front end code.
for sure. I've got nothing to add. you're right.
with that said, we should always be asking the question and challenging the status quo! :)
if its worth anything at this point, i've loved using React for years now however, lots of isolated but sequential frustrations with tooling (not React-specific) can lead to demotivation at times
And the Facebook UI isn't even a good one!
All the time. I wish everything could go back to plain old rails days. Feel like I was so much more productive. Now I just edit config files.
Oh god!! Now I feel old... how about we go back to MooTools!! :-)
How about Perl CGI scripts and SSI?
That's what Amazon's Lambda is, after all
Oh god I actually had a small flashback reading MooTools.
Every day. This has become my pet peeve.
Someone asked me how to start learnig javascript last week. I didn't know what to tell them.
Tell him "learn java. Javascript is a framework for java"
Haha. I feel you. I always recommend learning the language first. Actually shared a list with ressources over here:
awesome-javascript-learning - A tiny list limited to the best JavaScript Learning Resources
Brilliant, I'll pass this on!
This is something I've been thinking about. There are four pillars to getting started w/ the language,I think: understand the 'this' keyword, understand the event loop, understand objects & how functions realty to them, and understand closures. Once you get those js is readable.
Something weird has happened though. With lambda functions, we can start teaching from a lambda calculus mindset. No more 'this'. And closures are baked into everything. Immitability reduces reassignment bugs due to scheduling.
Very little content on learning functional programming in JS for beginners, but I've seen it being used successfully. The cost is a reduced understanding of classes and 'this'.
1. var x = 'hello world'; console.log(x); 2. ??? 3. node es6 react redux hello world!!!
Most people want to follow the "community recipe" and not start from scratch architecture wise for every project.
"Start by building things in pure JS until you feel comfortable enough to do otherwise."
I think it's a good start. The versions of JS / DOM API currently in the browsers are good enough for a lot of things.
"Run awaaaaaay!"
every single fucking day, but brave of you to say it out loud 😞
i've got nothing to lose my dude
Everybody is saying this right now
Did you just read my mind? Yes!😢
i (back-end person) had to do some stuff with gulp and node and handlebars and a million other modules and everything i googled only got me results where i couldn't recognize any of the verbs people were using
This is why I think front enders should earn as much as back enders.
brb have to install node webpack babel less sass and react before I can answer you
Have you heard of Create React App? It's very simple to get started.
Yes, but if you question it you'll be yelled at for shitting on people's hard work.
Yes, so freaking much!
Calling what's going on 'engineering' is debatable.
its (slightly) grown up lego.
Being unfamiliar with React, it took me 2h to figure out how to get a select dropdown to do “selected” on a preset option correctly without warnings, so yeah.
Yes. That. *And* the number of times I see and app that’s 99% static HTML pages but rendered via the gift of 300 NPM dependencies and a bloody unreadable DSL
It might be challenging at first but having React as the single source of truth for that state really helps things scale. This is good engineering. React shouldn't be used for static websites, but for applications it is very good at what it does.
Maybe. I like some of the thinking behind React, but like much in the JS world, implementation and execution is bafflingly sub-par.
You say you are unfamiliar with it then how can you say it's implementation and execution are sub-par? React is extremely well written and thought out.
React is only 'well written and thought out' if those writing it have thought about it, and can write it well. I'm experienced a truly badly written React app and it's a nightmare.
That is true of any tool or language. Bad engineers will always write bad code. It is no fault of the code.
Exactly. So saying "React is extremely well written and thought out" is only true if the programmer makes it that way :)
...React and 'random app using React' are not the same thing
Wowwwww 2hrs to get familiarity with a new programming paradigm. Torture
“New Paradigm”? You think it’s a new thing? Others did it (better than React) >20 years ago.
Obviously it is still new to you son.
So you were unproductive with a new tool you're unfamiliar with? And its React's fault somehow? This can be said for everything thats new
The current big issue is that someone decided that HTML/CSS were close enough. Things like WPF get a lot right, though they're not perfect. Angular and React though just don't get the MVC abstraction right. They add too many layers to make HTML/CSS fit their style.
The opposite. Only platform that everyone contributes to (for some reason), needs to target multiple operating platforms on one code base.
Absolutely! If you can't do it from the command line you shouldn't even be using a computer!
How do I combine all 280 characters into one giant YES!
npm i --save-dev loljs
shit, sorry: yarn add --dev loljs
it was ever such
I'll raise you...
While you are just reimplementing plain lists, forms and dropdowns instead of truly rethinking web UIs, yes.
Yes and no. I thought, but didn't stop.
No, I never stop and think that. I pretty much think that 24/7.
Yes, so often I get weird looks when I say "I haven't used that tech because it doens't seem necessary for my client's blog and about us page"
Every day of my career!
Click here to LOL <LOL BUTTON>
ok cool so now how do I scrolljack this fucker
Nah, i love setting up Webpack, CLI tools, CI/CD for hours 🙈😂 #NOT
Ah yeah just have someone do it for you?
If I do it, I prefer doing it on my own, so I don't forget how to.
HyperHTML is pretty simple & powerful
man, I got a younger friend of mine into html and css. then I couldn't tell him to fall down the rabbit hole of learning JavaScript. it's such an antiquated yesteryear mish-mash! recommended him to learn Elm instead. might actually learn something useful!
Front-end developers in hell with JavaScript and variety of browsers. They try to simplify their work.
Yes - BUT - the overthink is a growing pain. We're doing things that were impossible even a couple years ago. Nostalgia for old frameworks wont fix todays problems. I think we've normalized being on the bleeding edge - not all apps need to be there.
"But when I click on this button, it should do something on the page without talking to the server!"
that's not overcomplicating things imo
What else are all the hobbyists going to do?
I think this is a product of the web front-end stack not being very good at its own problem domain but extremely flexible in a bad way.
Sometimes, yeah... But then I remember the before-time... The dark times.
I’d been doing front end dev for 15 years before es modules, React, and webpack. Before, I hated it with a fiery passion. The tooling made me love front-end again.
Same here
One thousand times this. The tools have made front end far easier to deal with, especially for larger projects. If the tools don't make your life easier then don't use them!
Every single time I go to edit some CSS.
People seem to forget that at the end of the day, we're all just delivering assets, plain CSS, vanilla js, and HTML to the client.
So much complaining, so few proposed solutions. Have you ever had to build and/or maintain a frontend codebase with tens of millions of users? Go try doing that with jQuery or vanilla js and let us know if React's ecosystem still feels over engineered.
The problem is that the number of people writing web apps supporting tens of millions of users is infinitesimally small. Right tool for the job and all that.
That's a fine point, but what would be a better tool for an app supporting < 1M users? 100k? Does anyone have better ideas for apps with fewer features and fewer users?
Your number of users doesn't define the right tool. The problem being solved and the resources (people, et. al.) available to solve it define the right tool. Generally, the right tool is the one the people understand the best.
If I've got a giant app I need to build, and I've got 5 good vanilla JavaScript programmers to build it, 99.9 times out of 100, they're going to output better vanilla JavaScript than they will react or vue or whatever the flavor of the month is.
Oh my god... I triple dog dare you to find 5 "good vanilla JavaScript programmers" to build you a "giant app" in pure vanilla JS with no libraries.
I've been doing this for 22 years. I expect I've done a lot of stuff you think is impossible.
You've been writing "huge apps" with pure vanilla JS with no libraries since the year JavaScript was created? Wow, you must be miserable if that's true, which I cannot possibly believe. But keep doin you. And the rest of us will build better UI's much faster with modern tools.
I've been writing software in general for 22 years. I'd say 15 of that has included JavaScript in one form or another and yes, for the most part, I still use vanilla JavaScript.
So its the tools fault? People bash on webpack and babel like dude, you don't have to use them. Like you said, right tool for the job. Ain't the tools fault they are being misused.
I'm not shitting on the tools at all. I'm shitting on the people that hold they're the silver bullet that makes software engineering "easy."
These tools don't make it easy, but they certainly make it easier.
Don't do it on the client side, then.
Gotta filter out newbies somehow ;) *cries into pillow*
Someone I know decided to throw Angular 2 at a single page form with 6 inputs today. Couldn't understand me asking why.
Use what's right for the job. It's not all that hard with boilerplates like create-react-app and sane defaults. 😎 Try building an atleast medium sized responsive SaaS app with offline capabilities lots of interactivity without the frameworks and tooling of today! 😭
CSS the definitive guide looks over 1,000 pages. CSS!?
All the time.
After doing a lot of simple and complex DOM manipulations with jQuery for years I can clearly say the answer to me is: No!
Totally agree, which is why I created a new framework which totally simp-(face punch) 👊
Yes! Side note. This is why the fourth edition of the definitive guide to CSS is a bazillion pages long. Absurd.
The programmers' law (I have just made up, but it's totally legit) : if something can be over-engineered it will eventually be over-engineered.
Yes. One a week.
Nope. For the most part we are building much more complex applications. Tools like React along with sound software engineering principals such as TDD massively reduce bug density and help things scale. React shouldn't be used for basic brochure websites.
Front end dev has become a miserable slog that resembles a game of Mouse Trap.
Agreed. I was writing about this in 2013, can't imagine how I would've felt if I'd known how it would be today.…
Sounds like someone needs another framework!
It's overengineering if you can't afford it.
100% agree! One day coding will be like web design, everyone will be able to do it.
But but separation of concerns... Html Css Js Each in separate .vue file to separate concerns further
I’m watching all this from the side, waiting for ”vanilla” to be the way to go again. The day will come.
Disagreed. Overengeneering only happens because people don’t like to read. Nobody needs to use React and all the trending tools. Avoid fatigue by just using what you need to get your job done and period.
different level of abstraction in every framework is taking everyone away from core knowledge.
Maybe we’re overReacting.
In what context? For writing webapps, hell no, it's better than it's ever been.
I see why you hold that opinion and disagree.
YES! Way overdone.
Aaaah the infamous JS fatigue, all those so many tools. Do you ever stop and think which problem each of them solved?
Help me understand. Is there some ideal point we should go back to that’s the right amount of engineered ?
This reads a bit more snarky than I intended.
Is there any study (I use the term very loosely) that links over-thinking/engineering frontend development with increased remuneration for frontend developers?
Haven't got time to stop and think, I'm over-thinking the other bit.
I think the bottom of this is that some people follow trends instead of picking the right tool. Using React to make a bakery website is too much.
All the time. That's why I moved on. All the problems were solved so people just started over complicating it with frameworks and libraries etc.
where did you move on to? Take me there...
Yes please! I wanna go there to!
Every time I use Facebook. It feels totally fine over engineered.
I remember the dark ages of FE dev when debugging was done by manually changing CSS colours, and borders, and every site was in Flash. I’ll take the current state of affairs over that.
Frontend development discussion.
All. The. Time.
"over-engineering" means the solution has out-matched the problem in terms of abstraction by some arbitrary margin. Determining if something is over engineered is therefore case-by-case, subjective, and dynamic. Does React outmatch all possible projects?
I completely agree it's a mess. Hopefully we'll start seeing standards pick up the good bits the rest fall away before long.
Sort of reminds me of the 6 different ways to do rounded corners 'back in the day'. Current mess will hopefully diminish eventually.
Yup (currently working on a project with React....)
We've got it the best we've ever had it. Go look back at an old Backbone app, or the tied-together-barely-functioning jQuery from before that. The countless event systems, manual dom updates. The impossibility of debugging. The "build systems" from 5 years ago. It was terrible.
Hot new take: frameworks and abstractions add complexity that only pays off in certain situations, which they were designed for.
Yes. The web worked fine without including 629471 libraries to display a sliding popup too.
I have been having these same thoughts lately