Programming Posts

On microservices and distributed architectures

On microservices and distributed architectures

Like the boiling frog, we often fail to appreciate just how significantly the infrastructure upon which we rely as developers has improved over the last decade. When I began working with the Rails framework in 2010, everything from the hardware we used for local development, to the infrastructure upon which we tested and deployed, was positively anemic by today’s standard.

My personal laptop, reasonably high-end for the time, had a 5400 RPM spinning disk and 2 GB of RAM. SSDs were exotic, even on servers. Nowadays, you can get bare metal servers with 512gb-1tb of RAM, 2x multi-core CPUs and terabytes of fast SSD storage for a price that is perfectly reasonable for even small companies. Similarly, you can easily and cheaply launch fleets of high-spec virtual servers with providers like Amazon Web Services and DigitalOcean at minutes’ notice.

In many ways, it seems to me that we are often basing architectural decisions on imagined constraints. In my experience, a decision to embrace a microservices architecture should not follow primarily from concerns about scalability.

Some reflections on slow travel
Belgrade, Serbia

Some reflections on slow travel

I’ve spent the last couple of years doing what I would call slow travel, spending periods of a month or more in different cities. This began in late 2016 with a job that brought me to Berlin for months at a time over a period of a year. I quit that job last October and in the time since have been through Europe, Asia, the US, and then back around to Europe, where I am for the next several months with no fixed end in sight. I wanted to compile some observations that I’ve made in this time.

Why not give users equity?

There is a perspective from which the venture model that dominates a large subset of the tech industry is a little baffling. The infrastructure necessary to operate web/software products has never been cheaper. To an extent, the manpower has also never been cheaper (in the respect that it is increasingly practical to hire from a global talent pool spanning regions with very modest salaries). Still, the model that dominates Silicon Valley and other leading innovation hubs is one of selling off huge chunks of equity and pursuing liquidity for shareholders (via acquisition or IPO) over autonomy and sustainability (i.e. indefinite operation with profit distributions).

I say this is “baffling”, but there are reasons why the model persists.

A simple recipe for forwarding webhooks to your local development environment

A simple recipe for forwarding webhooks to your local development environment

If your web application integrates with third party services via Webhooks, you will likely have encountered the need to forward Webhook requests to a local development server.

My solution to this had long been a free utility called Localtunnel, which forwards requests from a randomly-generated public host (i.e. [random-prefix].localtunnel.me) to your local machine. A major problem with Localtunnel is that it will not provide you a persistent URL, so you end up having to constantly reconfigure services to point to newly-allocated/temporary URLs.

If you have a VPS or dedicated server, you can use SSH remote forwarding to accomplish the same thing that Localtunnel does, but maintain a persistent remote hostname and port. This way you can configure development Webhooks once for your third-party integrations and be set.

A tribute to Brutalist web design
Apartment block near Alexanderplatz, Berlin

A tribute to Brutalist web design

I spent a good part of last year living in Berlin, encountering large, Cold War era constructions like the apartment block pictured above on my morning walk. This style of architecture, distinguished by exposed concrete cast in hard lines, with little paint or ornamentation, is part of an architectural school known as Brutalism, and was very popular through the mid 20th century, especially in Eastern Europe.

The term has since been transposed to the online realm with brutalistwebsites.com, a site put together in 2016 by Pascal Deville (now Creative Director at the Freundliche Grüsse). I wanted to pay tribute to the tongue in cheek term by recognizing some of my own favorite Brutalist websites.

Nostalgia for the golden age of the Mac desktop platform

In 2009 I got my first Mac laptop. I had been running Mandriva Linux on a beat up HP Pavillion through the first two years of my computer science program, and the week it finally died on me a Gizmodo “Dealzmodo” post advertised a liquidation of last-generation 15 inch Macbook Pros by a reseller. I got my Mac and promptly discovered the unprecedented ecosystem of fantastic, passionately-crafted desktop software built for the platform by small, independent software houses. In retrospect I’ve come to believe that the period from around 2005 to perhaps 2010 was truly the golden era of desktop Mac applications.

Remote workforce as a superpower
Puzl Coworking Space in Sofia, Bulgaria.

Remote workforce as a superpower

Throughout the year 2017 I found myself working in a half dozen spots across 3 continents and many more timezones. This experience led me to develop an increasingly lucid conviction about the profound benefits that remote workforces can bring to a business.

Pre-requisites

I feel that often when a company rejects remote hiring, or revokes remote work policies (such as former Yahoo CEO Marissa Mayer famously did in 2013 while kicking off her tenure that ultimately ran the company into the ground) an implicit or explicit dimension of the decision is lack of trust. If you cannot trust your employees to do work when you are not watching, then indeed you should not have a remote team. I would caution that if you find yourself this circumstance it may be a signal of a much larger issue with your team makeup and probably demands urgent introspection.

Defaulting to non-disruptive communication

One of the most profound benefits of having a remote team is that generally team members will default to asynchronous and non-disruptive forms of communication. This can benefit workers in any role but it is particularly valuable for developers, who rely on having blocks of uninterrupted time to focus and think through complex problems.

2 weeks in Saigon
The Saigon skyline at night (Photo credit: TripSavvy)

2 weeks in Saigon

I spent the final 2 weeks of the year in Ho Chi Minh City (colloquially/formerly “Saigon”), Vietnam with a group of friends from Hacker Paradise. I wanted to share some quick impressions of the city while the experience is still fresh in my head.