Thursday, September 05, 2019

Building Technology for the non-developer



Here we try to understand the complexity and level-of-effort in building software, and how it relates to other technology. Software is generally a 'mystery box' to most people, so using analogies to houses, cars or boats may make it easier to understand what's involved.

Building any technology can happen in the small or in the large and there are various forms in between those 2 points. Whether it is a house, car, boat or software; there are varying forms of each 'technology' and to actually complete building each form requires different skills.

Developing something to completion requires managing complexity. Very small examples may not have a lot of complexity. They are difficult to do well; but in the context of the larger picture they are the easiest form.

What


Developing any technology has varying levels of complexity, but generally follows a pattern depending on what form it is.

  1. interior/exterior look and feel
  2. small structures
  3. medium structures
  4. large structures. 


Lets start with the easiest form. The look and feel. In buildings this is 'interior design' and in software its 'user experience design'. Getting this right takes skills, but its the easiest in terms of complexity.

Small structures. In buildings this would be a shed, dog house or tree house. In software this would be a web page.

Medium structures. In building this would be a functioning house, in software this is a functioning application.

Large structures. In building this would be a multi story building, all the way up to a skyscraper. In software this would be a system. Systems are embedded in other machines, like cars and factories, and are operating systems on computers.

How


To create small structures, you don't need too much formal understanding of the architecture, engineering or fabrication techniques used. As the complexity of the technology increases, the level of effort increased exponentially. I can build a tree house, and it will probably stick around for a while, but we couldn't build a 6 story building without some formal understanding of the architecture and engineering behind it. If you or I tried to build a large building without that understanding; the building would probably never get built, and if it did manage to stand on its own; it probably wouldn't for very long.

When


So, how long would doing this take? That entirely depends on the people involved. If you have doing some decorating in a house, or some web pages edits; its usually one person doing it. If you are building a small building or a complex application there will be many people involved; and all having different roles and responsibilities.
Skills are hard to transfer when they are specialized. So, when building a house you would have a plumber putting in pipes and connecting that system together. That person would be good at that, but how good are they going to be at interior design? And vice-versa, would you trust the pipes if they were put together by an interior designer?

Full-Stack/Master Crafts-person

Can one person do it all? It really depends on what you are making, but these people are quite rare. You can run into people that understand the basics; but the actual skills to build that technology aren't the same. 

You may have expectations that one person can do it all at the snap of a finger. That is your personal problem of having screwed up exceptions; and has nothing to do with the people actually doing the building. This happens quite a bit with home renovations. A person may watch some TV and convince themselves that a full kitchen can be done in a weekend. This isn't based in any reality; so those expectations are completely wrong. It's not the fault of the people doing the work, it's a personal problem of mis-guided expectations.

Wrap it up

To build technology takes skills, but it also requires a good mind-set and attitude. Being pragmatic and persistent in solving hard problems is the skill that creates good technology. From the outside, having realistic expectations based on evidence and understanding will allow good technology to be built. The time it takes is how long it takes; no matter how off your expectations of how long it should take are. Those expectations are rarely correct, no matter the technology being built.