“If we are 100% billable, we are not innovating!”

I just stumbled over following tweet:

I’m pretty confident that I understand what the author wanted to point out. And the idea of having slack times for innovation in companies is definitely a good thing and I don’t want to argue with that. But is being not billable really the only way to innovate? I doubt that.
Did you ever ask your customer if it’s allowed to innovate in his project? Most of them won’t have a problem with innovation as long as you take also care about the risks. A good way to deal with this is to release very often and early, to learn from the failures we’ve done.
Besides that, I did a lot of innovation in billed project even when the customer didn’t know about it, sometimes not even my supervisor did.

Please don’t blame controlling (for checking your billable hours), when you’re not innovating. And don’t fall into the trap to think you’re innovating just because your time is not billable. It might be even worse: that you’re not billable, because you didn’t innovate at all!

The Phoenix Project

Just finished another great book. The Phoenix Project is a novel about IT and DevOps in the fictive company Parts Unlimited.
It’s written in a very exciting way and tells how Bill Palmer (Head of IT) is fighting with the different requirements from his CEO, CIO, COO, CSPO, regulatories and all other possible sources. If you’re still struggling with IT this is a must-read. And probably even better in the hands of your senior manager. I already know whom I’ll pass my copy next.
Spoiler-Alert, but this quote from the last chapter is a very good conclusion:

We need to create a culture that reinforces the value of taking risks and learning from failure and the need for repetition and practice to create mastery.
I don’t want posters about quality and security. I want improvement of our daily work showing up where it needs to be: in our daily work.

Book review: Building Microservices

Thanks to O’Reilly and their sponsorship of the PHP Usergroup Frankfurt I was able to read another great book these days with the fancy title Building Microservices.
First of all I was very interested, because we’re building a microservice-ish architecture for our app at savedroid. But even without that current need I think Building Microservices is a great read. It has a lot of references to one of the Domain Driven Design bibles from Eric Evans. I’ve read the DDD-book before and the content of it is great, but at least for me it was really hard to read. It took me weeks to get through it. Building Microservices is the more hands-on version of that. It also covers all important topics and if you still need more information feel free to have a detailed look into one of the references mentioned in it.
Besides that even when the title contains Microservices, as this probably boosts the sales, it’s also very relevant for any other type of software, yes even monoliths. As most of the concepts are basic software architecture patterns and not microservice-specific.
I also liked the tools, which have been mentioned and explained with small examples. So the author Sam Newman doesn’t leave you alone with some abstract concepts, he directly shows you how to implement and use them.
Definitely one of my favorite developer books of the last years.

How to fix the lack of a good app for your local transportation service

Since the beginning of this year I’m commuting again with our local transportation system (RMV). We Germans are known for being very punctual, but that’s not true for trains. Besides that the train is quite often late, also the app provided by the RMV is an absolute mess. It’s not only slow and crashes regularly, but also doesn’t offer features like to inform the customers when their train is late. So regularly in the last weeks I ran to the train station, to figure out that the train is anyway 5 – 10 minutes late and therefore had to wait in the cold. Being sweaty from the run doesn’t improve that situation. Already in the second week I thought that they should offer a push service, for the trains, to know how many time is left to reach the train station.

Already in 2013 RMV talked about starting an open data project, so it should be quite easy to build a service like that. Unfortunately, since then nothing happend on the open data side.

Anyway, it’s not easy, but still possible to grab the data from their webpage at www.rmv.de. Unfortunately the amount of parameters used to start a simple query for seeing the next trains for a direction is massive.


nextrideSo this wasn’t really motivating for a weekend project as there’s no documentation at all and I would need to test each parameter individually with that black box. After playing a while around with the website, I also noticed that there’s a second type of search, when you click on that grey-on-grey button on the top right called “Nächste Abfahrt”. It maybe my fault, but I used this website for years and did never notice so far that there’s a second search option. This search gives you a list of the next trains at a station, which is fine for me as well. Also it has only 6 parameters to investigate. After a while I figured out that I only need 3 of them to get the search running. So one of the simplest queries looks like this:

input:Frankfurt (Main) Stresemannallee Bahnhof
REQ0JourneyStopsSID:A=1@O=Frankfurt (Main) Stresemannallee Bahnhof@X=8672513@Y=50094699@U=80@L=003000933@B=1@V=6.9,@p=1455288120@
The start-parameter has to be 1. input has to be the name of the station. And REQ0JourneyStopsSID has once more the name of the station plus some coordinates and at the end a timestamp. To find out the coordinates the easiest way it to simply use the website and grep the parameter from the headers when you’re searching for your station. The timestamp has to be updated all over the time. So I created a simple curl-script to retrieve the response programatically.

$url    = 'http://www.rmv.de/auskunft/bin/jp/stboard.exe/dn';
$fields = array(
  'start' => urlencode(1),
  'input' => urlencode($input),
  'REQ0JourneyStopsSID' => urlencode($REQ0JourneyStopsSID),

$fields_string = '';

foreach ($fields as $key => $value) {
  $fields_string .= $key . '=' . $value . '&';
rtrim($fields_string, '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
Unfortunately, not all trains from that station are going in the right direction, so I need to filter the result. I hope for the creator of the table structure of that response, that there are some good reasons for the way it was build. It’s semantically an absolute mess and therefore a pain to parse it programatically. The “best” way I found to deal with it, was looking for the #HFSContent element, navigate in the table and trs in it. Iterate over these and search for a td with class timetable and check if the inner a-tag contains my target location.
$doc = new DOMDocument();
$xml = simplexml_import_dom($doc);

$out    = '';
$trlist = $xml->xpath("//div[@id='HFSContent']/table/tbody/tr");
while (list(, $tr) = each($trlist)) {
  $checklocation = $tr->xpath(".//td[@class='timetable']/div/a[contains(.,'" . $targetLocation . "')]");
  if (count($checklocation) > 0) {
In there I looked for the td.time element and read the planned time for the train, plus the delay, which can be sitting in one or two spans.
$time = $tr->xpath(".//td[@class='time']");
if (count($time) > 0) {
  if ($out != '') {
    $out .= " / ";
  $out .= trim((string)$time[0]);
  $out .= ' -> ';
  $out .= trim((string)($time[0]->span->span));
  $out .= trim((string)($time[0]->span));
What I had now is a script, which outputs the next departures to my target location in a well formatted short string. Next is to run this script in a cron-job and trigger an action when the output changes. To get fast feedback, while I’m on the run to the train station the only two valid options for me have been a SMS or a push notification to my phone. Researching a while, I couldn’t find a free SMS service, which also sends to Germany. I also don’t have an active Apple developer account right now, so building my own push notification service was no option. Finally, I stumbled over http://ifttt.com, which has a trigger for incoming e-mails and allows to combine it with an action to send a push notification to my phone. That’s perfect, so I just send a mail, when the output of this script changes and it sends me the latest train departure times to my phone.

IMG_1271As I don’t want to get this all over the time I created a micro website to trigger the two cron jobs. This might also avoid that RMV is blocking me in some days, as I’m no longer polling their search all over the day. I linked this website to my home screen, so it can be accessed very fast. Next time I have access to an Apple developer account I’ll also compile it through Cordova, which will avoid the reloading of the page and give me even faster access to this control panel.

I hope this information will help anyone to implement something similar. I’m definitely looking forward to the next weeks when I avoid all these unnecessary sprints to the train stations.

Measuring performance of developers aka KPIs

No, don’t do it. It doesn’t work, I’ve tried it!

First of all, what kind of criteria do you want to use? Lines of code? That might just tell you that the developer is using a lot of empty lines or long variable and function names, or overcomplicating stuff. Amount of built features? What if these have a lot of bugs? Adding code coverage? This will only make your code worse. And what’s about all the soft skills?

Besides that, most of us developers have also a history in playing computer games. Which is basically “finding the best way to trick an algorithm”. That’s what most of us have done for years now and your KPIs are nothing else than a very simple algorithm. So we’ll find a way that your KPI looks good, but that will not increase the overall performance of the developer, it’ll even decrease it as he’s focusing on your incomplete KPI.

Giving feedback

One of my previous developer colleagues stated lately:

“Tobias has an attitude of improvement in whatever he does and leads by example throughout.”

Even when that was meant in a positive way, it also implies that quite often, I see room for improvements and state that as well. Not only in the work I do, but also for my whole team. Trying to be a perfectionist is something, which is quite challenging to combine with keeping your team motivated.

There are some well-known best-practices how you can and should package your feedback to your colleagues.

  • The 70/30-rule says that you should give at least two times more positive feedback than negative.
  • The feedback sandwich claims to package your critics with a praise before and after it.

At least for me both didn’t work pretty well. Apply these the wrong way you even get a negative effect. A positive feedback can be a great motivation boost. But don’t underestimate your colleagues, if they notice that it’s made up, it gets even worse. When they recognize it’s not honest their conclusion might be, that first of all you’re lying to them, but also don’t really care about their work, as it might look like that the praise was just to improve the performance aka KPIs of the team.

Once more, I would like to show what worked for me a lot better. And once more the disclaimer, that this is my personal experience, so don’t take it as a hard rule. Your situation might be completely different.

First of all, before giving any feedback, think about what you actually want to achieve with that feedback. I’m a big fan of autonomously working teams or a so-called learning organization. But can I achieve this when I all over the time try to correct my colleagues? There has been just a great tweet about this topic (worth a RT):

I don’t mean ignore wrong behavior, but think about, if it’s really useful to give the feedback in this moment and in this way. Might it be better to let the team discover on its own a better solution? Especially in retrospectives where I have a kind of a lead position I wait a very long time, before I propose an improvement to the team. My goal is to have an autonomous team where they work on the solutions.

Also any kind of negative feedback should include a suggestion for improvement. Just criticizing is not only very deconstructive by demotivating people, but also nothing you can be proud of. Finding mistakes in the work of others is imho the easiest job out there. How many English spelling mistakes have your already found in this blog post? Anyway, if you think you’re the smartest person in your organization:

Besides that, there are no bad ideas or implementations out there. You should encourage any kind of action by your colleagues, as they’ve spent their creativity and time in it. If you shut down their creativity by your negative statements, you might not only stop this one action, but also decrease the motivation to take actions in the future as well. Repeat these critics regularly, your team will end up where everyone is just doing his work, but you’ll never see any kind of innovation from there.

Visiting an improvisation theater session at a conference last year taught me also another very nice practice, when trying to give some kind of negative feedback. At the time someone is giving a statement or showing a feature you don’t agree, don’t try to discuss with him. Try to start your sentence with “Yes, AND …” Which means yes, what you’ve done is good and additionally I WILL (not only want to) add this one more thing, which makes it even better. Probably written down this doesn’t make as much sense as being part of an interactive audience practicing it. 😉

So how much feedback should you give? I think there’s no easy answer to that, especially not to the ratio of positive to negative feedback. It depends a lot on the receiver of this feedback. Most just want you to be honest and constructive.

The most important part is probably the language you’re using while stating your messages. I’m a fan of the principles of the Nonviolent Communication, which also has a lot of parallels to the Feedback wraps of Management 3.0 (both are very good reads!). They say to first state the current facts, trying to not rate these and leave out your feelings. After that state the problem you have with that, again try to not put your feelings into that. Only after that you’re also allowed to say how you feel about that situation. Finally, you might add a suggestion for improvement. Or let the team work it out on their own, if that’s what you want to achieve, but be there for them as their servant leader, if they need help. When you have earned their trust and respect by your actions (in this team, not in your CV or stated critics) they’ll do this anyway.

That’s just the one way of feedback, as it’s giving the feedback. Receiving feedback from others is a different topic, which I will pick up at a later time.

Motivation of software engineers

Being motivated at your job is probably one of the most important factors and therefore influences your success in the job directly. Whenever I work at a project and when I’m not motivated enough, it first of all takes longer, but also the result is not from the best quality I could deliver.

Curiously it seems like the motivation of software engineers is quite often different than at “normal” jobs. For a lot of us it’s not just a job, it’s a passion. I just talked to a company in a sunny country, looking for a CTO. Besides living in a country with a really nice weather, they also offered a good salary. Sounds like it should be easy to convince someone doing that job. Anyway, the position is still open, so if these are the perks you’re looking for let me know and I’ll send you the contact details.

But how do you know: what motivates your software engineers?

I’ve seen a bunch of companies offering these days a lot of benefits. Having a grill and kicker table is already more a hygienic factor, than any kind of motivation. I’ve even seen free massages, a washing- and a shopping-service. These are nice things to have, but at least for me that’s not any kind of motivation. Do these things really attract people who’re motivated to build the best products?

What I’ve heard a lot is, that people are motivated by using the latest programming languages and frameworks. Also working with a cool team and great people, some rockstars, was mentioned as a motivation. For me these are not rationale motivations, just some tools. Or would you say the Oldboy’s motivation was to use a hammer?

Learning something new, or looking for a technical challenge can be a good motivation. Solving problems and helping people, you have these often in non-profit projects.

On the other side having safety for the family, if you have to feed multiple persons from your salary, might be a motivation. Therefore, money is seldom unimportant. Having a job where you cannot be fired might be important in that case. Your software has a lot of bugs and only that one developer understands what’s happening under the hood? This might be your point.

Also when you climb the career ladder vertically and are moving towards managing people instead of writing code the motivation might change. Managing people, or controlling bigger budgets are also just tools and therefore not the motivation. Probably having more power is your motivation in that case?

The moving motivators list these motivations:

  • Curiosity
  • Honor
  • Acceptance
  • Mastery
  • Power
  • Freedom
  • Relatedness
  • Order
  • Goal
  • Status

I’m not convinced that we can limit it easily to one-word cards. My own motivation is clearly building something which is used by a lot of people. It doesn’t need to solve a problem, as it’s also fine for me building computer games, which seldom solve a real problem. Also it’s not the recognition for my work, as I worked a lot as a ghost-developer. And even if I care about this factor as a Swabia, it’s definitely not the money which motivates me.

Anyway, this is just me. Every software engineer is different and the motivation might even change over time, so please ask your colleagues what’s their personal motivation. This not only helps you as a manager, to get the best “performance”. It also helps to understand the logics and decisions of your teammates.

Feel free to add your motivation in the comments, I would love to get some more feedbacks.

I also started a small poll on Twitter, which unfortunately only allows 4 possible answers:

Blueprint to Tobias and his quirks

Last week I visited the first edition of The Lead Developer Conference in London. What a trip as I decided to save some money and visit a club instead of going to a hotel. My timetable was: Standing up at 3am on Friday, Train at 4am to the airport, Flight at 6am to London, Conference starting at 9am, Clubbing from 10pm, back to the airport at 3am with a crappy nightbus, Flight at 6am to Frankfurt, in bed at 11am on Saturday. Sleeping two hours and than my dog Lila wanted to get out. But I had finally some time in the afternoon to watch the final season of Dexter.

The conference was quite good, a good mixture of people related and technical talks. Maybe a little bit too high level for someone who’s already working a while as a teamlead. But still good to know you’re on the right path with your ideas and tools. And I also picked up some new ideas. One of them I want to introduce now.

Luv Levesque introduced a blueprint of his quirks to let colleagues know from the beginning what he values most and how he defines top performer. Usually you don’t know exactly what your new boss or just your colleagues are expecting from you. That’s very often a difficult time as you don’t know if you communicate too much or too less. If it’s good that you’re keeping all balls in the air or should focus on one. When are you allowed to ask a colleague for help? I liked that idea a lot as I currently know that situation from myself, and as an introvert it can go on quite a while to figure out all quirks of your colleagues.

That’s the reason why I now created my own blueprint, which is currently just a very first version and I’m still not sure if this is the perfect list of quirks I should use and even publish. But it’s a start and Luc has in his template already a version count prepared.

You’re now interested what are my quirks and values? I tried to keep it small. The template is prepared for 18 different values, but I think it should fit on one page. I also wanted to add things like independence in work, mastery or my network. There are so many things that are important, but you have to focus. 😉

Here you go to my first version of Blueprint to Tobias and his quirks.

The next chapter: savedroid

Some of you might have seen it already in my profile updates lately. A new chapter started in my professional live. I’m very happy to join forces with Yassin Hankir to found the new FinTech company savedroid. First of all don’t worry, Beerplorer is still there and running in parallel. It even got a lot of traction lately by an article I was allowed to write for t3n about my lean launch experiences.

But what the hell are we doing with savfie? First of all I’m sorry that the website is only in German, as our service will only be available there in the beginning. I don’t want to reveal too much for now, just that I’m totally convinced by the approach we’re going to find the best product that fits the market.

It’s not the usual way: that we had a brilliant idea, jumped to our laptops and wrote a new fancy app. No, we have some ideas that could work, but I have definitely seen enough projects in my agency live which looked like a brilliant idea on the first view and failed anyway. So we’re currently evaluating and improving these ideas in a multi-step procedure. The first step is that we’re hosting 4 focus groups (where 2 have already passed by) and invite potential customers to talk about the ideas. Are they really useful for them? Why would they use them or even more important why wouldn’t they? What’s the key feature? What other concerns do they have like privacy and security?

Will this lead us to a perfect product? Probably not, but it’ll definitely improve our view of what the perfect product looks like. The next step is to launch several landing pages and simply a/b-test them based on their conversion rate. This is a real world test to see if we could be successful when launching this new product. And it gives us very valuable information which featureset is the best for our potential customers. If all conversion rates are bad, we fail, but we fail fast. That’s the time when we have to get back to the tables and be honest to ourselfes to find a better product. But hopefully one or two will work quite well and then it’s time to move on. First of all start developing the product itself, but in an agile way. So launch the beta very early and besides that continue a/b-testing on the landing page to test smaller changes in the features, but also begin to a/b-test the product itself. Which button-type works better, which UI is more intuitive or should we have less or more options to satisfy the most customers?

It’s a very rational way and I love it. And we’re looking for people who’re interested in joining us for this journey in the areas app-development, ux-design, backend-development and internships for entrepreneurship and communication. Please contact me anytime at tobias@savedroid.de if you’re interested.