Notes from Prakash Venkatraman

Greenfield Projects: Seven Ways to Set Yourself Up for Success

By on in Development, Process

A developer’s perspective on building teams that build from scratch

There’s a story I once heard about a traveler and his party who peer out across an abandoned minefield to a site of buried treasure. There is no detour that will take them around it — they can cross together or separately, and they can go straight or around in circles. While they can deliberate over a plan, the sun is setting and they need to make a decision soon. What do they do?

That grassy field could represent opportunity — the path to success, riches, or adventure. Or it could be the opposite. A series of pitfalls disguised as freedom. Does this sound familiar? Does the term greenfield project ring any bells?

Continue reading …


How to Deploy Elixir Releases with Ansible

By on in Development, Elixir, Ops

In my last post, I described how to generate a platform-specific Elixir release. Now, the only thing left to do is to put it on the world wide web.

To follow along with this post, you’ll need a few things:

  1. An IP address for a remote machine (preferably running Linux) you want to deploy your application to.
  2. An RSA keypair, with the public key placed on that remote machine. Read more about how to do this here.
  3. Ansible (on your local machine). Read more about Ansible here.

Continue reading …


Cross-Platform Elixir Releases with Docker

By on in Development, Docker

Deployment, despite being an essential task, can be a confusing part of shipping an application. Depending on your stack, there could be a plethora of tools out there or… none at all. Unfortunately, Elixir falls into the latter bucket. Despite having a heart of gold, the language is still obscure, and that makes the process of deployment a tiny bit harder.

Addressing this problem may have been the reason for incorporating releases into version 1.9 of the language. Since the version bump, Elixir Releases have received the official blessing of the core language team. That means that deployment will finally be a piece of cake… right? There’s a caveat. While releases are meant to be self-contained executables, they still call out to native system libraries to do things like open TCP sockets and write to files. That means that the native libraries referenced at compile time need to be exactly the same as the ones on your target machine. Unless you can guarantee that your workstation and cloud are exactly the same, releases can seem like only half the promise of a stress-free deployment.

Continue reading …