190 karma · joined June 26, 2011
Talk to me if you’re interested in learning more about Lookout, or if you need to solve a problem with technology.
Let’s build something.
- Punctuation & Type
- Body Text
- Legibility & Readability
- Layout & Hierarchy
- Typeface Selection & Pairing
- Design & Branding
The Typewolf site itself is pretty cool as well, but skews towards print/graphic/marketing site design that isn't always applicable to applications, though there are some exceptions.
- https://every-layout.dev/rudiments/boxes/
- https://every-layout.dev/rudiments/composition/
These articles do a good job of presenting one perspective on a big picture of web layout. The paid content is worth the price if you agree with the overall approach they outline in the Rudiments section.
Libraries like React are awesome for breaking down complex (or even not so complex) UIs into story sized chunks that can be tackled by different engineers or even different teams. This is one of the biggest reasons to consider using them, IMO.
Even in the case of relatively unremarkable CRUD application, if the backend is split across multiple services and teams it may be entirely reasonable to choose to build a SPA frontend with a dedicated team.
On the other hand, if you're building a Rails app with a small team, and most engineers are working full-stack out of necessity, a SPA may not be appropriate.
As companies grow, I've found roles tend to become more specialized. Your decision to build a Rails web app early on could be considered legacy cruft (by some) down the road because it can be difficult to break down and deliver a feature across the full stack if you're not accustomed to building web apps that way.
There are tradeoffs to all of these approaches (including the hybrid approach). Ultimately, you need to do what's what right for your product and team(s), and make your technology choices intentional.
As far as how fast frontend technologies are changing, in my ~10 year career, I've only had to use jQuery (~2008-present), Backbone (~2012-present) and React (2015-present) professionally. These libraries weren't swapped out on a whim, and I still use all 3 in different projects on a weekly basis. While I've dabbled with most of the others, I haven't selected them or encountered them professionally.
To some extent, I think library churn can be attributed to keeping things interesting when the problems you're solving are less interesting.
Most frontend engineers could probably benefit from rolling their own SPA library (not for production use, but to learn how the different pieces come together). There's probably room for a few more "From Scratch" tutorials in this space akin to Destroy All Software's series of screencasts. Working through something like this would make it clear that the differences between the libraries above are smaller than it might otherwise seem.
Code reviews shouldn't dwell on style issues that can be handled by linting. To the extent that you can automate some of the review process, and prevent sloppy commits from being merged in by having them fail CI, you'll eliminate part of the problem. Another thing that helps is reducing the semantic distance between what a commit message says a commit does, and what it actually does. This is pretty easy to enforce relative to more subjective aspects of coding. The last thing that can make a big difference is not getting hung up on wanting to rewrite a commit as you would have written it, but focusing on improving understanding and clarity for whoever will inherit the code next. If there are serious issues with the architecture and patterns the code is using, CR can be too late in the process to address them effectively (depends on the scale involved). I'd try to collaborate with other engineers earlier in the process to help set them on the right path [1].
As for unit tests, make sure to isolate the unit (generally a class or function), and test its interface. Tests that are coupled to the implementation aren't as useful. Investing in writing unit tests now will increase your velocity in the long run. You'll be able to take on more technical debt in the short term with better terms, so to speak, since you'll have a robust test suite to refactor against. Obviously, this doesn't mean you should write bad code, but this will give you the option of considering performance and reusability tradeoffs if you need to hustle a feature out the door.
It'd be interesting to see if there are any existing solutions in other domains.
Here are a few harder problems that I can think of:
- Draw a non-linear gradient along an arc with SVG
- Implement a constraint solver in JS
- Convert a CgBI image into a standard PNG with the browser File API
A good portion of the work I do on the frontend is transforming and composing data, and wrangling that data together from a multitude of different services. This honestly isn't that different from the work that I've done on the backend of the stack.
I'm not trying to discount how hard problems can be when they're distributed, just trying to point out that you can do interesting things in both domains.