Add a comment

 

Re: Most software developers are not architects

Whenever a discussion does not subside over time it´s a hint there is a misunderstanding or something more fundamental to be taken care of. This is the case with the discussion(s) about software architecture, software engineering and software craftsmanship.

"We are craftsmen not engineers" is as shortshighhted as "We are developers not architects" etc. And there will be no progress without an agreement on what those terms mean in the first place. What´s a "craftsman" anyway? What´s an "engineer"?

I recommend this book to help: http://www.amazon.com/Discussion-Method-Conducting-Engineering-Technology/dp/0195155998 - it´s written by an engineer reflecting on his disciplin.

With this and some experience as a craftsman and some common sense under my belt I venture to say:

We are engineers and craftsmen and researchers. All the time. It´s inevitable.

And here´s my definition:

-Craftsman: Someone who knows tools and materials to build a work piece according to a plan/design. A craftsman essentially is not creative with regard to what to build. He does not design the work piece.

-Engineer: Someone who has a state-of-the art knowledge about methods, tools, materials, natural laws etc. to design a work piece with help of heuristics (to balance requirements and find solutions) under certain constraints.
An engineer essentially is creative with regard to what to build. It´s his job to come up with a solution to a problem.
An engineer basically is an inventor. He brings something new into the world.

-Researcher: Someone who finds out about the state of the world. A researcher does not invent something new, but only describes what´s already there. A researcher is in the business of building up understanding/knowledge.

Take these definitions and it´s clear software developers are craftsmen and engineers and researchers.

When we analyze requirements, when we learn a new programming language or a new database API we´re researchers.

When we think about how to meet performance requirements or how to make software more secure or how to implement some functionality we´re engineers. That´s designing software. That´s what architecture is about.

And finally when we´re implementing a design, when we write code, then we´re craftsmen. We deal with tools and materials to manifest a design idea.

The point of contention is, it seems, how much time we do or should spend in those "modes". Some believe they can be mostly craftsmen. Let´s call them hackers ;-) Some believe others can be mostly craftsmen. Let´s call them managers :-)

But in truth we can (and should) only be some 20% of our time in craftsman mode. Because being a craftsman is slow and boring.

Most of the time we´re engineers or researchers. Most of the time we´re researching requirements or analyzing code during bug fixing or before engineering a new solution. Or we´re researching a new tool, method, API. Or we´re engineering a solution to perform better, be more scalable, more usable, more functional.

Interestingly TDD is intuitively separating those modes: writing a test requires research, because you need to know what to test in the first place, you need to know the requirements. Then implementing the solution is part engineering work and part craftsmanship. And finally refactoring means being an engineer again, because you design a better solution than existed before.

Also from the above definitions it becomes clear why estimation is so difficult. How long research or engineering (inventing) takes cannot be estimated. Only the work of craftsmen can be estimated because it´s kind of repetitive. Since we´re 80% of our time in researcher/engineer mode it´s fundamentally impossible to predict how long a task from analysis to design and finally to implementation will take.

Bottom line: All developers are architects/engineers. So they better get up to speed with architectural methods.

Dwelling on romantic images of craftsmen hammering away on stones of a cathedral won´t help software development much. Cathedrals like pyramids like the Burj al Arab did not get built just by craftsmen. And even more complex software won´t get built successfully just by craftsmen. It needs researchers and engineers as well.

-Ralf

Re: Most software developers are not architects


Title
Body
HTML : b, strong, i, em, blockquote, br, p, pre, a href="", ul, ol, li, sub, sup
Name
E-mail address
Website
Remember me Yes  No 

E-mail addresses are not publicly displayed, so please only leave your e-mail address if you would like to be notified when new comments are added to this blog entry (you can opt-out later).