CrossPixelNation
CrossPixelNation NYC

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.

AE Area

In response to Mary’s blog post on what the AEs should do in terms of decorating their area, I decided to do some searching of my own.  I found this website with an article of some ideas-some lame and some pretty cool (http://www.isnare.com/?aid=69030&ca=Business+Management).  What I liked best was the idea about putting up a mural.  Check out the link: http://www.muralsyourway.com/.  There are lots of cool ones to choose from.  If Amber were to choose the above would be hers. 

 

 

Commitment Phobic Wall Decor

There’s been an ongoing discussion in the AE area about how to decorate this part of the office in a fun, visually pleasing way. Some ideas have involved plants, big patio umbrellas, white lights, and a disco ball to go with Mitchell and Charles’ music. Okay, so maybe not the disco ball but all others were thrown out there.

Clearly, we haven’t come up with anything that’s stuck — hence the reason for the decor-free area.

Amber showed me this site yesterday that I totally dig! She used this type of decor in Nate’s room and said that it’s really great. Mo’s been asking for different types of ideas and feedback on what we’d like in our little home away from home. What do you guys think about this type of wall art as an option for our space?