Why Building Software is Just Like Building a House
If you have ever built a house you know that its not an easy process, and fixing up a house can be even more painful. There was a classic 80’s movie called the Money Pit. Tom Hanks was the owner of an old “fixer upper” and the whole movie focused on him going broke on a project that lasted forever. You could write the same movie about software development but it probably wouldn’t be that funny. Today everyone is a Home Improvement expert and the Home Depot and HGTV have made it look easy… but its not. But building, or remodeling a house is not easy and building, or remodeling software is even more difficult.
Sure, you can put up four walls and a roof and call it a house. Give me a weekend and a pile of lumber and I can probably build my girls a tree house. But building a tree house and building a multi-level, code compliant, energy efficient home with a perfect blend of form and function is not easy. If you wanted this kind of house, you wouldn’t call a handyman on Craigslist for this kind of a project. This is the kind of project that involves multiple skills and specialties.
The same thing can be said about software. Any programmer can build you a program that says “hello world.” If you want to build a highly scalable distributed web application to serve a global audience, that’s a different story. Most construction projects and software development projects are doomed before they start because of poor planning and expertise. But the problem is that most people don’t understand the expertise they need. The scope, schedule and budget of a software development effort usually dictates who you need and why. I’ve compiled a list of
The Owners – Software Sponsors and Home owners are similar but not exactly. They both want to keep their investment under control. They usually have a budget and try to manage the project within that budget. That might mean they need to make a few compromises. This is where things usually go wrong. When you build a house, you have a pretty good idea of the plan and what it will look like before the project starts. A good architect will help you manage the plans to stay within the budget. Software on the other hand evolves. It may start as a shack and end up looking like a hotel on the foundation of a shack. The old saying “begin with the end in mind” is so true in software development.
The Management – Project Manager and General Contractors are cut from the same cloth. They are planners and they typically know how to get things done. Good PMs and GCs can estimate costs on the fly. They think in terms of hours and phases and they are usually on top of every detail. Without a good PM or GC you might be in trouble. Some software projects rely on the senior most technical person to be the PM. That can work but beware of scope creep. The senior most technical person is a builder. He may be more focused on building the biggest and baddest application and budget is an afterthought.
The Planners – Information Architect, User Experience Designer, Business Analyst vs the Building Architect. Depending on the software you are building, you may need one or more disciplines to design the software. Information rich software or websites might require an information architect to help organize, summarize and deliver information. Anytime you are building software, you are creating a user experience. Depending on the complexity of the software or website, you might need someone who specializes in user experience design. If your software has complex business rules or logic, you may need more of a business analyst. Building architects are probably similar in how they are classified. Building a sky scraper is different than building a house.
The Technicians – Application Architect and The Foreman or The Structural Engineer. Application Architects and Foreman know how to get things done. They understand the technology and they need to know what everyone is doing to build the product. Good technicians don’t like mistakes or sloppy work. They can spot other good technicians and they have no patience for bad technicians. Sometimes a good Senior Developer can architect your solution and sometimes a good Architect can design your building. On the other hand, sometimes you need a hardcore engineer to make sure you build it right. I was tempted to call a building architect the same as an application architect but that’s not an exact match. Application architects are engineers first and designers second. Building architects are usually designers first and engineers second. Big buildings usually require input and advice from a structural engineer. Also, the application architect is hands on like a foreman. They want to be in the trenches. Very few architects start out as builders and then go learn architecture.
The Foundation – Database Architect and Cement Mason. Every good building needs a solid foundation and the database is the foundation for software. Whether you are using Oracle, SQL Server, or MySQL, the fundamentals are the same. Technology has changed a lot over the last 20 years, but the fundamentals of the database have not. Your new iPhones, Androids, and Tablets do all kinds of cool tricks but most of the applications are still serving data from good old fashioned databases.
The Power – Network Engineers and Electricians. The world needs power and the world needs data. The data grid and the power grid are not all that different. Bandwidth and power is always in demand most of the time there is a problem, its usually near the ends of the network. Electricians wire a house for power and then connect the main line to the circuit breaker for the power to be distributed. A network works the same way. We all connect to some sort of network device to get our packets of data. Most people take it for granted until it goes down. Then they are crippled.
The Construction – Application Developers vs Builders. This is where all the magic happens. These are the true builders. If you picture a house being built, you think of all the guys in hard hats and tool belts. Developers are exactly the same but they don’t wear hard hats. They have an arsenal of tools and they know how to use them. The better the developer, the more tools they know how to use. The best developers and the best construction workers are fast, and efficient. They measure twice and cut once. They hate bugs or mistakes and they usually don’t like to go back and fix their work. Note, builders come in all kinds of specialties and so do application developers. They usually have a set of tools but you can’t always look at the tools. Hiring a builder who knows how to handle a hammer only gets you so far. Hiring a builder who used that hammer on a tree house and on a skyscraper is that you need to understand.
The Finishing Touch – Front End Developer and Painter, Finish Carpenter, Stone or Tile Mason. This is where it gets confusing to most people. In the software development world, there are so many technologies to build the front end. Where does the front end stop and the back end begin. Depending on the technology, the front end design and the code are all in one. In other technologies like ASP.net, they design layer is separated from the programming layer. Developers call it the front end and the back end or the logic layer or the business logic layer. The same thing can be said about the visual aspects of a home. You can paint a wall, you can panel the wall and custom trim wood or you can tile the wall using stone or marble. The problem is that you don’t want a painter installing your marble unless they know what they are doing. And if you do put in the tile, in say a bathroom, make sure you know how to get the plumbing fixtures, electricity, windows put in place without messing it up.
The Artists – Visual Designers and Interior Decorator. The best designers and decorators can be spotted a mile away. When you’re building software or web applications, this can sometimes be an afterthought. Both are pretty easy to change but once your done you usually don’t want to rearrange your furniture and color schemes all the time.
The Protectors – Security Specialist, Network Administrator and Roofers, Locksmiths and Security Experts. Applications and buildings need to be secured. Some require a simple password. Some require retina scans, finger print scans and various other solutions to control access to an application or a building. Most of the time your Architect or your General contractor will design the security. They will give you a lock with two sets of keys. Sometimes you need a little more
The Connectors – Integration Developers and Utility Plumbers and Electricians. Ok this might be a stretch but in most companies you have to connect new software to existing software. The old systems don’t usually change so if you want to build something new then you typically need to figure out how to connect the new to the old. When constructing a new building, you need to hook it up to water lines, waste lines and the electrical grid. You need to build the connection to the old system and make sure your new plumbing and electrical features work with the old. If your application is stand alone or your house uses an outhouse and candles then you can skip the integration. BTW, most integrations are now called services, web services or cloud services. You might also hear terms like SOAP or REST. I won’t get into the cloud just yet. Its probably worth another post entirely.
The Quality – Quality Assurance and Building Inspectors. Even the best developers and builders make mistakes and that’s where the guy with the clipboard comes in. QA is all about breaking the building. Its about looking at all the things that can go wrong and making sure it doesn’t happen. The QA Tester and the Building inspector will run a series of tests to make sure the system or the building is “up to code”. This can take on a lot of different flavors depending on what your building but the concept is the same.
The Curb Appeal – Interactive Designer and Landscape Designer. If you ever go to a new website or you drive up to a new house, how well does it pop? There are all kinds of tools that you can use to give applications a little more flair. The same concept can be applied to landscape design. If you need to make a good first impression with your software or there is a component that needs some flash then you can use an interactive design tool like flash, silverlight, and HTML5. (Note, if you can make it pop using HTML5 then go that route. Flash and Silverlight are not supported on every platform or device. That said, there are still plenty of people working on flash and silverlight.
I use these types of analogies to explain to my customers why a developer is not just a developer. There are a lot of applications that get developed by one guy in a garage and sometimes that works. The same things can be said about a handyman building a tree fort. But… If you need to architect an application or construct a building, you better think about who you need and why. Also note that most “Developers” can play more than one role described. It all comes down to scope, schedule and budget (what are you building, when do you need it and how much do you want to spend.) I’ve seen too many clients who cut corners to build an application. In the end, it usually costs them more to either maintain or to rebuild. Don’t build a tree fort and then expect to put an 40 story addition on it in two years. Chances are, you’ll be scrapping it and starting over.