Your development environment is your culture

As Director of Engineering my job is to help build and facilitate the company culture for the engineering team. Culture is where you spend your days and your efforts. Culture cannot be confused with perks. Perks are free drinks and stand up desks. Culture is ultimately what makes top performers leave or stay at companies.

You can usually assess a team’s culture starting right at the development environment. How much time have they invested in automation? How long do builds stay broken? Does anyone care when a build is broken? Do they have test automation running? Have they centralized logging? How do they know a new code push doesn’t introduce a regression? Can someone checkout a project, follow the README and be up and running or do they have to chase down someone to help troubleshoot? How can we quickly can we safely get from laptop commit to production? What are all the steps involved there, are they automated?

The Ultimate Guide to the Standup Desk

I'm on my 6th month of using a standup desk. I waited a bit before writing this so I wasn't on my high horse writing about something then abandoning it after a month. First a little history… several years ago I injured by back pretty bad playing ice hockey and was bed ridden for weeks. The pain lasted almost a full year before I could do normal things again. Turned out it was a ruptured disk in my back and limited what I could/couldn't do going forward. I've also had a desk job programming since I was 18 years old (now 35) so that wasn't helping. Since then I've had ongoing back pain while working and sitting all day.Several months ago I saw a post on hacker news that kind of just woke me up. I've always wanted to try a fancy standing desk but didn't want to invest the money if I wasn't going to use it. The post was here: It woke me up to the fact I could just use a freaking chair or some boxes to start out with and didn't have to wait for anything, and that day that's exactly what I did. I threw a chair up on a desk and used my laptop on there for the rest of the afternoon. The chair was kind of inconvenient with wobbling and other issues, so I threw a set of drawers upside down and away I went. Here's the first picture I took of my new set up. It's crude but worked!

Close your laptop and pay attention

I recall a meeting in my stint at Panasonic when I was presenting my plan for a unified content and delivery system for in air applications and media suppliers. It had all the big wigs up to our VP of Engineering. I worked on my pitch as to why this was the right move going forward for the company and had all the relevant points to combat devil's advocates. I had been in many product pitch meetings so I was used to now seeing many people tuned out, attached to their keyboards. I vowed when my turn came that I would not let this happen as countless times I've heard in those meetings "I'm sorry, what did you say again?".

When I saw the clock struck 3pm I waited a few minutes for the attendees to take their seats. There were probably 30 or so people in the meeting as the golden rule in enterprise is "The more people's time you can waste the better". I sat there with the opening slide up, not saying a word. Eventually, minutes later the VP looked up and said "Are we starting this meeting?" I replied "Yes, as soon as all the laptops including yours are put away". There was a quiet moment of semi shock as most people didn't believe I actually just said that, but that is the beauty of a strong engineering market. When you don't fear for your job you're able to actually get work done. A little bit taken aback everyone closed their laptops and the meeting commenced. The meeting continued as planned and the project was green lighted and is still in place years later.

Startup Lesson: Why a Vacation is not just good for you

When I was in my first few Months at McAfee (Foundstone Security startup at the time) we had just finished version x of our Enterprise focused Vulnerability Scanning software. There was a lull between releases as customers started getting the new rollout of the software as it passed through our QA department (hi John!). It was a long march to the finish, the team lead (let's call him Dietrich, cause that was his name) at the time decided a much needed break was in order and he was going to head to Joshua tree for a weekend camping trip (which was purposely I think out of cell range) with the family. He left on a Thursday and wouldn't be back until the following Monday. I was next in charge in the dev team for the web side of the application and still wasn't quite up to speed on some of the core complexities of the application's internals and libraries. I thought how bad could it be, just a day to cover for him and Monday would be back to normal.

Friday afternoon our CTO and software manager ran over to my desk around 4:30pm and said "Customer X just found a major bug in the new release and we can't leave until we get a fix out for them". Customer X was our largest customer at the time and the deal was easily in the 7 figures so we all took it quite seriously. To be honest I cannot remember what the actual bug was right now, but I do remember be thrown into custom PHP extension hell(windows), a SOAP layer Dietrich had written himself(NuSOAP), and other internal libraries trying to track down where this semi-reproduceable bug was coming from. I also distinctly remember the CTO at the time getting pricing on helicopter services to actually fly to Joshua tree to pick Dietrich up as a solution was not readily presenting itself in the first hour and we couldn't get a hold of him. No pressure!

Loan Shark - Using the Loan Pattern in Scala

Today we're going to look at elegantly using the Loan Pattern in Scala. One of my big pet peeves on Java is how convoluted it is to read lines from a simple file. You're looking at 10-15 lines of code with opening/closing resources, try catches, etc… (see here). This can be solved in Scala by making use of what's called the "Loan Pattern" (thanks to Chris Bissel for turning me on to this one). The loan pattern does exactly what it says it does, it loans a resource to a function of code. This let's you abstract away all the setup, managing, and closing of resources. Not only does this save a ton of time but it also has the side effect of reducing memory/resource leaks since the closing of those resources is abstracted away from the client code.

Here is an example of using the Loan Pattern to read lines of files in my /var/log/secure.log file and print them out to the console

How to accept command line parameters that pass to a Import Macro using Apache Pig 0.9

The docs don't specifically show an example of how to pass a command line parameter to a macro, but it does say you can't you use parameter substitution inside your Pig script. Below is an example of how to pass a command line argument through to your Pig Macro definition.

File 1 - A sample load location (schema.pig)

Below is some sample scala code that makes use of the Akka library to provide some examples of load balanced actors using Akka's available features.

The first thing we'll do is create an object to act as our manager that will create a series of actors for us, then a supervisor, then a load balancer. When we fire messages to the actors this configuration

will attempt a round robin style approach to distributing the messages across the actors. This is just a simple example that doesn't do any real work just to get you some boilerplate code for working with load balanced actors

I was just reading Daniel Spiewak's blog regading the use of Scala's flatmap operation. It seems to be one of those confusing parts of Scala so I thought I'd post a clear example of how and why you'd want to use a flatmap on a list of things.

This is a how to on installing the Cloudera Flume project from tarball and Ubuntu package

Installing Flume from tarball

My Todo workflow Video

Hi everyone,

just thought I'd throw up a new video of how I manage my day to day Todo list using a simple Todo.txt file inspired by So here is a video of how it works: