The Heroes of Java: Michael Hüttermann
The sixth part in my Java interview series: "The Heroes of Java".
Who are you?
I'm self-employed consultant on Java, Agile and build-, config-, deploy-, requirements-, release-management, what I sum up with "ALM" (a bit simplified here). In most of the projects I'm engaged as a developer, build/release engineer, or coach. I also give seminars on these topics.
Your offical job title at your company?
I'm freelancer thus I implement all possible roles myself.
Do you care about it?
No. In projects though, it can be essential to define roles and shape responsibilities. Many projects feel comfortable with driving an integrated approach to roles, for example aligning the technical staff to be "the team", coders and testers to be "developers" or developers and operation staff to form "DevOps". This is a good approach to foster communication and improve collaboration. Some situations require a more structured setting though.
Do you speak foreign languages? Which ones?
Besides English I speak Kölsch, although the latter is not foreign if you live in Cologne. My lessons in French are too long ago unfortunately. I find it crucial to learn and speak at least one foreign language: to express yourself in other languages, and to keep busy with other countries and cultures, all that helps you to develop yourself forward.
How long is your daily "bootstrap" process? (Coffee, news, email)
That depends on the situation. Reading the newspaper and having a coffee takes some time, but actually, I don't have a "daily bootstrap process" in that sense. Often I don’t read mails in the morning in order to focus on other activities first, for example development. I try to find a smart and productive way to start the day.
You have a twitter handle? Why?
Yes, @huettermann. "Why" is a good question. Maybe the reason is that Twitter is a convenient way to inform the world about something that it did not wait for or already knows from other communication channels.
Whom are you following in general?
Basically, I follow people who add value to my Twitter timeline based on my current interests and activities. I try to manage an individual value stream, not a heavy loaded wave that I can only follow technically without following the real content of its tweets. Thus maybe there are many people I should follow, but in practice I don’t. Twitter can be a productivity killer if you are watching a scrolling timeline all day long. It is so easy to just be “busy” without focusing on effectivity and efficiency.
Do you have a personal "policy" for twitter?
General communication rules apply to Twitter too including "Don't tweet something about others that you don't want them to tweet about you". Another policy for me is "Don't bash other technologies or concepts" because that's not constructive and is just boring. Regarding Twitter, in particular: "avoid tweeting about your visible appearance in the early morning".
Does your company restricts or encourages you with your twitter ussage?
Nowadays it is more and more important to discuss with others and foster knowledge transfer and knowledge sharing, on many different channels.
What's your daily development setup? (OS/IDE/VC/other Tools)
The setup totally depends on the project context and individual requirements. I like best-of-breed tools that allow to work in a productive way. You get a good impression about what dev environment I personally prefer from having a look into my recent book Agile ALM. There I cover version control systems like Subversion and Git, continuous integration servers like Jenkins/Hudson, TeamCity, Bamboo, and many other handy tools.
Which is the tool providing most productivity to your work?
Your prefered way of interacting with co-workers?
Face to face. I still believe in the value of direct and personal communication. Other channels including mails and meetings are the more appropriate solution in specific cases though. Many topics can be clarified asynchronously, thus a mail is a good fit. Meetings should be avoided whenever possible. If a meeting is really necessary, it should be well prepared including sending an agenda before the meeting takes place. Otherwise, a meeting can result in just being “busy” without focusing on concrete tasks and concrete results. By the way, just using many different communication channels in parallel does not necessarily mean that you work with your colleagues in a collaborative or somehow better way.
What's your favorite way of managing your todo's?
Personally I define goals for weeks, months and years. I assign priorities and try to find out context parameters, restrictions, relations and so on. I try to avoid adhoc activities, though there is a reserved slot for that too. In projects, the favorite way of managing tasks depends on the situation and the overall context: using a type of backlog is often an approriate solution. Sometimes a WBS is most useful, sometimes a more heavy-weight project planning vehicle. If you could make a wish for a job at your favorite company: What would that be? I'm already doing what I like most. No further room for improvement.
You're programming in Java. Why?
Java is an all-purpose business language but also a platform and a set of APIs. This makes up a great ecosystem and a great, mature infrastructure. The language Java is powerful and innovative, and thanks to Oracle, it's developed further in an attractive way.
What's least fun with Java?
Java is slow. Stop, that was a joke, sorry about that, although I still hear this statement from time to time. Honestly: the bootstrapping process is sometimes suboptimal meaning achieving first good solutions while starting from scratch. Here I don't mean to hack together some HelloWorld classes to show that an API works, rather to design and code enterprise-ready solutions in a real- world project context.
If you could change one thing with Java, what would that be?
Java is moving forward, that's good. Instead of dreaming of new specific features for next Java versions, I more prefer improvements in the process itself that should result in transparent, collaborative and frequent new Java versions. JCP.next/JSR348 is a very good step in this direction, and Oracle does a great job in bringing Java to the next level. What I’d like to add regarding specific new future Java features: as a matter of fact, having Java on the market for so many years now, any new language feature can’t be that killer feature that would save the world. Additionally, using other languages on the JVM already enables us to use other features and other styles without using the language Java itself.
What's your personal favorite in dynamic languages?
First answer is Groovy because of it's powerful adoption level and ecosystem, for instance the build system Gradle. Abstracting away from the typing system, also Scala is a "dynamic language" for me in its classic sense. That's the reason why I cover these two languages, Groovy and Scala, in my book "Agile ALM". I find it helpful to develop solutions in a collaborative, dynamic way, and to set up a mash-up of tools and languages that best fit to a given task. That's what makes up an Agile AlM.
Which programming technique has moved you forwards most and why?
It's more a zoo of many different complement techniques instead of the one that rules them all. Many agile practices influenced me including TDD and pair programming. On a meta level, the technique of "continuous improvement" adds much value by reviewing what you and the team have done continuously. Of course there are many other influencing aspects. One crucial aspect is experience.
What was the biggest project you've ever worked on?
The answer depends on how you define "big". I'd prefer to talk about "challenging" instead of "big". Lucky enough I had the opportunity to support many different projects that were challenging regarding team size or team setting, challenging regarding the non-functional requirements, and so on. Besides that, I'm not proud of any "biggest solution" or find that of any special interest, rather it is more satisfying and interesting for me to help to create solutions (not only some random increments) that provide a great mapping from the problem domain to the solution domain. That also conists of providing a simple solution with minimal accidental complexity and maximal value for all stakeholders, especially for the person with the money (the customer) and the person who is affected by or affects the solution (the user).
Which was the worst programming mistake you did?
Generally, the next one is always the most annoying. :-) Hopefully many of the defects are identified early by the respective process, thus a mistake should never become "the worst one", rather just a learning opportunity. You should also keep in mind that a “mistake” is often just the result of a wrong or incomplete understanding, of requirements for example, or a defect in the development process. The worst case that can happen with mistakes is that you and the team repeat them: repeating mistakes is really something that you should avoid.