Sun Mar 21 10:06:39 CET 2010
What did I learn this time?
The project I'm about to finish was something new to me. In some
sense it was quite frustrating as it wasn't much about design and
programming, but more about communication and politics.
All my work up till now has been higly technical: understand the
problem deeply, write a solution, debug, iterate.
This time the technical challenges where minor, apart from absorbing
knowledge about a new system and its quirks (Android) and a new
programming language (Java). Most work went into:
- Very difficult path from requirements to specifications.
Things seemed obvious at first, but workarounds for secondary
effects out of our control greatly complicated the design and
implementation. New use-case requirements kept popping up. Lack
of adequate tests to see what is really needed.
- No real feedback from particular use case to general
This seems to be largely a consequence of hierarchical way of
planning and making decisions common in large companies. This
project was special as it was a small one, not important enough
for upper layers to bother.
Getting the point across is difficult when using concepts from
functional programming in an OO-oriented shop. Writing good
design documentation is hard. Keeping it up to date is harder.
Make sure that documentation and implementation are linked! Turn
every question ever asked into a FAQ item.
- Struggle with tools. The android development tools are not very
good. They are slow, buggy and error-prone. The large
write-compile-test cycle makes working with this system quite
- Meetings drain energy.
My efficient work modes are problem solving (long stretches of
deep concentration) and process management (keeping and eye on
and streering a lot of not too complicated semi-automatic
Dealing with people and disagreements is not something that fits
into this plan. It is as if _everyting_ in my mind needs to be
swapped to secondary storage to make room for the social