-
Estimating Engineering Tasks: The Soft Side20 August 2017
Estimating work is the bane of every engineer’s existence. If you overestimate and deliver too quickly, the perception is that you’re sandbagging, whereas if you underestimate and deliver too late, the perception is that you’re not competent. Most resources about task estimation are purely technical. The “soft side” of estimation is equally important, yet rarely discussed (and in practice, it usually causes the most friction). In this post I’ll discuss the psychology of estimation, ways to communicate with stakeholders about...
-
How to Actually Brainstorm (like a respectable businessperson)15 August 2017
How do you brainstorm while maintaining a balance between pragmatism and creativity? In this post, I’ll discuss some theory behind maintaining this balance, and then I’ll discuss some actual, real-world tips for how to “actually brainstorm”, and where to proceed next.
-
Practical Queue Considerations14 August 2017
Intuitively, we jump to HTTP to use as our communication protocol between services in a system. However, using a queue has many benefits. In this post, instead of diving only into theory of queues, I’ll give practical advice on implementing a queue, illustrate some use cases I’ve encountered in a production system where using a queue had obvious benefits versus HTTP, as well as give some practical implementation ideas.
-
Understanding Mongoose Deep Population24 January 2016
While MongoDB doesn’t natively support joins, the Mongoose framework now supports “deep population” (Mongoose has supported single-level populations for a while), which is akin to passing Mongoose a “graph” of what data should be populated in the results of your query.
-
Breaking down HTTPS17 January 2016
What is HTTPS, and why is it any more secure than HTTP? What is TLS, RSA, symmetric and asymmetric encryption, and what happens when I send my credit card over a secure connection so that I can buy Game of Thrones with the sole intention of binge watching the entire season in one evening? This article will attempt to answer those questions (but not the one about your obsession with Game of Thrones).
-
Using node.js to upload your app to Google Play26 December 2015
If you're developing a hybrid mobile app, you may want to stick with node.js to upload your app to the Google Play Store. However, Google's node.js client is still in "alpha", and documentation is very limited. This post gives information about basic setup to get started using the googleapis client.
-
Initial thoughts on event sourcing24 December 2015
"The state of any object can be derived from the events that affect it." In a nutshell, this is the thesis of "event sourcing", which, when implemented in an application, becomes an "event driven architecture". In this post I'll discuss some of the practical applications, benefits, and drawbacks that the team and I have noticed after migrating our current, stateful database to a more event-driven approach.
-
Get rid of $scope, and extend into the view model23 August 2015
AngularJS's controllerAs syntax is a good first step into being able to have some sort of sense of hierarchy in applications. However, large controllers can still get unwieldy. We can move towards controlling our controllers with angular.extend.
-
3 lessons in solving stupid engineering problems (without resorting to manslaughter)23 August 2015
Recently, some colleagues and I dreadfully spent (read: wasted) valuable man hours attempting to solve a bug in a hybrid mobile app. The cause of the bug? A missing <script> tag. Several important lessons can be learned from the ways in which we decided to go about solving this simple headbanger (no, not like you'd do at a heavy metal concert; rather, where you actually consider banging your head on a solid object) of a problem.
-
3 reasons you should not be using Array.prototype.forEach15 August 2015
One of the main problems with forEach is that it primarily relies on side effects, whereas some native Array.prototype alternatives make use of semantically-correct programming paradigms (such as reduction, mapping, and filtering) and may in turn introduce less incidental complexity (and enhance readability) when writing code.
-
5 Things I Learned in My First Month at a Startup11 August 2015
In a departure from the normal content of this blog, I wanted to talk briefly about some of (what I think) are some important things I've learned so far in my first month working for a Bay Area tech startup.
-
Modern Looking CSS Toggle Switch26 May 2015
Create a nice, modern toggle switch that works by just changing its padding and adding a transition (all it takes is a JavaScript click handler to add or remove a class)!
-
From JavaScript to Ruby: Style Guide20 April 2015
This post is the second in the series of “From JavaScript to Ruby”, which is aimed at helping JavaScript developers transition their thinking from JavaScript to Ruby. Here you’ll find a table of the ways we do things in JavaScript, and the way you’re supposed to do them in Ruby.
-
From JavaScript to Ruby: Using Blocks Like Callbacks20 April 2015
This post is the first in the series of “From JavaScript to Ruby”, which is aimed at helping JavaScript developers transition their thinking from JavaScript to Ruby. This post will answer this fundamental question: how do I do “callbacks” in Ruby? The answer is: the “idiomatic” way (we’ll talk about what “idiomatic” means) to use so-called callbacks in Ruby is to use blocks. We’ll discuss blocks, and their similarities to JavaScript callbacks.
-
Something no one tells you about minifying AngularJS controllers (until it's too late)31 March 2015
This post is going to talk briefly about the common ways people are shown to write AngularJS controllers, why minifying your code will break your application if you write them in this way, and how to fix this problem.
-
Getting started with a search engine for your site (no server required!)26 March 2015
Today we'll talk about how to build a JavaScript-only search engine (using JSON and AJAX) to avoid databases and server-side programming. We'll do it all specifically in the context of Jekyll and GitHub Pages!
-
Tricks of the JavaScript for loop24 March 2015
I'm sure you've seen the common for loop written a thousand different ways. Well, in this post, you'll learn one readable way that is good for pretty much most instances where you'll use a for loop (some exceptions are noted, too). Oh, and scroll all the way down for a bonus snippet (we'll create something pretty cool, I think).
-
How to show a summary of your post with Jekyll23 March 2015
In this little snippet, we're going to explore an option to show a summary of your blog post or article, if you're using the awesome static-site generator called Jekyll.
-
Why do people add semicolons before modules?22 March 2015
This post is going to discuss the reasoning behind a strange-looking syntax style that some people use when declaring JavaScript modules (in the context of immediately invoked function expressions). Simply put, the point of this trick is to get around minification issues when using other people's code (or your own).
-
Lightweight dependency modularization22 March 2015
So what's this post all about? We're going to examine an interesting alternative for passing dependencies between JavaScript modules. The goal is to avoid any overhead (by using libraries like RequireJS), but also to avoid attaching too many things to the global namespace...
-
How do I check if a parameter was passed in to a function in JavaScript?20 March 2015
This post is going to talk about checking for the "existence" of a parameter, if we expected one to be there and how to handle this "flow of control", and how we define "checking for existence" in the first place. The fundamental concept behind all of this, as we'll learn, is the fuzzy idea of truthiness (which is different depending on which programming language you're referring too.) We'll see that JavaScript has a very broad idea of truthiness.
-
What is hoisting in JavaScript?20 March 2015
What is this strange word "hoisting"? As of the current version of JavaScript (ECMAScript5), there's not really such a thing as block scope, which is something common to lots of other programming languages (there is a caveat though, which we'll learn towards the end of this post.) Hoisting and the non-existence of "block scope" can be confusing. Learn how to overcome this issue.