30. January 2013 02:44
by Troy
1 Comments

Office Space vs. The Programmer

30. January 2013 02:44 by Troy | 1 Comments

The office is a place to get work done.  Why then, do so many complain they can't get any actual work done while "at work"?  This problem is common among most office bound employees, but I'm most interested in how it affects my field, The Programmer.  Specifically, how does the office space support or hinder the programmers' productivity?

There is no shortage of innovative office spaces out there, each with it's own advantages and disadvantages.  Everything from windowless plain white boxes to funky open concept, natural material spaces that invite the outdoors in and spur the imagination to wander.  When it comes to office space, some characteristics come to mind:

  • comfortable
  • no distractions
  • distractions
  • controlled dimmable light
  • natural light
  • quiet
  • moderate noise, hustle and bustle
  • no interruption
  • interruption and collaboration is great

I believe that all of those are important.  Of course the ones in bold represent the exact opposite of the others, with the exception of being "comfortable".  The reason for this is because my ideal office space depends on what I'm doing.  Programmers are most productive when they can get into "The Zone" where nothing else exists in their mind except what they are working on.  All of the items in bold support the ability to get into "The Zone", while the others usually serve to disrupt or prevent getting into and staying in The Zone.

Comfortable is the easiest item to deal with because it is constant, the need for it doesn't change with the type of work you are doing at that moment.  People always want to be comfortable.  Not being comfortable is a distraction so you want to get this right.  Office temperature and good equipment (desks, chairs and computer hardware) serve the employee and allow productivity.  A worker who is in pain from shoulder fatigue or shivering under a blanket will not do their best work.

The Zone is important for productivity.  Being knocked out of The Zone is costly for the business, because studies show that once a developer drops out of The Zone, it can take at least 10-15 minutes before they can become productive again and get back to where they were at the time of interruption.

Getting back to our office space, lets consider some of our options:

Office TypePromotesGood For The ZoneGood For Collaboration
Open Concept distractions, natural light, moderate noise, collaboration, hustle and bustle No Yes
Cubicles reduced distractions, natural light, moderate noise, reduced hustle and bustle A bit better It Depends
Individual Offices no distractions, controllable light, quiet, no interruption Yes No

So, it looks like we can maximize collaboration or The Zone, but we can't have an office space that is best for both.  Personally, I'm not really a fan of cubicles.  I'm not sure that their cost is worth the little bit of privacy and reduction of visual distraction that they provide.

What is the perfect developer office space?  An article posted on TechCrunch talked about Facebook's Mark Zuckerberg hiring famous architect Frank Gehry to design the ultimate space for employees to get their geek on.  Zuckerberg says: 

The idea is to make the perfect engineering space: one giant room that fits thousands of people, all close enough to collaborate together.

Ok, the largest open floor plan in the world sounds cool, and is something I wouldn't mind seeing, but I don't think my concentration level would ever approach The Zone in a room with thousands of people.  Of course, this level of extreme is beyond the scope of most corporations anyway, but the general idea is the same.  How can the business maximize employees and minimize the floor space needed?  Clearly the Open Concept floor plan wins if that is your primary objective.  Also gaining popularity is Agile Software Development which emphasizes collaboration with an open concept work area called a "bullpen".  It seems that the cards are stacked in favour of the Open Concept design.

Now, Zuckerberg is not oblivious to The Zone.  He also said:

It will be the largest open floor plan in the world, but it will also have plenty of private, quiet spaces as well.

If your devs are not chained to their desks because they use laptops and your building has enough space to create shared, private spaces that workers can move to when they want to find The Zone, that may be one option.  If workstations include multiple monitors, then the private spaces should be likewise equipped for this to be a viable option.  Even then, this solution may not be perfect, as the dev may lose access to visual cues they use when at their desk, like post-it notes, whiteboards, corkboards, etc.

This brings me to the first iteration of what my ideal office space might look like.  This assumes the use of Agile Software Development, which arranges its people in cross-functional teams of around 6 or 8 people.

The image above shows a mock-up floor plan that I think would work well for the following reasons: 

  • one team per office/room is cheaper than separate offices for each
  • collaboration is encouraged by placing team members together, with a center table they can roll up to
  • The Zone is supported by short dividers between desks to reduce visual distractions
  • keeping dividers short, collaboration is supported by allowing teammates to simply lean back in their chair to see each other
  • Agile is supported by whiteboards and/or scrum boards for the team along the bottom wall
  • The Zone is supported by a room with a door to reduce non-team related distractions
  • separating teams in different rooms allows each team to find their own rhythm, without disrupting the other, so one could be in The Zone while the other openly discusses a new feature
  • cross-team collaboration can be facilitated with meetings, or ad-hoc discussions around common areas like the lunch room or a games room
  • A company policy of don't knock, don't come in could support team-wide entry into The Zone for scheduled periods of time
  • An open door would invite collaboration with other teams at other times during the day

Now, some people will obviously wonder why headphones are not mentioned as a possible solution to some of these challenges.  For some developers, headphones work well.  For others, not so much.  I personally don't want to destroy my hearing with excessive volume because I am trying to drown out the others in my area.  Plus, headphones do nothing for visual distractions.

I think there are advantages and trade-offs to every office layout but this one provides a decent balance of the two extremes.  Programmers benefit from an environment that allows them to get into The Zone to get the work done, but a collaborative environment is essential for deciding what work to do.

 

17. January 2013 21:54
by Troy
0 Comments

Website (Re)Design - What is Important Today?

17. January 2013 21:54 by Troy | 0 Comments

Mobile devices.  More on that later.

I decided that it was time to update my website with a new design.  The previous one had been around since 2002.  Since then, the site had seen some content updates and a few technology updates, but nothing major.  Nothing architectural.  Nothing visual.

I began the process of redesign by doing some research and identifying some requirements.  I also identified some specific technologies that I wanted to use, mostly out of interest, since this simple site could be completed successfully in many ways.

The requirements:

  • Mobile device compatible
  • Responsive UI design (related to mobile device compatibility)
  • new look and feel - new design, something different
  • adopt HTML5 and CSS3
  • adopt MVC (Model-View-Controller) with extension-less URLs (like /Resume instead of /Resume.aspx)
  • support proper redirection of URLs that changed because of above, so that old links to my site would not return a 404 Not Found
  • support for canonical URLs
  • custom 404 Not Found page
  • update blog to use latest version of BlogEngine.NET
  • provide a printer friendly version of my online resume

If you are redesigning an existing site or application, the size and scope of the work has to be analyzed to determine the best implementation strategy.  In my case, the site was small enough and simple enough that a complete re-write was the logical choice.  For larger projects, a phased approach might make more sense and would probably deliver business value sooner than attempting a complete re-write from scratch.

I started with site architecture research.  I wanted an HTML5 site that used CSS3 and supported mobile devices.  Mobile device support is important.  It is no secret that mobile device adoption is soaring.  The typical options for mobile support currently include building:

  • a native application (an application designed specifically for each device type such as iPhone, android, BlackBerry, Windows Phone, etc.)
  • a website with a Responsive UI design that works well with mobile devices or a site designed specifically for mobile
  • a hybrid - a site built mostly with HTML5 and javascript that is then wrapped inside a native application using a tool like PhoneGap to create the wrapper

My simple site did not warrant a native application, nor a hybrid solution.  I did not want to create a separate site or design to support mobile devices, so I opted for a Responsive UI design that "adjusts" itself as the screen size changes, to provide an optimized view of the site content at different resolutions.  To implement this, I reviewed HTML5Boilerplate and Twitter Bootstrap, eventually choosing the latter.  Both are very good based on my testing so far and are an excellent way to get started with a responsive layout using HTML5 and CSS3.  Bootstrap includes Glyphicons which are cool, but I switched to FontAwesome, which uses a custom font instead of images.  Using a font is cool because changing the icon size and color is as simple as changing font size and color using standard CSS.  No photoshop required to get a blue version of a white icon.

I am not a web designer, my strength lies more with software architecture, so the new look and feel was developed with help from some Bootstrap themes and my desire to move towards a clean, simple site that focused on functionality and readability. In some respects, moving toward a Microsoft Modern UI (formerly Metro) style look, but without going all the way there.

I implemented the site with ASP.NET MVC3. I used a Legacy Route Handler to accomplish the redirection of old links to the new extension-less URLs in a way that provides a proper 301 Moved Permanently response to help search engines update their indexes.

Support for canonical URLs was implemented using the IIS7 URL Rewrite 2.0 extension.  It allows the definition of simple rules to manipulate URLs.  In my case, it was used so that multiple domains (like troyfarrell.ca) get redirected to my primary .com domain.  This is also important for search engines, to avoid duplicate indexing of the same content.

So that sums up what was important to me, when considering a site redesign this time around.  What do you think?  What did I forget?