The process of copying data from a data warehouse to operational systems of record.

All images in the post are by the author

Today, the center of gravity for data has shifted into data warehouses. Every major business has started to adopt them, but there’s a wrinkle — while the data gravity exists in a data warehouse, it’s historically been really hard to get data out of the warehouse.

With this data silo, it means that everyone in your company has a limited view of your customer, hurting sales, and damaging the customer experience.

At Hightouch, we’ve seen hundreds of companies hit the barrier that the most important data is in their warehouse. …


Ever since Go caught significant attention outside of Google, dependency management has been a hot topic.

Initially, there was no dependency management beyond go get, which loads source files off origin/master to your system-wide $GOPATH. With internal dependencies, this often works since everyone is expected to use the latest version. However, for teams with 3rd-party dependencies, this was unacceptable due to mismatches, conflicts, breaking changes, and more so a number of ad hoc approaches emerged, e.g.

  • committing a project-specific $GOPATH
  • git submodules (and variations)
  • tools that automated switching between project-specific $GOPATH like gvm and gb

Eventually, folks realized we needed…


Recently, I built a lightweight task scheduler on top of AWS ECS in Go. The application schedules batch jobs with custom arguments and schedules as single containers via AWS ECS, an orchestrator built on top of EC2 and Docker. One of the key requirements of the scheduler is monitoring the status of actively running tasks. For this, I chose to use AWS ECS’s DescribeTasks endpoint, which takes ECS task ID(s) and returns their status, exit code if complete, reason for stopping, etc.

Due to rate limits, I had to batch API calls. …


If you’re really into something, you’re bound to get asked

Why do you love X?

all the time. This question seems straightforward at first. If you do something all day, how can you not know why?!?

However, it’s often surprisingly hard to articulate. When you really love something, you don’t often think about why — you just do.

If you know anything about me, you know that I write a lot of and about code. When I get this question, I often take the easy way out and reply with something along the lines of

I can use code to…


When I joined Segment back in January, I got a rundown of our benefits — including a free membership at the next door gym. In the past, I hadn’t really given going to the gym much thought, and call me silly, but I had always naively thought

I have lots of fun geeking out on my computer, feel pretty good, and am content with my looks… so why exercise?

Thus, I initially dismissed the idea of going to the gym. Months went by at the office, and on my way in and out, I had seen a coworker come from…


Golang has a defer keyword, which “defers” the execution of a function until the surrounding function returns. Multiple defers are stacked last-in first-out so that the most recently deferred function is run first.

Let’s check out an example of this in practice.

func writeLogs(c chan []string) {
defer stats.Duration("write_logs_fn", time.Now()) // order: 4

file, err := os.Create("request.log", filename)
if err != nil {
panic(err)
}
defer file.Close() // order: 3

writer := csv.NewWriter(file)
defer writer.Flush() // order: 2

for line := range c {
err := writer.Write(line)
if err != nil {
panic(err)
}
defer stats.Increment("wrote_line") …

Lately, I’ve been writing lots of Python and Go, but if you know anything about me, you’d know I was once a major Node.js advocate. Recently, when I’ve had to stretch my fingers to write a quick “life hack” or number crunching script to speed up my day, I haven’t been thinking of JS, so I definitely can’t call it my go-to language anymore. That said, since I once did, I believe I have the right to criticize it… so, let’s get started.

Standard Library

Node’s standard library is as minimal as can be. Though this is a great way to encourage…


Hey! I’m Tejas Manohar, and I’m running for a seat on the Node.js Foundation Board of Directors. Why I’d be a good fit:


Babel 6 was released about 1.5 months back and though there are still some considerable issues and the documentation is sparse, it looks like it’s catching a lot of attention.

babel-core’s download stats on NPM

That said, I spent a fair bit of time figuring out how to use Mocha with Babel so thought I’d share what I came across with the rest of the community.

mocha --require babel-core/register

Remember, Babel has been split up into multiple packages in a giant monorepo and the core compiler itself is now in babel-core so you’ll need that installed as a dependency for this to work.

UPDATE: If you need async functions and other features that require a regenerator, include babel-polyfill as well. Thanks, @simplyianm!


I’m proud to announce that a few weeks ago, I joined the Koa.js core team! By this, I’m joining and working even more closely with a group of amazing JavaScript developers crafting the library as well as its official middleware powering backend services of companies from Segment to Pebble to HomeSwipe to AutoLotto to … (something new I’ve been working on- shhh but stay tuned!). As a member of the Koa team, my immediate focus will be giving the static and routing middleware some highly deserved attention as well as contributing to v2, which is currently in alpha and what initially brought my attention to the project.

One of (my favorite) Koa v2 logo concepts floating around- credits to Yanick Rochon.

Tejas Manohar

Busy messing with computers.

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