At Greenhouse, we’re currently working on a reports dashboard. Typically, based on how many widgets you have on your dashboard, there are a number of queries that need to run, and based on the amount of data you have, these queries may take a while to complete. Given this performance problem, we decided that we wanted to have our queries run only once and that anytime you come back to the dashboard page, we’ll read from the cache instead of re-fetching the data. Note that this primarily works in a single-page app context since the data is only cached on…

I’ve always been a staunch supporter of using d3 for visualization projects because it’s probably the most flexible tool. This flexibility comes at the cost of a steep learning curve, but in my view, the cost of using d3 is worth it.

Why use d3 despite the learning curve?

Most designers I have worked with tend to have design and UX requirements that are more complex than what standard plug-and-play charting solutions can provide. With plug-and-play tools, oftentimes we have to say no to several of the design team’s requests and as a developer, I try to avoid that whenever I can. While it is technically possible…

Image Credit: Carolyn Jao

I recently attended another great workshop by Kent C. Dodds, this time on React performance (I wrote about his workshop on React hooks here). It seems that Kent’s workshops have been my blog post fodder recently 😄, but I do highly recommend them to anyone who is interested in any of his workshop topics.

During the Q&A portion of the workshop, I asked Kent, “If you were given a slow React app with many different kinds of performance issues, how would you approach fixing them?” In other words, how would he prioritize the different approaches for fixing React performance issues…

Image Credit: Carolyn Jao

I had a great experience attending a workshop taught by Kent C. Dodds on the topic of Advanced React Hooks. I highly recommend this workshop for anyone who is interested in learning more about React Hooks beyond useState and useEffect. This blog post is more of a way for me to write down my takeaways so that I don’t forget them, but I hope others would find it useful as well.

This post will probably not make a lot of sense if you’re not familiar with the basics of React hooks and specifically how useState and useEffect works. …

I always enjoyed learning new keyboard shortcuts and finding ways to optimize my workflow, which naturally led me to use vim. Vim was very appealing to me because it promised a faster workflow by decreasing the number of keystrokes and allowing me to never have to switch from my keyboard to the mouse as I write software. Watching other developers on my team use vim, I was fascinated by how quickly they were able to find and edit text and, despite the learning curve, I decided to jump in and start learning vim. That was 2.5 years ago, but I…

Capybara/Selenium feature specs can be one of the most frustrating types of tests. There is a lot of unexpected behavior and many pieces to keep in mind. Code runs in separate threads, and both AJAX behavior and Capybara find methods create timing issues. The aim of this post is to describe a workflow that makes debugging more efficient.

1. Understand Capybara waiting behavior

Default waiting behavior is the key aspect to understand in writing Capybara specs. The software consultancy thoughtbot has an excellent blog post on writing asynchronous integration tests with Capybara. As the post makes clear, you can use the default wait behavior of…

David Han

Software Engineer @ Greenhouse Software

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store