CrossPixelNation
CrossPixelNation NYC

Let’s Party into 2009!

Today is New Year’s Eve, and knowing how people here at eROI like to get down and party I’m curious to hear what everyone is doing tonight. Any fun plans? What’s going on around town that you recommend?

Here’s something that sounds like a jolly-good time: salsa dancing! Anyone out there game for a dance? Even if you don’t know how to shake your caderas (hips) a little cerveza usually eliminates that inhibition. The Mambo Lounge on SE 18th is hosting a live band tonight, Afincando, so if you like this sort of scene it could be fun to check out. The doors open at 9:00pm and they have a dance class from 9:30-10:15pm before the live band starts. So, even if you don’t know how to salsa, you can get an intro lesson that will keep you from looking like you have two left feet. The band starts at 11:00pm and the cover is $23 at the door.

If you want a quick and dirty salsa lesson, check out this Intro to Salsa Dancing video.

eROI + Giving Back

The holiday party this year is doing something I really feel good about: giving to others. Growing up, my family seemed to focus on helping others particular during Christmastime. We’d donate food to the local food bank and then help distribute the food throughout the food baskets at the armory. As a kid I never knew who or what families received this food baskets full of Christmas dinner fixings, but looking back I recall how much fun I had doing this small act for others.

My mom continues to give back, and this year she’s “adopted” a middle school aged girl. This little girl had specifically requested a new outfit, so my mom, sister and I went shopping over Thanksgiving weekend to pick something out for her. Just like when I was a kid, it felt really good to do this small act of service for someone that I knew would appreciate it.

So, this year when we drop off the goodies for the women’s shelter, we can feel good about doing something that helps others. This is a small act that can make a big difference in someone’s life and give her a bit of joy and hope. Let’s try to spread these two things around this year through our eROI Donation Box.

Is there something that you did as a child that brought you joy through helping others? Or how about as an adult? Let’s share our stories and bring a smile to each other’s faces. Happy Holidays, eROI!

11.14.08 VajayJays at Backspace

Thanks to Emigrant and Backspace for hosting the event as the VajayJays (feat. Alex Williams) rocked the house!  Okay, so Backspace really isn’t a house, but enough of us to rock someone’s house. There were about +20 eROI employees to +10 Vidoop employees, so I definitely think we won that contest.

eroi-photos-503
The “Wooo!” Effect

dsc00719
“Shout at the Devil!”

dsc00717
Brought the dirty laundry


Free from the elevator

dsc00736
Nice toss Jeff!

dsc00760
Alex Williams on the guitar teaching me how to play

eROI in 3D



In college, some of my favorite classes were motion graphics and video editing courses. In fact early on in my degree I even toyed with the idea of going into the Movie/Special effects industry. The problem was I also loved web development and Flash in particular. I soon realized that with bandwidth and speed increasing on the web, all these technologies including video and even special effects would be coming together on the web and I could have the best of both worlds. As eROI grows and our projects subsequently grow so does the demand to push the bounds of what we can do in-house. With this in mind I have been getting back up to speed in After Effects (an Adobe special effects product) in my spare time. My first “test” project was to animate a logo in a 3D environment and re-familiarize myself with some of the built-in filters After Effects offer. I took an image that I had of our eROI ice-luge (from our parties) and turned it into a 3D eROI logo. I then did some fancy camera work to animate it and finally added some cheesy space effects. (wow, am I really traveling at light-speed?). I also created a simple eROI flash player to serve the video up. Enjoy. -Noel

The Importance of Clean Code

We recently picked up a copy of Robert C Martin’s Clean Code, a book that expels the virtues of developing clean, reliable code.  Right off the bat, the first chapter speaks directly to everyone on the product team, and has great value for anyone that writes even one line of code.

*sorry for the long quote, but I wanted to make sure it all made it in here*

The Total Cost of Owning a Mess

If you have been a programmer for more than two or three years, you have probably been significantly slowed down by someone else’s messy code. If you have been a programmer for longer than two or three years, you have probably been slowed down by messy code. The degree of the slowdown can be significant. Over the span of a year or two, teams that were moving very fast at the beginning of a project can find themselves moving at a snail’s pace. Every change they make to the code breaks two or three other parts of the code. No change is trivial. Every addition or modification to the system requires that the tangles, twists, and knots be “understood” so that more tangles, twists, and knots can be added. Over time the mess becomes so big and so deep and so tall, they can not clean it up. There is no way at all.

As the mess builds, the productivity of the team continues to decrease, asymptotically approaching zero. As productivity decreases, management does the only thing they can; they add more staff to the project in hopes of increasing productivity. But that new staff is not versed in the design of the system. They don’t know the difference between a change that matches the design intent and a change that thwarts the design intent. Furthermore, they, and everyone else on the team, are under horrific pressure to increase productivity. So they all make more and more messes, driving the productivity ever further toward zero. (See Figure 1-1.)

Figure 1-1 Figure 1-1 Productivity vs. time

The Grand Redesign in the Sky

Eventually the team rebels. They inform management that they cannot continue to develop in this odious code base. They demand a redesign. Management does not want to expend the resources on a whole new redesign of the project, but they cannot deny that productivity is terrible. Eventually they bend to the demands of the developers and authorize the grand redesign in the sky.

A new tiger team is selected. Everyone wants to be on this team because it’s a green-field project. They get to start over and create something truly beautiful. But only the best and brightest are chosen for the tiger team. Everyone else must continue to maintain the current system.

Now the two teams are in a race. The tiger team must build a new system that does everything that the old system does. Not only that, they have to keep up with the changes that are continuously being made to the old system. Management will not replace the old system until the new system can do everything that the old system does.

This race can go on for a very long time. I’ve seen it take 10 years. And by the time it’s done, the original members of the tiger team are long gone, and the current members are demanding that the new system be redesigned because it’s such a mess.

If you have experienced even one small part of the story I just told, then you already know that spending time keeping your code clean is not just cost effective; it’s a matter of professional survival.

Attitude

Have you ever waded through a mess so grave that it took weeks to do what should have taken hours? Have you seen what should have been a one-line change, made instead in hundreds of different modules? These symptoms are all too common.

Why does this happen to code? Why does good code rot so quickly into bad code? We have lots of explanations for it. We complain that the requirements changed in ways that thwart the original design. We bemoan the schedules that were too tight to do things right. We blather about stupid managers and intolerant customers and useless marketing types and telephone sanitizers. But the fault, dear Dilbert, is not in our stars, but in ourselves. We are unprofessional.

This may be a bitter pill to swallow. How could this mess be our fault? What about the requirements? What about the schedule? What about the stupid managers and the useless marketing types? Don’t they bear some of the blame?

No. The managers and marketers look to us for the information they need to make promises and commitments; and even when they don’t look to us, we should not be shy about telling them what we think. The users look to us to validate the way the requirements will fit into the system. The project managers look to us to help work out the schedule. We are deeply complicit in the planning of the project and share a great deal of the responsibility for any failures; especially if those failures have to do with bad code!

“But wait!” you say. “If I don’t do what my manager says, I’ll be fired.” Probably not. Most managers want the truth, even when they don’t act like it. Most managers want good code, even when they are obsessing about the schedule. They may defend the schedule and requirements with passion; but that’s their job. It’s your job to defend the code with equal passion.

To drive this point home, what if you were a doctor and had a patient who demanded that you stop all the silly hand-washing in preparation for surgery because it was taking too much time?2 Clearly the patient is the boss; and yet the doctor should absolutely refuse to comply. Why? Because the doctor knows more than the patient about the risks of disease and infection. It would be unprofessional (never mind criminal) for the doctor to comply with the patient.

So too it is unprofessional for programmers to bend to the will of managers who don’t understand the risks of making messes.

The Primal Conundrum

Programmers face a conundrum of basic values. All developers with more than a few years experience know that previous messes slow them down. And yet all developers feel the pressure to make messes in order to meet deadlines. In short, they don’t take the time to go fast!

True professionals know that the second part of the conundrum is wrong. You will not make the deadline by making the mess. Indeed, the mess will slow you down instantly, and will force you to miss the deadline. The only way to make the deadline—the only way to go fast—is to keep the code as clean as possible at all times.

The Art of Clean Code?

Let’s say you believe that messy code is a significant impediment. Let’s say that you accept that the only way to go fast is to keep your code clean. Then you must ask yourself: “How do I write clean code?” It’s no good trying to write clean code if you don’t know what it means for code to be clean!

The bad news is that writing clean code is a lot like painting a picture. Most of us know when a picture is painted well or badly. But being able to recognize good art from bad does not mean that we know how to paint. So too being able to recognize clean code from dirty code does not mean that we know how to write clean code!

Writing clean code requires the disciplined use of a myriad little techniques applied through a painstakingly acquired sense of “cleanliness.” This “code-sense” is the key. Some of us are born with it. Some of us have to fight to acquire it. Not only does it let us see whether code is good or bad, but it also shows us the strategy for applying our discipline to transform bad code into clean code.

A programmer without “code-sense” can look at a messy module and recognize the mess but will have no idea what to do about it. A programmer with “code-sense” will look at a messy module and see options and variations. The “code-sense” will help that programmer choose the best variation and guide him or her to plot a sequence of behavior preserving transformations to get from here to there.

In short, a programmer who writes clean code is an artist who can take a blank screen through a series of transformations until it is an elegantly coded system.

full chapter

The realties of agency life can make it hard to code cleanly when client deadlines are set in stone and features are not. Code creep is an enemy to all of us. It will take time to get ourselves to a point where we know that we are putting the best code out there for our clients. Internally though, we can make all our lives easier by creating code that’s easy to test, understand and maintain over time.