> Bear with me here - I'm the one that introduced the Lewis article,
> and I am a huge fan of. At the same time, I believe it is possible
> to mis-interpret the words a bit, and want to be careful.
>
> Take, for example, the 11th century master mason working on a
> cathedral. Does he think he is doing "the best stone cutting i the
> county" or does he believe he is "building a cathedral?"
>
> I believe the second attitude is generally more mature. Decisions
> like when to take on technical debt need to be balanced by the needs
> of the business.
I absolutely believe that the later is, as you mention more mature,
although with some connotations to it. Many people, specially in the
software development industry bend to the 'pointy haired bosses' and
do whatever the business asks them to do. We could argue here if this
is the right way to really 'build a cathedral' or just postponing a
tick it's downfall.
A craftsman always tries to strive for excellence while doing his
work, therefore providing the most value to his customer. Due to the
expertise, acquired in long years of practice, the craftsman is able
to create, using the best of his professional judgement, the best
solution for a customer. When building software, for instance, we
might sometimes envision a 'perfect' architecture. Due to time or cost
constraints though, we might choose a simpler solution to the problem
(always advisable) so that the customer can enjoy his product earlier.
In this days time to market seems to be really crucial!
> Thus, the apprentice (for the most part) does what he's told. The
> journeyman asks "What is the right technical approach?"; the master
> asks "what does the business need, and how can I accomplish that
> with integrity?"
I agree with this simplification of the Apprentice/Journeyman/Master
explanation. I would say that the Journeyman also asks himself the
question "what does the business need, and how can I accomplish that
with integrity?"; the real difference lies in the master himself. By
definition, or as far as I believe, a master has attained a level of
proficiency that is very hard to reach. He not only understands the
art of software development, but also explores new ideas and
techniques of his own invention; he tries to make the art go to the
next level by applying new points of view, and seeking to offer that
as a masterpiece or new technique.
One example here. Unit testing is a really old technique, many
developers have been testing their software by running small
simulations that would stress their applications or units in a certain
way. Until Kent Beck wrote the xUnit family of frameworks (specially
JUnit) and defined TDD this techniques where hard to master and
required a lot of setup. Due to his insight he actually gave us a way
of testing our applications better, faster and in a very efficient
way. He didn't only give us a tool, but also a practice that would
support that simple yet powerful tool and practice!
Enrique