Understanding Development from a Day In the Life

November 23, 2009

Monday morning is the time when our teams interact the most about projects and the coming week.  I’ve decided to capture events typical of Monday to provide insight into our work developing products for clients.  I’ll do my best to include everything warts and all even if that means sharing something I would not normally share.  In support of full disclosure, I took sparse notes over a period of time and came back later to clean up the text and add commentary.  Here goes nothing!

Our high-tech revolution has plunged us into a state of continuous partial attention.

iBrain by Gary Small, M.D. and Gigi Vorgan

- A typical Monday starts by pulling my canoe out into the various communication streams.  Logging on to Skype is the watershed event.

- Skype is running.  Firefox is open with tabs for email, calendar, several Google docs, WordPress for this post and YouTube for a side project I am working on.

- I check in with my lead on Skype.  I have the same guy across a few of my projects.  This certainly streamlines the communication.  He’s in Costa Rica.  When I worked at Adobe, we used IM all the time as people worked on different floors and at different locations.

- I am acting as the product owner for one project and I clarify something about a feature we are implementing.

- On another project, our client provides detailed specifications and we review the documents to make sure we are in sync.  We are, which is good.

The new promise of collaboration is that with peer production we will harness human skill, ingenuity, and intelligence more efficiently and effectively than anything we have witnessed previously.

WIKINOMICS by Don Tapscott and Anthony D. Williams

- Our newest client jumps on Skype to validate the release, our testing and the schedule.  There is a lot to discuss so we move to a Skype call. He does a good job managing his business to create an active and valuable community.

- Another issue comes in about how a feature should work that requires some thought.  I ignore chats and emails for the next 30 minutes and open specifications in Google docs and mock-ups in Preview.  We clarify the issue.

- By late morning, the major communications have been completed.  Projects are moving forward and our teams seem to understand what needs to happen this week.  I am responsible for a couple of releases that are in full swing.

No matter how clever the idea or great the implementation, an invention typically lives or dies depending on how well it can be integrated into a larger social or technological context.

Juice by Evan I. Schwartz

- The marketing text for our Web site update is long overdue.  Some tasks on the docket this week are for corporate business.  But I decide to focus on that side project and YouTube.

- I started a project called ReachGivers.org to help charities and non-profits get their message out over the Internet.  ReachGivers.org uses Ruby on Rails and has Twitter integration.  I added a poor man’s blog a while back as well.  This week I want to add video support.  Side projects help me stay connected with technology.

Economics is above all a science of measurement.  It comprises an extraordinarily powerful and flexible set of tools that can reliably assess a thicket of information to determine the effect of any one factor, or even the whole effect.

Freakonomics by Steven D. Levitt and Stephen J. Dubner

- Off to Starbucks for a Mocha and a blueberry scone.  This happens so often that people know me by name there.  The Ethos water billboard reminds me I wanted to blog about that on ReachGivers.org after finishing the video work.

- My brain stumbles on some concepts for the marketing text and I jot down some ideas.

- I was working on a product a while back and was not that impressed with the end user documentation.  I sent a book proposal out to a technology book publisher, which turned into a series of titles, and I have been writing every since.  I love it, I really do.  I even enjoy working on marketing text and ads.

Execution is not a one-time event.  Nor is it a process where you check off goals as if your sixth-grade teacher were looking over your shoulder.

The Art of the Start by Guy Kawasaki.

- Shorty before noon we get a curve ball. Mid-cycle, our client needs to shift direction on a project to change the prioritization and the release date.  I’ll spend the next few days updating user stories and validating the new plan. Sometimes I feel like we’re actually better at hitting a curve ball.

- The Agile software process, which is intended for flexible development, actually advocates against this type of mid-cycle change.  Release cycles are purposely shorter so that a direction shift simply influences the next cycle.  For start-ups, next month can be years away.  We have to be more flexible.

- A site we monitor generates an alert right before I can escape for lunch.  I used to get a little rush on these mini-emergencies like working as an EMT. Now I am the ambulance driver who knows that most pick-ups are not at all like the show ER.  Still, up-time is important and so we resolve the issue as quickly as possible.

- It occurs to me that this post demonstrates why people Tweet.  Expressing myself effectively with 140 character didn’t work well for me.  I decide to try it again because I am enjoying creating this running dialog.

- We’re trying to send large Photoshop files with mock-ups.  Some days technology just seems to work against us.  We’re hitting proxy issues and time out issues.  Eventually we solve the problem and remind ourselves yet again we should standardize on an approach.  Problem is, email and Skype are so convenient and work well enough most of the time.  I guess this would be one of those warts.

Agile software development methods should be able to survive in an atmosphere of constant change and still emerge with success.

Agile Management for Software Engineering by David J. Anderson

- After 40 plus years of eating sandwiches, I still love a good sandwich.  The best sandwich in town is from the deli in Vallergus and the people at the cash register all know me by sight.

- I never get back to the post after lunch.  Clients and partners all eat at different times and issues were waiting for me when I got back.  That is definitely a typical Monday.

- I didn’t finish the marketing text either.  The text I came up with was not remarkable.  I made some small updates to our corporate site instead and also finished my changes on ReachGivers.org.  Perhaps I will think of something while winding down for the night.

- My iPhone sits by my bed.  With several releases in play, there is always a chance a developer is still working and will fire off a question.  Of course, I can’t just let the device sit there, now can I?  I pull my canoe back out into the stream and see what else I might have missed during dinner.


Integrated Outsource Partners

November 16, 2009

Open Mountain software projects succeed because of our tight integration with our primary development partner Avantica in Costa Rica.  This connection sets us apart from most other outsource providers.  After all, who can provide a local contact with significant career experience in the US and also deep experience with cost effective resources in another country?  You need two partners who spend the time and effort to remain tightly integrated.

How do you know for sure we are as integrated as we say?  Have a look at the photos below from some recent trips with us going to Costa Rica and our partner coming here.  Open Mountain and Avantica work well together because we make the effort to become familiar with each other.  We know the teams in Costa Rica and nearly everyone in the Avantica has been on one or more of our projects.

Leaders GG bridge

The leadership of our partner Avantica at the Golden Gate Bridge.

Better Leaders Napa

The Avantica team at Rubicon in Napa.

Teams Napa Improved

Open Mountain showing Avantica engineers one of the oldest wineries in Napa.

Team Costa Rica

One of our newest clients meeting with Bob and the team in Costa Rica.

Costa Rica

Where Bob and Tom stayed over the weekend in Costa Rica.

Napa

Avantica and Open Mountain enjoyed wine over lunch with this view of the vineyards.

After you look these over, you’ll have to tell us who visits the better location.  I do like my Costa Rican beaches and Imperial beer.  But how about the Golden Gate Bridge and wineries of Napa?  It’s a tough call that I am glad that I don’t have to make.

Thanks to all the travelers who donated images for this post! – Cheers.


The Funny Side of Web Development and Multiple Languages

November 9, 2009

I was adding a few features to a product the other week when I contemplated that often times the simplest change takes forever and adding major features can be a snap.  The inconsistency comes from the complexities of Web development.  To illustrate the point, I am going to borrow material from one of my favorite comedians Robin Williams.

Robin did a routine a few years back about the invention of golf by the Scottish using a conversation between the drunk Scotsman who invented golf and an interested player:

Drunk: We’re going to make a game.  We’re going to make you put a ball in a gopher hole.  It will be really fun. (hiccup, burp)

Player: Sort of like bowling?  We roll the ball into the hole?

Drunk: Heck no.  We’re going to make you hit a tiny ball with a stick.

Player:  I guess if we are not that far away from the hole-

Drunk: Heck no, we’re going to put you a couple of hundred yards away.

Player: Hopefully, you’ll at least make the thing straight so we just-

Drunk:  Heck no, we’re going to curve holes left and right.

Player: Just don’t put anything in our way.

Drunk: Heck no, we’re going to put water and trees in the way and even sand.

Player: We can try it once to see-

Drunk: Heck no, you’re gonna do it 18 times…

I think you get the point.  Different holes and sand traps certainly make the game fun, but these obstacles also make golf challenging to learn and harder to master.  Web programming feels the same way to me.  There are many reasons why it has become so complicated from humble beginnings.

Just for your edification, the essence of any Web site is a URL which looks like this http://www.openmountain.com/hello.html.  Somewhere on a server, there sits a file named hello.html.  All the other stuff on the URL before this file name helps the Web browser on your laptop locate this file on a central server and download it to your laptop for display.  I know, I know, this is so 1997.

The file hello.html contains HTML which is a simple display language.  The browser understands this language and can turn HTML code:

<html><head></head><body>

Hello <b>Robin</b>! How <i>are</i> you?

</body></html>

into this:

Hello Robin! How are you?

If only Web programming was that simple.  Here now a conversation between our fictitious Web creator Lee and our programmer Marc:

Lee: I have created the Web for you so you can put all your information and data on a central server and everyone can share it.  To display your information, you just need to create HTML files for people to download.

Marc: That’s fabulous!  I love it.  Can’t wait to start.  Can I add If statements and For loops so I can do real programming?

Lee: Good point.  OK, I will add Javascript in the file.  You can code loops and stuff using <script> tags and do display with HTML.

Marc: That works.  But wait, if all my data is on the server, do I have to download all of it all the time?  How do I get only the data user’s want?  Use Javascript on the server?

Lee:  Heck no.  We need a completely different language for that.  It will execute on the server where your shared data is.

Marc: OK, we’ll execute all the code on the server.  We don’t need HTML and Javascript anymore.

Lee: Heck no.  The output of the code on the server will be HTML and Javascript.

Marc.  So our code will output code?  Seems complicated.  Well at least the server side language can collect data and do processing all in one language.

Lee: Heck no, you have to use SQL language to extract all the data and then another language to process it and create the HTML and Javascript.

Marc: Wow, that’s a pain.  I guess so long as there is only one server side language in addition to SQL that’s not too bad.

Lee: Heck no, there’s Java or PHP or Ruby on Rails or Python or-

Marc: I get the point.  So let me get this straight.  I have to learn 4 languages 2 of which execute on the server and produce output that is comprised of the two other languages that run on the client.  Is that right?

Lee: So far so good.

Marc: I was expecting another response.

Lee: Which was?

Marc: Never mind.  OK, so now my users want more interactivity and less download times.  If I pull down all the data they want at one shot, then every time they request something else I have to go collect a bunch more stuff, right?

Lee: Heck no, but this “heck no” is one you’ll like.  You can use something called AJAX to go back to the server and just pull a little bit of information.  Users love it and it uses Javascript and the server side code you already have.

Marc: Finally!  OK, that’s cool.  So I just have Javascript, my server language and SQL and I am set.

Lee: Well…

Marc.  Don’t say it!

Lee.  Um, well, hmm, heck, um, no.  See the X in AJAX stands for XML.  Now XML is a lot like HTML so it’s not exactly a new language.

Marc: Lee, did you ever think about what would happen if I had a bug in my code?  Like a user clicks a link that does an AJAX call and it does something wonky?

Lee: That could be a problem.

Marc: Yes it could.  The bug could be in the server side code in the SQL or the server side language that is executed when I first download the page.  Or it could be in the client side code in the HTML or Javascript that is generated.  Or it could be in the server side code that gets executed when AJAX is called which also has the server language and SQL.  Or it could be in the result that comes back from the AJAX call which has HTML and Javascript and XML.

Lee: Did I show you how easy it was to create a page to say hello to Robin Williams?

In case you were wondering, the feature that inspired this post was your standard geo map integration.  Creating a map on a basic HTML page should take you no more than an hour at most.  Our product uses toolkits with the Rails framework and the nuances from using both combined caused the delay.  In the same amount of time later that week, I created user profiles with custom fields and modified the product to show the thumbnail of the user’s photo with comments.  I guess some holes you par and some holes you double bogey.

Web development truly is comprised of server side code operating on shared data and client side code running on your local computer.  The client code is primary about presentation and analysis.  Server side code manages shared resources and data.  If you think about it, optimizing languages and development processes for each scenario seems like the correct approach for creating a well-functioning solution.  The complexities of engineering are a necessary outcome of distributed systems and data.

Although, we think it is entirely possible to create a single integrated development environment that separates organically upon deployment.  You should then be able to standardize languages and processes.  We’ll add that to the list of other ideas we may never get to.  Would it be cheating if your golf club used a robotic arm with laser sighting?

You can find Robin’s original routine at the link below.  I am warning you that it is filled with tons of profanity.  This should be no surprise to Robin Williams fans.

http://www.funnyordie.com/videos/8e441c0a24/robin-williams-drunk-scotsman-invents-golf-from-dirttron


Developing on a Platform Creates a Dependency

November 2, 2009

Companies are finding real benefit from starting on a platform that provides functionality and existing customers.  More and more developers are launching products on the iPhone, facebook and SalesForce.  We definitely encourage our customers to use existing technologies and services to expedite time-to-market.

A few months back, we were proposing to build a facebook application using some other technologies as well.  In our proposals, we like to think ahead to point out issues that could arise and we stated that any changes to these technologies could impact the schedule.  At this point, the customer emailed me an interesting question.

How do we mitigate the risk if facebook or the other technologies change?

Our customer was asking a pretty good question.  If facebook changes their API or markup language, we may have to re-factor significant amounts of code.  Don’t think this could happen?  It already did.  Here’s how it impacted some developers.

At first I was tempted to say that is the nature of the beast.  If you are building a house and it starts to rain, construction will be impacted.  Materials will get wet.  You might have a major disaster if you just poured the foundation and the cement hasn’t cured.  We can’t stop the rain.

I then realized this is a profound question and that I needed to give it some thought.  We develop for start-ups all the time and a significant delay from outside influences could prove disastrous.  I started thinking through the possibilities.

First, we need to consider if companies we are depending on actually appreciate this risk.  How often does the facebook API change?  How does SalesForce improve their platform without breaking existing applications?  It’s reasonable to conclude that if Apple, facebook and SalesForce care about their business they wouldn’t adversely impact people making a living off their technology.

I did a little investigation to see how well these companies keep their developers informed of changes.  Everything I discovered was as of the writing of this post and may have changed before publishing.  I certainly welcome anyone from facebook, Apple or SalesForce to comment on this post and provide information I may have missed.

facebook clearly embraces developers as a community.  Their WIKI is comprehensive and includes a link to view the latest changes to the platform.  A proactive developer could sense changes were in the air for sure.  I was hoping to find a way to subscribe to emailed changes.  I’ll keep looking for that.

Apple’s developer site feels very polished.  They clearly focus on information presentment making it easy to find documentation.  That said, the site seemed to offer less insight into what is happening with the platform.  By way of contrast, WIKI community sites are easy to edit and therefore updated more frequently, but often contain posts that are not completely accurate or have become out of date.  A good editor solves this problem of course.

SalesForce.com is definitely going the community route.  The developer site includes documentation, news, events, updates and discussions.  An active developer can stay abreast of changes for the most part.  After looking at the site, you can see that the company is making a good effort to keep the developer community informed.

Back to the question, how can we mitigate the risks of a key technology or platform changing mid-cycle?

Here are some the techniques we recommend for staying informed and managing the risk from developing on existing technologies and platforms:

1) Subscribe to all change lists – The best way to find out if an API or technology is changing is to have the company tell you in advance.  Trust me, you don’t want to find out from users your site is broken.

2) Avoid developing functionality that has a shelf life – Some times, it is clear an API or functionality may have limited long-term viability.  Certainly privacy and security issues won’t stand over time on any site with significant usage.  Developers love to exploit a loophole or over reaching function.  Your business might be doomed if this loophole is core to your success and it gets closed.

3) Plan for scenarios in the business – The corollary to point 2 is plan for the unfortunate or unexpected.  You should certainly utilize any advantage you reasonably uncover.  Just don’t bet the farm on anything that may pose a long-term issue for the platform without a backup plan.  Spend time thinking about how your business would need to adapt.

4) Create a business that is truly platform independent – Try to see each technology used by your product as a component instead of a necessity.  facebook could be swapped out for MySpace or Twitter for example.  If you use an open source product for your shopping cart or CMS, consider having a backup choice in case you find a bug that can’t be fixed.  Ask your architect to present an alternative technology stack that changes all third-party technologies just to prove it can be done.

Experienced teams use existing platforms and technologies to enhance products, speed up development and create forward-looking solutions.  You should too!  Just don’t get caught depending on something that would hobble your business if it changed.  Have a plan to get back up if the rug is pulled out from underneath you.


Success And Failure Contribute To The Experience It Takes To Succeed

October 23, 2009

Experience matters when it comes to advisers, vendors and employees.  A recent post by Eric Ries on gigaom.com challenged the conventional wisdom that people who worked at previously successful start-ups hands down have the solid experience you need in your employees and advisers. If you had a good run at a Google or an Amazon or an eBay you are without a doubt the person a start-up should bring on board. The problem is that founders and companies get so caught up in the name that they don’t look behind the curtain.  How do you choose between employee 100 at eBay versus someone who did time at HP and Apple but the one start-up they worked at hit the deadpool after two years?

We can’t discount the impact of having big name success in your company pedigree.  We see it all the time at Open Mountain as we work with start-ups and investors.  We had one prospect use the pedigree of advisers to a consultant he briefly hired in his pitch.  Sort of like his company hired the guy who dates the sister of the guy who walks Steve Job’s dog if you know what I mean.  Another case the person with the pedigree had joined one of the Internet giants after the battle had been won and during the time the business plateaued.   In both cases, we observed first hand that the viewing audience accepted the pedigree on face value.

Remember Webvan?  Webvan was one of the high flying companies of the first Internet boom that spent obscene billions on grocery delivery infrastructure only to go belly up at first sign of trouble.  Who would ever hire a person with that on their resume?  If you were to hire that person, the first thing he or she would tell you is don’t over build and make sure you have ways to reduce  costs during economic down turn.  That seems like really valuable advice to me.  If you hired someone who had been at Amazon, he or she might tell you to build like crazy and run up huge debt because it’s a land grab and we’re playing for keeps.  This is exactly what Amazon did and it certainly worked for them.  Which approach would be better for a start-up in today’s market?

Let’s dispel a few myths of our own.  With the exception of the leadership at the top, the job done by most people at say etoys, Webvan or uBid was not much different than the same people at eBay, Yahoo or Amazon.   There were plenty of good people at the first three companies just as surely as there were bad people at the success stories.  We tend to assume that everyone who worked at a runaway success was a home run hitter.  Yet we all know many great lessons are learned by failure.  Your experts need to know how to succeed for sure, but they also need to know how to avoid failure.

Here are 3 tips on how to get the best people and avoid the glossy eyed acceptance from talking to someone who worked at a runaway success story:

1) Don’t hire anyone who doesn’t have at least one significant failure they are willing to talk about.  The failure means they have learned.  The “talk about” part means they are being as honest as reasonably possible in the vetting process.  Here’s an interview tip.  After hearing about the failure, ask them for the name of someone else who also went through the failure with them that they still like. Then ask the candidate to describe their impressions of the themselves from perspective of the other person.  In an excellent interviewing class I had a while back, the teacher explained that the possibility you may actually know or contact the third person increases the chance your candidate will give you an honest answer.

2) Go rent season 4 of the TV show House.  In season 4, House is forced to build a a new team.  The process is entertaining but also valuable if you are interested in characteristics of a great team.  You should probably watch some of the earlier seasons so you understand the show.  House understands that to build the best team, you have to hire people who compliment your skills, who are not afraid of failure and who are willing to look for the best solution no matter the cost or process.  Most importantly, don’t just hire people who think like you if you want to benefit from the unique experiences of individuals with different points of view.

3) Hire people with great pedigrees in their past too!  Yes, I know the focus of this post was about how not to let pedigree cloud your thinking.  Simply put, experience matters and working with people who have done great work and achieved great success makes a difference.  My point is that you need to look beneath the surface and make sure the experience is real.  That is also the point of Eric Ries in his post.  He provides all the ways people with pedigree experience may not have earned that experience or learned from that experience.  I would suggest you review the post before the interview and do your best to determine if the person in front of you fits one of his profiles.

Any day of the week, I’ll take the person with substantial experience that includes brand names and failures over the person with only one great success story in their past.  I like to see some start-up experience, but I like that most when it is balanced with large company experience too.  After all, I’m not saving people’s lives like my good friend Dr. House, but I do want to have a team that can save a company in need and to do that they must know what to do when things don’t go as planned.


Virtual Corporations are Accepted Practice in the New Economy

September 8, 2009

We were meeting with a new client this week discussing how we cost effectively deliver products and technology.  Low overhead is a key part of our strategy along with near-shore resources for development.  We’re a virtual corporation and that means our work force is distributed.  Office space is limited, and we use other strategies to achieve collaboration and a sense of company.  We explain our strategy in our post on being a green company.

We did not take any initial investment to start the company and that mandates we watch our expenses fastidiously.  In an upcoming post reviewing our predictions for 2009, we think our prediction about back-to-basics business principals has proven true in the new economy. Young companies that thrive in 2009 are often profit drive and bottom line focused.  Open Mountain is no different.

That said, there is a risk staying virtual.  Will customers be more impressed if they walk into a well decorated office with large conference rooms and amazing views of the San Francisco bay?  Or will they understand if we meet using rented conference room space that is nice but not part of our headquarters?  Does this really matter?

The good news is more and more of our customers understand the virtual concept.  Customers are in fact virtual themselves including the new customer we met with and many of our existing customers.  We no longer have to explain that working remote and having a work-space only head quarters does not hinder our ability to deliver.

A virtual company structure is becoming a sign of forward thinking and smart money management.  Companies grow more cost effectively and avoid the risk of expensive leases or even worse having to move.  This approach beckons back to the original Silicon Valley garage start-up and the lore that turned the garage of Bill Hewlett and Dave Packard into a historic land mark.   Spend your money where it matters and preserve your cash until you have money coming in.  As developers, we like working for smart companies as that increases the chance the fruits of our labor will live beyond the challenging launch phase.

I’ve spoken enough in the past about remove collaboration strategies like this post.  I thought I would add some other ideas to help create a sense of company for people who primarily work together yet separate.

Meet periodically face-to-face

We try to meet once a week in a common location.  When we do, we often include lunch, dinner or social activities.  If our near-shore developers come to town, we do our project work in-person as much as possible even if it is not necessary.

Become friends on facebook

Sharing photos, links and comments on facebook is like putting a picture or comic outside your cubicle and having people stop by.  My business partner posts his runs and other actives online and in my mind I hear him telling me I need to exercise.  Sharing life experiences contributes to the sense of company and community.

Use video conferencing

I’ve talked about the benefits of using video in collaboration often enough.  Next time you have a remote Skype session, fire up that Web cam that probably came free with your laptop.

Send weekly status reports

A great way to keep everyone connected is to send and read status reports from everyone in the company.  Reading status reports takes the place of weekly or monthly company meetings and creates a more effective way for employees to feel part of a larger whole.

As you start your company or plan your growth, we highly recommend you consider a virtual strategy.  The cost benefit is significant.  Online tools, status reports and other techniques help you ensure your work force is connected and engaged even if you can not see for yourself.  Interestingly, we are seeing the same evolution with online computing resources.  Companies are saving the cost of building expensive hosting infrastructure by deploying applications on virtual resources in the cloud.  While you are at it, how about considering a virtual development team too!


Understanding Engineering Management Through Shipping Metaphors

May 31, 2009

We completed our first release with our new client ExpertCEO and were pleased to read the blog post of CEO Ken Ross about the update and the role our team played.   Open Mountain experts work as engineering management to oversee development and guide near shore teams to successful releases.  Ironically, we sometimes find ourselves explaining engineering management to companies even when their own experiences tell them software teams need leadership.  I’ve joked that you don’t know what engineering management is, but you know it when you have a good one.

Ken described our leadership as “oversight services to ensure that all of the technical, architectural and operational aspects are synchronized.”  Mario Chaves, CEO of our development partner Avantica, described Open Mountain another way, “[Open Mountain] experts improve communication, refine requirements and ensure all parties work seamlessly as one integrated team.”  These explanations certainly help to clarify our duties.  Perhaps a metaphor might help explain things better?

Developing software is like shipping cargo

Developing software is like loading a ship with cargo and navigating calm or rough seas to get to a final destination on time.  The captain puts together his best crew hopefully using seamen he has worked with before.   The navigator is the architect planning the journey.  The helmsman is the lead engineer and has the best sense for how the ship is handling.  The crew maintains the engines, cargo and supplies.  The captain, of course, is in charge of the ship and crew.  Let me provide some examples of how this metaphor is useful.

I took over a project in trouble at a previous job and described the project like this.  The ship was on a trip from Hawaii to San Francisco and right now they’re half way to Alaska.  We need to make a hard right turn and we may lose some of the cargo and crew overboard to get there on time.  This translates to making some decisions to change the direction of the project and that may include changing the team and cutting features.

Prioritizing features is like loading cargo.  We need to be in San Francisco within 3 months and you still have cargo on the loading dock.  You need to make some decisions fast and get this ship going or we’ll have no chance to arrive on time.  Load the ship too full and the ship will travel slowly.  Let’s quickly decide what needs to be loaded and shove off.

Agile development is like using a small, fast ship.  The client need not decide all the cargo he wants right away because the ship will be back in a month to pick up the next load.  It’s easier to select some items to load on a ship returning soon than trying to decide the only cargo you can bring in one shot.  As you can see, shipping works quite well.

Engineering management is like being the captain on the ship

The job of engineering management is to act as the captain of the ship.  The captain’s first job is to get the ship underway.  He helps the client decide what cargo to bring while selecting the crew and loading supplies.  The captain reviews the plan with his navigator and helmsmen, and manages the team to get the ship to sea as quickly and efficiently as possible.

If your development leader is pushing you to decide what is in a release, that’s because he knows the decisions you make start the journey.  He still needs to navigate the boat out of the harbor and across the ocean.

A good captain watches the early part of the journey intensely to verify his decisions.  He makes sure everyone knows their job, that the course is clear and the weather is known.  Making major course corrections in the middle of the ocean is definitely more difficult.  He makes sure the cargo is tied down and the supplies are sufficient just to be sure.

The role of the crew is clear to the client.  The navigator did the navigation, the helmsmen steered, and so on.  But if you refer to my earlier comment about engineering management, the captain was in charge but the client can’t say for sure what he did unless he was on the ship or talks to the crew.

Most captains I know are fine with this.  If the cargo arrives on time, the client is happy.  A well managed crew walks off the ship content.  If a captain made good decisions early on and tracked progress with an experienced eye, then the job was well done and the cargo is on its way to the final destination.

Had enough of this metaphor yet?  How about one more time?

Weather is unpredictable

Like it or not, projects get in trouble despite the best laid plans.  You’ll find out the hard way if you have a good captain when this storm hits.  An ocean storm can loosen your cargo or create a leak in your hull.  At that moment, the captain is the only crew member not assigned to a specific task and this probably is not his first storm.

A good captain will know that the leak is the most serious.  He’ll make sure that the navigator and helmsmen have their marching orders and put his best men on the leak.  The rest of the crew will be assigned to battening down the cargo and doing other less critical tasks.

By having the knowledge and leadership from experience, and the freedom to asses and assign, the captain is in perfect position to restore order and get the ship under control until the storm clears.  Most captains will simply confirm for the client they hit the storm and apologize for the damaged cargo.  He might ask for an extra long furlough for the guys.  And that’s really how you know you have a good captain!

So you see, a good engineering manager will do his best to create a project that runs on schedule and without hitches.  He’ll work with the team to define the work and make sure the engineers understand what needs to happen.  Throughout development, the manager tracks the progress of the team validating his decisions just like the caption of a ship checking in with his navigator and crew.  If things go awry, the engineering manager is the one team member with the experience, bandwidth and responsibility to get the project under control and manage it through to completion.

Three rules for selecting a good captain

Here are a few guidelines for helping you assess if you have an experienced and reliable engineering manager:

1) Has he been to many destinations encountering different weather patterns and obstacles along the way?  Is he an experienced manager and can he describe projects that were challenging to manage to completion?

2) Does he know how to build a good crew and does he bond with them and treat them well?  What does the team say about him?  Do they respect his experience and leadership?

3) Is he familiar with the most common and reliable boats used for shipping?  Is he familiar with the latest technologies?

These guidelines should help you select the best engineering manager for your project.  If you can’t find a sea worthy captain, a good leader will work provided you pair him with an experienced navigator and helmsmen.

Whatever you do, don’t head out to see without a captain.  If the ship hits rough waters, someone is going to have to step away from the job they are doing to get the crew under control and he may not have the experience to get the ship to port with cargo and crew intact.

Here’s to calm waters and white sandy beaches!

DSCN0636


Apple Likely To Overtake Microsoft

April 18, 2009

I am convinced it is just a matter of time before Apple will over take Windows as the dominant operating system on personal computers.  Let’s look at the facts:

- I am doing my taxes on my Mac this year for the first time.  I have years and years of Windows Turbo Tax data files from at least 3 generations of computers.  Having the history helps me get through the experience each year.  Installing Turbo Tax this year, however, has rendered my Windows system useless.  I can only boot safe mode to access my files.  Big thanks to Intuit for giving me the Mac version to complete my taxes.

- We have a family laptop that is stuck with Windows Vista.  The machine is slow and cumbersome.  We constantly lose the wireless connection and are forced to re-boot often to get Blackberry active sync working.  My iPhone works with my iTunes as if they were developed by the same company.

- We use Google docs and other online tools at work for 80% of our document creation.  Graphics work is most of the remaining 20%.  We do this work offline but guess what, Photoshop, Fireworks, and the lot, run equally on Mac and Windows.

- My Windows machine was turned off for a week.  A whole week!  This is a big one.  I use a computer more than anyone I know for many things such as contributing to community sites, writing this blog, and developing software.  A week for me is like a year for everyone else.  Monday morning the other week I turned on my Mac and started working.  By Friday, we were both looking forward to the weekend while my Windows desktop was cold to the touch.  I still can’t believe I never had cause to turn it on.

- My office TV is Windows Media server using the second monitor as the display, but I rarely use it anymore.  All my favorite shows play episodes on the Web after the initial TV run.  NetFlix offers movies online.  I don’t even have to DV-R Heroes.  YouTube and FunnyOrDie are great distractions if I want something new.

- I am totally addicted to Spaces on my Mac.  I have multiple work spaces running all the time that I flip through so quickly people watching me get motion sickness.  There is no chance of getting motion sickness with Windows.

Let me summarize.

The Mac OS is easier to use and more reliable than the Windows.  It’s fast and fun.  The applications I depend on are no longer OS specific.  Rich content is readily available online.  The files I created on Windows over the last 10 years are in my Mac documents folder.  I really don’t need the Window machine much for anything anymore.

All the strangleholds and monopolistic software plays that made Windows what is it today are gone.  For example, MS Office was once required at work.  Now, if it doesn’t come with the machine, people don’t need to buy this expensive software.  I am struggling to find just one example of something I must have Windows for.  The fact is I am several hours into my Monday as of now and I still have not started Windows (to be honest, that’s because the first thing I know I have to do is fix the problem I am ignoring).

Windows continues to go head-to-head with Mac and people are taking a good hard look at the merits of each.  Most of the people I know are going Mac.  The transition happened over the last 5 years to the point where I don’t know anyone raving about the Windows laptop they just bought.  Did I mention I am doing my taxes on my Mac for the first time this year?


Facebook Should Use Feedback Loops During Development

March 23, 2009

Many facebook users are unhappy with the new interface that launched recently.  A poll of facebook users showed 94% of users do not like the changes.   Just search for “facebook interface” on the site and you will see what people are talking about.   Finally, we can all see the benefit of online software with the possibility of immediate feedback!

How do you end up making changes to a site that so many of your users don’t like?  This question is hard to answer without more insight into the organization.  One way to reduce the chance of producing unwanted changes is to create healthy feedback loops during development.  Users love to give feedback if you provide the opportunity as we can see through the numerous responses to the new interface.

How to gather feedback

Here are some ways developers can gather feedback on their ideas and proposed changes.  I must say up front that I am not connected to facebook and have no idea if any of these processes were used:

Do usability testing – Usability testing is simple and effective.  Put your new site in a protected location online that users with permission can see.  Ask your approved users to do a series of actions on the new site.  Most importantly, ask them to speak their reactions out loud even if the reaction is negative.   You will hear and see first hand what changes you are making are good and what changes are perhaps not so good.  Here’s an online service to do usability testing that some of our clients have used.

Use focus groups – Find users who live within driving distance of corporate HQ, bring them in for pizza and project the new interface on the wall.  Start asking questions.  Take a lot of notes.  Repeat.  There is actually a methodology around focus groups, but an unstructured approach can also be very effective.

Prototype – Long before you code anything, create simple graphic mockups and email them to prominent users, bloggers (provided they are willing to hold their posts until launch), family members and employees.  Ask participants to email you their reactions along with any suggestions they might have.

Have a REAL beta! – Create a group of a thousand or so users who are willing to actively participate in a beta.  By “real” beta, I don’t mean putting out incomplete software for all users to play around on (gmail, your beta period is over!).  Let your beta users directly access the new site for a few weeks so they can get a feel for the workflows and functionality.  Provide a simple form for them to email you feedback.  Make sure you find users willing to try new features who will make the effort to email their comments to the team.

After reading about these various processes for gathering feedback, do you think that the developers at facebook might have been able to determine that users might have issues with the new interface?

If you want to avoid making similar mistakes, make sure that gathering and responding to feedback is an integral part of your development process.  Leave time in the schedule to make product changes.  One of the top reasons feedback loops fail is development teams don’t have time to address highlighted issues.

Let’s talk brass tacks

One of the top complaints about the new interface is that users are confused and often have to hunt around to find areas that should be easier to locate.  Some basic user interface elements might improve usability and decrease this confusion.  I have listed a few ideas below.  After all,  what good is pointing out issues if you are not going to offer solutions:

- Provide a consistent site wide bread crumb trail to help users see exactly where they are.   For example, how about showing something like Home > Photos > Albums > Napa Fall 2008 > Photo 2 of 18  on the page?  With a bread crumb trial , users can see exactly where they are and how to navigate back.  Some areas on facebook have a bread crumb trail and some don’t.  To be effective, this needs to be consistent and present everywhere.

- Provide site wide navigation that is always available.  Would it be so bad to have a menu bar or left side navigation or some other common control to access the entire site?

- Use labels and hints to help users understand what they are looking at.  For example, take the word “Highlights” on the home page.  How about a little helper text like popular updates from friends or something like that?  Labels with hints set the context for users and help reduce confusion.  I suggest reading Don’t Make Me Think by Steve Krug.  I had my own don’t make me think moment a few months back.

A real example – Events

Let me provide an example of what I am talking about using the Events feature.

I see more and more people putting birthdays into facebook.  Current birthdays shows up in the upper right corner of the home page.  I’ve never used the Events feature before and had thought these were just notifications.

On the current site, you have to click twice in that corner to get to Events.  That seems to be the only way to get there as Events don’t seem to belong anywhere.  I don’t see them in the menus or as links in other places.  These next changes would help users navigate Events, which would hopefully increase site usage as well as improve user satisfaction:

1) Put the label Events on the home page above the daily events.  This tells me this is an actual area of the product.  Heck, go crazy, even put small hint text like where you see birthdays or create your own events.

2) Provide general navigation to get to the Events area.  If you put them under your Profile, which may or may not be the best place, then have a sub-navigation under Profiles that lists Events and the other sub-areas that are part of Profiles.   This needs to always be available to users through the primary navigation I suggest above.

3) Show Home > Profile > Events when users go to the main Events page.

These changes reinforce Events is a feature and that it is located under Profiles.  Overall, users won’t feel as lost when they come to understand the layout of the site.

With a little bit of development process to support integrated user feedback, developers can determine the changes users want to see, which should in turn lead to a happier and more productive user base.


Collaboration Tips for Near Shore Development

March 11, 2009

Near shore development has a major advantage over outsourcing to locations around the globe for US companies.  The advantage is that all parties work in relatively the same time zone.  Teams collaborate more frequently because everyone works the same hours as opposed to being hindered by 24 hour communication delays.

GlobeLet me illustrate the point more clearly with a simple picture.  Look at the globe to your left.  You see North America where  Open Mountain is located and you see Latin America where our near shore partner Avantica is located in Costa Rica.  Now let me ask you, what countries are NOT visible? When it comes to real-time collaboration, countries that see the sun at the same time are at work at the same time, which means that issues can be discussed when they need to be and without delay.

In my posts about my experiences working with Avantica, I talk about collaboration a lot, but I don’t really define where it helps.  Nor do I provide any guidance on what we do based on years of near shore development experience.  Here are a few areas where we collaborate along with tips for enhancing the experience:

Product definition

The first step in the software process is to define what we’re building.  Product owners define requirements.  Interface designers provide graphics and work flows.  Everyone works together on user stories and functional specifications.  Our experience is that it helps to push the various parties to think through as much of the details as possible before we  start coding.  This ensures the engineers are working on valuable functionality and reduces the risk of re-work or of missing important aspects of a feature.

We find the best way to collaboratively manage product definition is through online document tools such as Google docs or Zoho.  Everyone references the same user stories, which is important for keeping everyone aligned.  The team avoids issues that come from developers reading an earlier version of a specification they saved on their desktop.  When we review documents in meetings, we see changes being made real-time and that validates we all have the same understanding of the decisions.

Tip: Use Google sites or some other online Wiki tool to collect information in addition to online document tools.  Some documents will come from designers using desktop tools like PhotoShop and FireWorks.  You will need a central location to store all your product documentation and an online Wiki serves as a functional central repository.  For the documents that are created online, you can embed a link to those in the Wiki.

Tip: If you are the project manager or SCRUM master, you should periodically save important information locally.  Online documents are easily changed by others and not all providers support tracking changes.

Project Management

Managers must know what each team member is working on and how long that work is taking to see how well the team is tracking to schedule or the burn down.  Tracking is harder to do when everyone is not working in the same building.  Project management software such as Rally Software or Version One enable teams to collaboratively track progress in a central location that everyone sees.  These tools support Agile processes well and enable all team members to contribute status updates in an organized fashion.  Basecamp and Zoho offer good general tools for project management as well.  Our teams find that making updates part of the process keeps everyone well informed  and allows management to see what areas need attention.

Tip: Track bugs in the same tool you use to manage projects.  In the beginning of a development cycle, features drive the work.  But at the end of a cycle, it’s all about bug management.  Using the same tool for both gives you oversight for the entire life of the project and also encourages developers to communicate bugs during development using a familiar process.

Team SCRUM

Our development teams tend to meet 3 times a week.  True Agile development zealots will tell you that you should meet every day if only for 15 minutes.  Either way, nothing beats regular discussion for managing a project.  Near shore makes this more possible. Far shore teams tend to limit meetings to once a week, which then turns the meeting into a status report, or they meet more regularly by extending the working day for the US team members.  We recommend meeting with Skype at least 3 times a week to allow the team to ask questions and reveal what they are working on.  In fact, if you achieve this, you will find all your other collaborative efforts are enhanced and supported by these regular discussions.

Tip: Use a low cost screen sharing product such as Acrobat ConnectNow or GoToMeeting to encourage code walk-throughs and interface reviews.  Start the Web conference each meeting so that if an engineer has an inkling to share, he can do it right then and there.  Imagine that, working with an outsource team and yet still talking to the engineers on a regular basis and still having the opportunity to review code.

Leads Meetings

Discussions with the team lead remind me of those back room discussions from political arenas.  You know, the meetings where all the real decisions are made.  That’s not really the case with software development, but often critical issues can be effectively resolved with a quick meeting of the key minds.  Some managers set up a regular time each week for this.  If that works for you, great.  We save leads discussions for escalation.  Leaving them off the schedule means they happen only when they need to and that makes sense since issues should in general be discussed openly with the entire team.

Tip: Use video with lead discussions to enhance communication.  Facial expressions and visual cues are extremely helpful when reviewing difficult issues.  Plus, when your lead delivers a snarky response, it helps to see if he is genuinely not happy or just yanking your chain.  Believe me, both happen although some leads aren’t as funny as they think they are (sorry guys).  Skype with video on a MacBook is awesome for this.   There is no setup and starting the video is as simple as clicking an icon.  Below is a chat from just this morning where we reviewed a few last minute changes to our release.

Video tip: When you speak, look at the green dot on your computer and not at the video of your lead.  This is like looking at the camera, and not the monitor, when you are on TV.

collab

Thanks Christian (guy in the larger image) for letting me (guy in the baseball cap) post your picture!