Get involved in high visibility projects, be opinionated, and share knowledge as much as possible

People sitting at a long table
People sitting at a long table
Photo by Christian Battaglia on Unsplash

Studies have shown that one of the most common reasons burnout happens in the workplace is that you don’t have any control over your job’s expectations and activity. While it seems like long work hours are the common reason for burnout, a common feeling for burnout is because their work is not appreciated.

Software engineers often switch jobs because they feel like staying in one job stops their growth. Thus, switching jobs is one of the fastest ways to increase one’s net worth and title.

As software engineers, we yearn to do meaningful work. That meaningful work, to translate into…

Design performant databases

Image provided by Author

Designing a database application is the first thing we usually do when we want to start working on an application. Data is at the core of these applications, whether a simple to-do app with React and NodeJs or a complex monitoring application for microservices.

Designing a good data model can help you write more performant software, and there are also fewer hacky steps that you need to do when extending a new feature.

One of the popular databases for modern applications is DynamoDB. DynamoDB is popular because it was designed for enormous, high-velocity use cases, such as the Amazon shopping…

Know when to go asynchronous in your microservices

Sign that reads “nope.”
Sign that reads “nope.”
Photo by Daniel Herron on Unsplash.

Asynchronous communication is becoming widely used in processes and systems — especially in microservices. You see, people blog about how they can make certain operations asynchronous. All the newest web application frameworks and programming languages are created to make asynchronous programming much easier to reason about. There are tons of great benefits to implementing asynchronous communication. Your program may run faster, your client may be happier, and so on.

However, there are also downsides to asynchronous communication. One of the disadvantages is that it is very hard to debug when there is a problem. Your program becomes complex.

For instance…

Understand the two families of storage engines that power modern-day databases

decorative: strings of colored disks organized in an array
decorative: strings of colored disks organized in an array
Photo by JJ Ying on Unsplash

When evaluating databases, we often think about each database as having its own identity. For example, if we want to do transactional operations, SQL is a good database to consider. In terms of model flexibility, NoSQL may trump SQL if the model changes often. Then we have the modern distributed SQL database, such as Google Spanner, that can provide global transactions and strongly consistent reads.

However, it is paramount to understand the underlying storage engine within these databases to explain how databases deliver these promises. For instance, why are relational databases very useful for performing transactional operations? …

Strive to be more valuable and less critical

Working in office
Working in office
Photo by LYCS Architecture on Unsplash.

Most of us would be thrilled to be described as critical to a project’s success — one of the engineers who is the go-to person for certain problems. They are usually the tech lead or manager who has participated in most design decisions and knows the project’s history. They might have written a large portion of the code base on the system.

We aspire to be the key engineer to whom people go with questions and problems. Companies do mark that factor in their leadership principles — especially with regard to promotions.

“Junior engineers who demonstrate that they can be…

You tell the story to computers, stories you tell to humans, and a story you tell to the end-user.

Photo by S O C I A L . C U T on Unsplash

Humans absorb better knowledge through storytelling. People often said that data didn’t mean anything if you don’t know how to tell a good story about them. I said that good programs tell a good story to machines which operate on them and to the human who understand them.

Let’s take an example of why I think programming is storytelling.

Sometimes we get confused about why a certain codebase behaves in that way. For instance, when you look through an old codebase, some parts of the codebase get you to think, “why does the function return a generic type instead of…

Make sure you check all these scenarios when parsing JSON input in your apps

Photo by Ferenc Almasi on Unsplash.

Designing applications based on security is as important as designing for scalability.

In 2017, a group of attackers sent a spoofed packet to 180,000 servers in Google Cloud that reached a size of 2.54 Tbps. This wasn’t meant to get a password or personal information but simply to take down the service.

A Denial of Service attack is an attack intended to disrupt the normal service of the targeted server. Just like how a huge amount of payload can take down a server, an attacker can use the same method to deliberately take down an application server. The key to…

Be transparent and maintain a long-term relationship with the candidates

Photo by Yoav Hornung on Unsplash

Back in college, I had a wrong impression of Yelp’s recruiter at a career fair. That memory was very vivid that not only that I never apply to Yelp as a Software Engineer, but I also didn’t associate the brand as a good brand because of one poor experience.

Just like customer service represents the excellent brand image of its product, the recruiter represents the company’s brand that each candidate is interviewing for.

I recently encounter something similar, except I have a brief interaction with a recruiter and move forward to the coding round. Unfortunately, I didn’t do well on…

Hint: They’re more expressive and type-safe, adopt immutability, and have great concurrency support

Men working on a professional racecar
Men working on a professional racecar
Photo by Markus Orth on Unsplash

Bugs usually occur when there’s a mismatch between what we expect the program to do versus how the program actually acts.

Most bugs aren’t the fault of the language itself — instead, they’re the fault of developers making mistakes in using the language. However, some programming languages have been designed for use not only for writing readable code but also to help a developer do the right thing. For instance, Tony Hoare said that inventing null has been a “ billion-dollar mistake.”

He mentioned in his presentation at QCon 2009 that he’s trying to design the first comprehensive type system…

React is declarative. SQL is also declarative. Is there a commonality?

Image of flowchart
Image of flowchart
Provided by author

A lot of our applications nowadays center around APIs. For instance, a lot of the core of our application code communicate through APIs. We built applications by layering them with an understandable abstraction. This abstraction layer is essential because it helps us solve how our software is written and its problems.

There are two popular ways of defining an API — imperative and declarative. SQL is a declarative query language, whereas IMS and CODASYL query databases using imperative code. The most commonly used programming language is imperative.

However, in this article, one of the big reasons a declarative API is…

Edward Huang

Software Engineer. Sharing my notes, thoughts, and document my journey in technology, functional programming, and careers in tech |

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