HNHacker News
TopNewBestAskShowJobs

jaredgorski

137 karma · joined March 23, 2019

What I cannot create, I do not understand
submissionscomments
jaredgorski··on Penmanship
I was being tongue-in-cheek. Didn't mean to sound like a smartass. Thanks for reading!
jaredgorski··on Penmanship
Oddly enough, I just realized I do both
jaredgorski··on Penmanship
For clarity, this post was more creative writing exercise than technical treatise. Thanks for reading!
jaredgorski··on Penmanship
For clarity, this post was more creative writing exercise than technical treatise.
jaredgorski··on Penmanship
Maybe you should write a web blog post nobody will read about it
jaredgorski··on Practical Front-End Architecture
Your exasperation is absolutely shared. Thanks for engaging
jaredgorski··on Practical Front-End Architecture
I did mention that our clients are enterprise-level.

But I did fail to address a more general decision-making process regarding choosing frontend architecture. If I did (and I probably will soon), I would talk a lot about the egregious initial load times on too many blogs that roll crazy dynamic tools for what should be a completely static site.

jaredgorski··on Practical Front-End Architecture
Right?! Yeah, the title should be “A few patterns we implemented lately”. I do have more thoughts specific to practical frontend architecture though, so I guess I’ll just hope you see the next post.
jaredgorski··on Practical Front-End Architecture
Using Tailwind alongside anything is pretty simple. It just generates stylesheets for you based on what you use. All you need to do is set up the build (so that it knows which style rules to include and which to purge) and then start using Tailwind classes in your markup.

As for “best practices”, I’d say there’s not many problems you’ll run into using something like Tailwind. Any configuration improvements you make probably won’t break anything, but you should still read the docs before you get started.

jaredgorski··on Practical Front-End Architecture
Ha! Yes. It’s pseudo code though. Please don’t copy and paste it.
jaredgorski··on Practical Front-End Architecture
Thanks for the positive vibes.

Great question. In fact, that question has more to do with “architecture” than most of my post.

The primary reason we went with Apollo is that it’s flexibility-minded and well-documented, making it easier for new engineers to work with. If everything was ideal, we’d use Relay. Relay’s patterns are better (IMO) but it can be confusing for new folks to use it idiomatically. So, it’s primarily a dev-experience consideration for us.

jaredgorski··on Practical Front-End Architecture
Specifically, are you referring to JWT with Apollo client on the server-side?

On the client-side, you can just use a link and get the cookie into an auth header that way. On the server-side, you need some way of getting that auth token from the cookie and passing it into the server-side runtime so that you can insert it into the auth header via a link in each server-side Apollo client instance.

jaredgorski··on Practical Front-End Architecture
I see what you mean.

By way of clarification, I see route validation and pageload validation as potentially separate. For example, a given route parameter may govern a whole scope of pages in the app, so it makes sense to centralize that route validation logic rather than duplicate it in each page’s validation hook. In a more traditional server (like Express), we can just handle requests which contain that route parameter with a particular middleware function that validates the route. However, if we’re just using Next.js’ filesystem router, we have to add validation in the component tree, in a wrapping component. You’re right that we could make a HOC, but then we would either need to apply it to each page file in that directory or just put it in the App render as a wrapping component, which is what we elected to do.

On the other hand, an individual page may need to run some specific logic to validate that particular load. That’s where the page validation hook comes in. We have a centralized permissions spec in the runtime which contains fallback rules for each page, so we can just update the “abort” callback with each route change so that the page can just bail out of the pageload and redirect the client appropriately.

jaredgorski··on Practical Front-End Architecture
Totally. With Next, your page component can export a getServerSideProps function which is used by the Next server to fetch any props necessary for the page component server-side on-demand. There’s a variation of this function for static builds called getStaticProps, which runs at build time to fetch data for props. So, even if we don’t render anything server-side, we can still run logic/fetches/etc. on the server side when a particular page is requested. This could be useful for dealing with sensitive data, for example.

Sounds like a cool app. I definitely see plenty of opportunities for static content there, like you said, but proper state management is vital for the real-time stuff.

jaredgorski··on Practical Front-End Architecture
I’d love to hear more about your experience with that “with-apollo” pattern. I decried it without using it first, but I see the problem as a coupling/cohesion imbalance.

What has it looked like in practice for you?

jaredgorski··on Practical Front-End Architecture
I’m with you :)

It’s certainly nothing new, but the “buzz factor” impresses people who don’t know what it’s for and they implement it everywhere thinking it’s an improvement. The trend/gimmick culture in frontend is a real thing.

jaredgorski··on Practical Front-End Architecture
“Hey look, the browser loads each new page one at a time instead of loading them all in the initial load.”
jaredgorski··on Practical Front-End Architecture
Good! We need to get back to the basics and stop shoehorning React into every application.

I regret that my post is yet another React promotion. Not intended: architecture depends on use-case. I’m hoping to write more soon about selecting tools appropriately, which probably doesn’t mean React in many cases.

jaredgorski··on Practical Front-End Architecture
Great feedback.

I’ve been wanting to write more about most everything you mentioned, but ended up writing about a few interesting patterns we implemented recently. I probably should’ve titled the post “A few interesting patterns we implemented recently”.

As for state management solving the problems of pageload validation (instead of our error boundary and redirect mechanisms), can you provide an example?

jaredgorski··on Practical Front-End Architecture
> So, why are you using an SSR framework then?

Great question; I should’ve mentioned this more concretely in the post.

I would’ve nuked Next completely, but we like the filesystem-based server and the ability to add imperative server-side logic cohesive with each page (getServerSideProps). In the past, this logic ends up on a separate server file and it’s less cohesive. Next keeps things a bit more organized for us.

I like your stack. What’s your use-case?

jaredgorski··on Practical Front-End Architecture
I think both can be true. There are practical reasons to use React and Vue, but that practical approach is obfuscated by the zeitgeisty culture around tools that get unwisely applied to every use-case. Frontend architecture needs to be approached soberly and prudently. Not every site needs React and GraphQL.
jaredgorski··on Practical Front-End Architecture
Absolutely.

The trends and gimmicks have caused this “walled garden” effect. It’s made both “practical frontend engineers” and “practical frontend architecture” a rarity. If I could write this post again, I’d talk more about how most use-cases simply don’t need a “modern tech stack”.

React is basically a glorified templating engine that attempts to enable reactive mechanisms on the client. Need “reactive”? Consider Svelte as well. Don’t need it? Consider moving the render to the build and use a lighter templating engine.

jaredgorski··on Practical Front-End Architecture
I’m hoping to write a more general post soon about selecting tooling per-use-case, which certainly should not result in this overpowered and complex stack in most cases.
jaredgorski··on Practical Front-End Architecture
I probably should’ve clarified that this stack is geared toward our enterprise-facing cloud dashboard. There’s a lot of data flying around and it needs to be displayed real-time. But most websites really don’t need this stuff. Front end needs to learn what backend has figured out: the stack has to fit the use-case.

I probably should’ve titled this post better, since I’ve been wanting to write more about how to make appropriate front end tooling decisions in general... not just our extremely dynamic use-case. The entire web seems to be running bloated React apps despite most sites’ needs being solved by the old stuff or new things like 11ty.

Just to clarify as well (since I didn’t in the post), we’re still using Next despite nuking the SSR because the filesystem-based server is useful to us and we like the patterns they provide for running server-side code.

jaredgorski··on Levels of Seniority
I’ve seen ex-engineers in management positions (one very well known and experienced engineer in particular) forget how important it is to offset technical debt. I think, more than naïveté, product managers just become consumed by feature-making and feel unproductive if there’s not a constant rush to hand new features off to engineering (which are then rushed to release).
jaredgorski··on Signs of the Times
“the fact remains ... one is existentially founded on dogma, and the other isn’t.”

You’ve responded to a rhetorical challenge against your position by essentially stating your position, which is circular thinking. It’s not a “fact” or even a forgone conclusion that religion is, by necessity, more dogmatic than any other human activity. Humans engage in political dogmatism every day, for example, perhaps even rivaling religion in certain regions and at certain points. Non-religious dogma has also fueled many recent wars.