Software IS Design: Part 1

Corinthians I 13:11:

“When I was a child, I talked like a child, I thought like a child, I reasoned like a child. When I became a man, I put childish ways behind me.”

But I have still got so much to learn.

I don’t remember what kind of activity I originally thought programming was, maybe I hadn’t formed an idea. Engineering I think, certainly I did some software engineering at University. I still remember my lecturer, he said if ain’t tested it doesn’t work, and strive for low coupling and high cohesion. That’s about it. Good advice though.

Sometime in my C++ days I learnt from Steve McConnell that software development was definitely a construction process and I learnt a great many other things as well. He also thought low coupling and high cohesion were important and that the most important part of producing software was, well, producing the software, the programming, since it was the only piece guaranteed to be done and probably the only accurate description of the software anyway.

I held this view of building up software from its component pieces for a long time.

The problem with software viewed as construction (still an engineering task really), is it should be more predictable than it is.

It normally takes longer and cost more than we thought, unlike houses.

We can’t even work out how long it will take, unlike bridges.

We don’t actually know in real detail what we will actually get, how it will work and how fast it will run, unlike PCs.

And programmers are difficult to manage, they can’t just be replaced with an equally skilled alternative. When things get behind, adding more just seems to make things worse. Not like construction workers at all.

Then after quite a while, I came across software development as a purely design process:

Architectural design is design.

Functional or detailed design is design.

Even Test and Debugging is design.

But most importantly Coding is design.

What!

Of course it’s not, we work out all the details in the specification and then get a coder to translate it into code for us. We only need to test it, to fix the mistakes coders make.

Well, no, not quite, not by a long way. We do have a translation process and a build process, in fact we call it a build, it takes a few minutes or perhaps longer and its performed completely automatically by the compiler and linker or ‘ant’ or ‘make’ or the IDE or something like that.

The build process takes an exact set of plans, the source code, and constructs all the pieces into a finished product. As if it was a television or a house, but faster and so cheaply it might as well be free.

I shall not try to convince you that programming is software design directly for now, but show you some of the consequences of thinking of programming as design.

Design Construction Design is open ended with only a poorly defined delivery Construction is specific, with a well defined delivery and timescale Designers are not interchangeable, especially in the middle of the process. Construction equipment and personnel are largely interchangeable at any stage of a project. Design cannot be automated. Larger parts of construction are routinely automated Each design will be different from each other design, though there may be similar aspects Each construction will typically be the same as dozens, hundreds even millions of others. Designers are difficult to manage and can be unpredictable. Construction workers are much easier to manage. There are not a lot of good designers and they are hard to find. There are many good construction workers and they are significantly easier to get There can be orders of magnitude difference in the end result from different designers. There will be much less than an order of magnitude in productivity and quality variation in construction workers. Design is a difficult and error prone process requiring trial and error. Construction is a well understood process, with effective quality control. Designer love to innovate. Construction workers rarely get a chance to innovate. A good designer can transform a product, even a company.

e.g. Jonathan Ive A good construction worker can be relied on to do his bit.

“Learning is not compulsory. Neither is survival.”

W. Edwards Deming

Add Bookmark:

























… continued in part 2, consequences of Software as Design

Share this: Twitter

Facebook

Like this: Like Loading...

Posted in Software Engineering, Work