RSSAmplifier

Blog

Dispatches - Eric Farkas

ericfarkas.comRSS feed ↗31 posts

Latest posts

Share By Default

Information asymmetry is a feature, not a bug, of management. You are in meetings with leaders from different teams and departments. In these meetings you learn things . Not only that, as a good manager you seek out information. What are other departments working on? What features are we missing that cause us to lose potential customers? As a manager, how should you decide which information to…

Book Review: The Ride of a Lifetime

The Ride of a Lifetime by Robert Iger Robert Iger was the CEO of the Walt Disney Company from 2005 to 2020. In The Ride of a Lifetime: Lessons Learned From 15 Years as CEO of the Walt Disney Company , Iger recounts his time coming through the ranks at ABC, Capital Cities, and eventually, as the title suggests, CEO of Disney after Michael Eisner. This book is mainly a business biography. There is…

Questions I Ask During Code Review

The following is adapted from an internal writeup I did for my team on the topic of code review. It has been shaped by my experience as a developer and engineering manager in the particular technical, social, and business contexts of my career. A year ago, this document would have looked different. A year from now, it will hopefully look different too. While I think some of these points are…

The Map Is Not The Territory

I’ve been thinking about how the idea that “the map is not the territory” applies to software development. In software development, we use tools that us help break large tasks into smaller ones. We can represent these sub-tasks as “cards”. But, if we don’t pay attention, those same tools can lull us into thinking of our application as the smaller units those “cards” represent. We begin to mistake…

Cleaning Up Old Git Branches

At work, we typically delete remote branches after they are merged into master . This often leaves me in a situation where I have many local branches whose remote no longer exists. Some folks like to keep those branches around just in case . Because of the power of git-reflog , I don’t think keeping old branches around is necessary. In a perfect world, I’d git branch -D everytime a remote branch…

Working On Large Features

I’ve spent most of the last 18 months working on large features at my day job. For my purposes, a “large feature” will have most of the following characteristics: Needs more than one developer, if the goal is to ship the feature in a reasonable timeframe (a month, a quarter, etc.). Immediately becomes a core aspect of the product offering, from a business perspective. Immediately becomes a core…

A Refactoring Story

Last spring, development started up again on a side business that I'm involved in. I'd hardly touched the two apps that run the business in over 3 years, and they needed some love. Back in May I discussed wrestling with the question of whether to Refactor or Rewrite these apps. I decided to refactor, and I don't regret the decision. What follows is one small refactoring that I did. Context…

Understanding updateIn & keyPath in ImmutableJS

ImmutableJS is a neat library, especially when used in combination with Redux . I’m not ashamed to admit, though, that I found the docs confusing at first. For example, look at the method signature for Map#updateIn() : updateIn() is a useful function to use when you’re interacting with Redux. I had to understand it. In the end, what helped me become productive with updateIn() was understanding the…

10 Things I Wish I Knew As A Junior Developer

Here are some things I wish I knew when I was a junior (and solo) developer trying to "level up": The best way to level up is by pairing with someone more experienced. Books & screencasts are great and should be used, but pairing will help you make the leap more quickly. My "level up hierarchy" is pairing > code review > books/screencasts . Everything is a tradeoff. You need to see the advantages…

Remote Work

This was posted in Slack a few days ago: Any of the remote folks here have any resources on [building an ideal desk/office // stepping up the communication & collaboration game // building life structure] around remote work? I'm coming up on 2 years at Chargify (and therefore 2 years of full-time remote work), which puts me in a good position to share my experiences as they relate to the above…

Elixir and Phoenix Quickstart Guide

I've begun tinkering with Elixir and the Phoenix framework . The guides on the Phoenix site seem to be slightly out of date, so I thought it'd be helpful to post a quick start guide. I am running OS X 10.10.3. 1 - Install Elixir via Homebrew $ brew install elixir The latest version as of today is `1.0.4`. Along with Elixir comes Mix . Mix is a build tool that provides tasks for creating,…

Inheritance

I'm coming to the opinion that, in Ruby, inheritance is never the first tool you should reach for when designing classes. This has been a difficult mental shift for me to make, coming to Ruby as I did from the Java world. Reading Practical Object-Oriented Design in Ruby earlier this year first put the idea in my head. But recent experience doing post-mortems on production code which made use of…

My git Workflow

I've settled into what I think is an effectively simple git workflow that I thought would be helpful to share. Let's say I am working on a new feature. First thing I want to do is make sure my local copy of the codebase is up-to-date: $ git pull master I'll then create a new feature branch. In my experience, 99% of the time I am branching off of master: $ git checkout -b an-awesome-new-feature But…

In Praise Of Effort

"If a thing is worth doing, it is worth doing badly." - G.K. Chesterton Newton's first law of motion states that objects in motion tend to stay in motion, and objects at rest tend to stay at rest, unless acted on by an external force. This law explains the reason behind an opinion I've adopted: starting something is difficult. Of course finishing, and finishing well, are also difficult. But I…

Learning vim

I've spent the last 6 months all-in with vim. At Chargify, we use vim when doing remote pairing, so it's been necessary to get up to speed for that reason alone. To shorten the learning curve I uninstalled TextMate on my personal laptop and have been using vim for all TalentSoup development as well. My vim knowledge was basic when I joined Chargify, and while I am far from expert at this point, I…

A Developer's Daily Checklist

Below is a list I am going to read everyday before I start working. Some points are repetitive, because I need to hear them over and over. This list is in no particular order. Communicate early, and often. Don't be afraid to ask questions. If something isn't clear or a proposed solution doesn't seem right, say something. At best you've discovered a blind spot in your team's approach, at worst, you…

The Challenges Of Being A Solo Developer

Since October 2009 I have been the only developer at TalentSoup . In the past, I've been part of large co-located teams, and smaller distributed teams (across continents). TalentSoup is my first experience building an application this large, by myself. I want to briefly talk about my experience as a solo developer, and offer some helpful tips to others in the same situation. In short, the best…

Recent Experience With Service Objects In Rails

I read Bryan Helmkamp's blog post 7 Patterns to Refactor Fat ActiveRecord Models when it was originally posted, but it's taken me until recently to implement some of his suggestions in TalentSoup . Specifically, I've been writing service objects, using similar criteria to Bryan. One quick example of how I've used service objects is in the downgrading process. Previously, my code for downgrading an…

How To Create Opportunity

A number of related but scattered thoughts on the subject of creating opportunity for yourself. Favor Action Over Inaction Look at goals you have in terms of actions to be taken. It's not enough to write down ideas and talk about them. You have to work to implement them. Recently someone at my church suggested regularly getting together during the summer at a local beach for volleyball. Everyone…

Things To Look Out For When Building An App

A while back I found a great set of notes that were taken at a presentation by del.icio.us creator Joshua Schachter at the 2006 Future Of Web Apps summit. They were really helpful to me in my growth as a developer. Unfortunately the notes are no longer available at the original URL, so I've taken the liberty to reproduce them here. Again, these are not my own notes (credit goes to Simon Willison )…

A (Short) Rant About Working Remotely

I get emails on a weekly basis from recruiters looking for developers. The first question I respond with is, "Are you open to remote workers?", to which the answer, 99% of the time, is "No". The reasoning is inevitably something along the lines of "They're an early stage/small company, so they want to have everyone in the office", as if being a young or small start-up necessarily means that you…

Setting up statsd + graphite on Ubuntu 12.04 LTS

There are many great tutorials about setting up statsd and graphite , specifically on Ubuntu 12.04. The best walk through I found was https://github.com/janoside/ubuntu-statsd-graphite-setup . I'd like to add some things that were left out of that tutorial that I had to figure out. Database Creation The above Gist leaves out the initial database creation. Be sure to thoroughly read…

Learning - Interesting Array Manipulation

I said in the post about my 2013 learning plans that I'd blog about whatever I learn, even if it's dead simple or something I should have known already. This is my first such post. Let's start with this array: a = [ 1 , 3 , 5 , 7 , 9 ] #=> [1, 3, 5 , 7, 9] We can replace two elements with one using the following notation: #=>a = [1, 3, 5 , 7, 9] a [ 2 , 2 ] = 'foo' #=>a = [1, 3, "foo", 9] Think of…

Learning Plan For 2013

I've started to think about and plan how I will improve my development skills in 2013. My goals are: Deepen my knowledge of the Ruby language Learn CoffeeScript Become familiar with database technologies other than MySQL, especially MongoDB Consistently write about what I am learning, whether it's simple or not Write a Ruby driver for NSQ I will achieve my goals in this manner: Read CoffeeScript:…

Dynamic Images (Or A Lightweight Gravatar)

We recently rolled out Creative Commissary , our project management tool for image producers. It's a completely separate app from TalentSoup in every way. They do not share databases, and communicate via a JSON-based RESTful API. Clients build and manage projects in Commissary, and the talent details (name, contact info, etc.) are stored in TalentSoup. In TalentSoup, talent have the option of…

Sinatra, ActiveRecord, and MySQL

If you want to use ActiveRecord with Sinatra , the sinatra-activerecord gem is the way to go. The examples in their documentation are for the sqlite3 adapter. I thought it'd be helpful to show how I used this gem with MySQL instead. I created a models folder in my app root, where I store my ActiveRecord models. You can include all of them in one file (like models.rb ) or give each model it's own…

Pipe Fabrication with QuickPen 3D and CSVs

I've been told that it's good practice to blog about code you've written, and the thought process behind it. Doing so gives people an insight into how you approach problems, which at times is more important than what exactly you wrote. This is such a post. My full-time job is as a mechanical draftsman for an HVAC contractor. Our work is mostly in high-end residential apartment buildings and hotels…

Eager Loading With Authlogic

I've used authlogic for authentication and session management on a number of projects. For one application, I wanted to eager-load an association at the time of a successful sign-in. I thought it'd be helpful to demonstrate the code here, since it took some digging through the documentation and other examples to figure out how to accomplish this. Basically you want to create a new session within a…

Global Exception Handling With Bugsnag

At TalentSoup , we recently launched a new application privately to a number of our trusted customers. For exception handling, I decided to give bugsnag a try. In the past I've used the exception_notification gem, and have even rolled my own solution for handling exceptions, but for this new app, I thought I'd do something new. I'm a big fan of leveraging existing "solutions" for common tasks, so…

Full-Time/Part-Time Co-Founder Dynamics

I received a lot of feedback, via Hacker News , Twitter, and email, from my post titled How To Do A Startup On The Side And Not Lose Your Family . Based on that feedback, I have a lot of ideas for future posts. There are a lot of people out there trying to do the "startup on the side" thing while leading a full family life, and perhaps there hasn't been a lot written specifically for that group. I…

How To Do A Startup On The Side And Not Lose Your Family

In October 2009, I joined TalentSoup , as the technical co-founder and lead developer. There's a really crazy story about how I wound up finding Rad Harrell and TalentSoup, but in short, I answered a call for help in this tweet and the rest is my history. Oh, and the first thing I did when I joined TalentSoup was ditch Drupal for Rails. My So-Called Life I was at the time, and still am, gainfully…