Tips & Tricks for Reducing Server Load thumbnail

At Lucid, we have a service-oriented architecture. One of these services is a font service that is responsible for serving font data based on family and unicode range and checking permissions for user-uploaded fonts. We didn’t expect the font service to have particularly high load1 (load is the average number…

WebAssembly Overview: So Fast! So Fun! Sorta Difficult! thumbnail

WebAssembly was first described to me as “a way to run C++ on the web,” which was technically vague enough to ignore, despite my love of both C++ and the web. I heard about it again later at the 2016 Chrome Dev Tools Summit, and I decided to check it…

How to Transition to Tech: A Friendly Guide to QA Careers thumbnail

When I tell people about my transition from mental health science to quality assurance testing, the response is similar across the board: “Wow, I could never do that!” There’s a false perception that the tech industry is unreachable for people with backgrounds outside of tech. I spent over half a…

Removing Roadblocks in the Move to Angular 4 thumbnail

Angular has become the de facto front-end MVC framework of the Web. We had been slowly adopting Angular 1 here at Lucidchart, but the vast majority of our crucial components were built in jQuery and vanilla JavaScript. We were one of the early pioneers of Angular 2. We found Angular…

Using Angular 2 Components In a Non-Angular App thumbnail

Lucidpress is a large application—hundreds of thousands of lines of handwritten JavaScript. After seeing the success Lucidchart had in modernizing its UI with Angular, we wanted to follow suit, but we didn’t have the resources to do a wholesale rewrite all at once. We wanted to write some new Angular…

Package Management: Stop Using Version Ranges thumbnail

The problem Package and managers Packages are collections of software: data files, binaries, executables, source archives, etc. These are published, resolved, downloaded, and installed with package managers. Unfortunately, in 2017, almost every package manager has the the ability, the default, or even the common practice of creating nondeterminism in the…

Cracking the Code Review, Part 2: Tips for Reviewers thumbnail

Previously, we discussed ways that you can maximize the success of the code reviews you request from your peers. However, preparing a good code review is only half of the story. There is a lot you can do as a reviewer of code reviews to make your review as helpful…

Upgrading From Play Framework 2.3 to Play 2.5 thumbnail

Recently I had the opportunity to upgrade the Play Framework from 2.3 to 2.5 on all of Lucid’s JVM-based services. A lot of the upgrade involved pretty routine things like changing implicit parameters from Lang to Messages or updating uses of play-json to match the new API. However, over the…

Cracking the Code Review, Part 1: Preparing Your Code Review thumbnail

Code reviews: Some love them, some hate them, but most probably see them as no better than a necessary evil. As a result, we often view them as a mundane task to check off the list–a final gatekeeper before our wonderful features or bug fixes can begin their journey into…

Angular 2 Change Detection: “Seeing” It in Action thumbnail

The Angular 2 change detection system is somewhat of a black box: you update some variables in the model, and the components update automatically. Thoughtram, Victor Savkin, and other websites have written some excellent posts explaining change detection (which we reference in this post). Often, these posts present a series…