27 April 2017

I decided to become a software developer around the age of 16. I was into natural sciences, math, astronomy and computers at the time, and a lot of my older friends were studying to become software developers. I used to play with Lego all the time as a kid, and software development is a lot like building Lego things: you have building blocks - frameworks and libraries - and if you put them together in meaningful ways, you can create quite cool things.

My university studies did a good job of giving me a basic understanding of software development and of the limitations of what a computer can do. They also pushed me in the direction of curly braces, since our main projects were done in C++. I did a bit of work in Java and C++ before jumping on the C#/.NET bandwagon in 2003, and I've enjoyed the ride ever since.

The thing I am most proud of is the work I've done on Pickles, the open source living documentation generator. A living documentation is a documentation that is always up-to-date with the newest insights. Wikipedia is a living encyclopaedia, but unlike Wikipedia, with living documentation you do not need human intervention: assuming your specification is written in the Given/When/Then style of Cucumber or SpecFlow, Pickles will contain those (frankly quite boring-looking) specification files and turn them into a much better-looking web app. That means that non-technical people can read the specification files without needing a programming environment - or in other words: it becomes easier for non-technical people to participate in the discussions. Pickles has emerged as the leading living documentation generator, and receives regular code contributions.

You are vegetarian and mentioned ethics of work several times during our conversations. Why does that matter to you?

I eat vegetarian for two reasons: I consider the way animals are treated in the food industry to be unethical (there is that word again). I do not object to people raising animals, killing them in a quick and painless way and eating them - while it is done in a respectful way. Stuffing stalls to overflowing with animals, treating them like inanimate objects, hauling them hundreds of kilometres to a place reeking of fear and death to slaughter them - that is a far cry from treating animals with the respect that every living creature deserves. The other reason is that I believe - based on the results of scientific studies I've seen - that by eating vegetarian, I significantly reduce my risk of cancer or cardiovascular diseases. I do not try to convince people of my views: everybody should decide for themselves, I detest proselytising, and the sad truth is that for every scientific study that supports my view there is another study that says that another diet is much healthier. So it comes down to what you choose to believe.

What other topics are you concerned about?

As with the animals, I believe we should treat other people and the environment with respect. Cheating people is not respectful. Doing work that harms people is not respectful. Doing work that damages the environment is not respectful. Therefore, work ethics are important to me. I believe women and men are of equal value and should be granted the same rights, the same opportunities and the same compensations for the same job. That makes me a feminist, and I am proud of that.

We live in a world where everybody with an Internet connection can watch hours of pornography, and yet it's rare to see a positive attitude towards sexuality. This is very obvious in the way society treats sex workers: they perform a very important service and ought to receive gratitude and respect for that - instead they are treated like dirt, the name of their profession is an insult, and in some regions they are indeed even prosecuted (but not their customers). I hope it goes without saying that I do not condone trafficking.

There is a chasm between the rich and the poor, and the chasm grows wider all the time. I begrudge no-one the spoils of their work. But I do not get that a manager should earn over 10 times more than regular workers. And I do not think it is right for "the rich" (be they people or companies) to exploit others for the sake of profit maximisation. I live a life that is affluent compared to many other places in the world, and I too have the desire to earn a bit more, but at some point enough is enough. At least in my opinion - many people with big salaries seem to think otherwise.

And then there is this fixation on working a lot. In the 1950s, when automated assembly and production became a thing, people dreamed of working only a few hours a day and devoting the rest of their time to family, friends, hobbies, art, ... In one of his short stories, renowned science fiction writer Isaac Asimov has one of the characters reminisce about the bad old days of a demanding four hour work week. Over half of a century later we are still working eight hours a day, and there is more and more talk about increasing that to 10 or even 12 hours a day. Something went wrong along the way.

What do you consider the biggest challenges for humanity?

I think the biggest challenge for humanity is the ingrained "us versus them" attitude of people. People tend to divide the world in two categories: us and the others. They will look after the interests of the "us" group, and ignore (or even sabotage) the interests of the others. Back in the days of hunter-gatherer societies this made sense: in order to survive, a human needs a tribe. So survival of the human becomes linked to survival of the tribe. A hunter-gatherer society usually operated in a scarcity environment, so it was important to make sure that the scarce resources were obtained by the "us" tribe and not by the other tribes. The "us versus them" mentality was a significant survival trait.

Ever since the development of agriculture and civilization, there have been plenty of resources and it is no longer necessary to divide the world in those two categories. The "us versus them" way of thinking is so deeply ingrained in our genes that it is very hard to overcome. We see it in rivalries between supporters of football clubs, in nationalism, in racism, in ethnic cleansing, ... Much of organised religion falls into that category as well, compounded by the fact that you now have a higher authority that tells you that it is right and proper that you look after people of your of tribe and creed, while being content to let the others rot in hell or even helping them along on the way.

If humanity is to evolve beyond its current state, we will need to overcome to "us versus them" way of thinking. If we do not, we will be fated to go through endless cycles of war and peace. As population sizes grow, those conflicts grow in scale and destructiveness too.

What do you do to engage these topics? For example, did you take part in public protests, donate money to NGOs or sign petitions?

To be honest, I am not convinced public protests do much good. They gather a bit of attention, but next week the focus of the media will turn somewhere else and the protest and its causes will be forgotten. I think that continuously doing small things has a bigger impact. If over time enough people do small things continuously, that will achieve a more lasting effect than a public protest.

I eat vegetarian so the meat industry doesn't receive financial incentives from me. I separate my trash in recyclable categories. I do not own a car - while I do use car-sharing from time to time, the first option I evaluate for getting from A to B is always public transport. I sign the occasional petition, but like public protests, I do not expect much to come from that. I donate money WWF (World Wide Fund for Nature), an NGO that protect animal diversity.

While I could quit my jobs and do charity work, I rather keep doing what I can do best and earn my salary as usual, just working on "the right things". Do you think that is possible?

It is not easy. Our society is geared toward earning money, spending that money in exchange for enjoyable things, and not asking too many questions about where those things came from. Working as software developer or IT administrator for an organisation like Caritas might be a worthwhile thing, but the pay would be such that it would be hard to make ends meet. My current strategy is to work part-time, earning enough money to pay the bills and also having time left to enjoy life.

During your professional career, did you ever have to take difficult decisions because of your values and social responsibility?

I haven't encountered any moral dilemma's in my work so far, except perhaps the target industry of my former employer. I hope that should I be asked to do something that I consider morally wrong - like tampering with emission control measures - I will have the courage to say no and to go looking for another job.

How do you think about selecting industry, customer and project based on your values and social responsibility?

I think it is important to follow your conscience when selecting a job. If you do not, and you end up working in a field that runs counter to your values, you will suffer. You may not notice on a conscious level, but it does have repercussions. Recent studies suggest that if your own picture of reality is at odds with reality itself, your body will release large quantities of cortisol (the stress hormone). Increased levels of cortisol are linked to increased illnesses, increased anxiety and unhappiness. If the reality is that you are working in some job, but your values (your picture of how reality should be) tell you that you should not work there, then you are setting yourself up for a cortisol trip with all the problems thereof.

Let us be more specific: Would you work for an animal factory? Would you work for a company producing equipment for an animal factory? Would you work for a sweat shop exploiting kids in Asia? Would you work for a company producing equipment for such a shop? Do you have problems with any industries?

I do not want to work for most of the companies you describe: exploiting animals or people is a no-go for me. Being accessory to the exploitation by working for a company producing equipment for an animal factory wouldn't sit right with me either. Even designing a website for such a company would make me uncomfortable. That said, I will do that kind of work if that's the only alternative. It may sound callous, but I would rather work for the company with the sweatshop than for the animal factory: there are far more human beings than animals, so I feel we need to devote more care to the well-being of animals.

I would probably be alright with working in the porn industry: there is nothing wrong with porn in and of itself, although there sadly is much more stereotypical and demeaning porn than there is sex-positive porn. As for the military: I could imagine myself working on a defensive system, but not so much on an offensive system. Still, if the choice is between the military and an animal factory, I will work for the military (unless the project involves animals like the Navy Marine Mammal Program in the United States of America).

I do not have a problem working in the gambling industry. I have done it before, and have recently accepted an offer to do so again. I consider it the responsibility of every single person to decide if they want to risk their money in gambling. The odds of winning are low, but you will at most lose your own money if you bet wrongly. When a bank bets on the wrong horse, they can lose the money of all their customers.

Did you ever reject a customer based on your values?

My previous employer is active in the financial industry. At first I did not mind but over time I began to realise that the work I was doing benefits only the rich: it helped the rich getting richer. The other, far more numerous part of humanity did not benefit from my work. Additionally, the speculations of investments banks can have a massive negative impact on society, like the financial crisis in 2008.

When I went looking for a new job after five years in the financial industry, I looked in different industries. I was offered several positions in the financial industry, but I declined those immediately.

On the other hand, what would be industries or companies that you would love to work on?

I would love to work for an animal-related NGO like WWF. I believe that when we learn to treat animals and the environment better, we will also learn to treat other humans better. I would also love to work for a space agency or company. I believe that more knowledge is the key to a better world. And we need space travel: if humanity somehow manages to survive the next couple of hundred million years, we will need to go in search of a new home among the stars when the Sun increases in luminosity and renders Earth uninhabitable.

8 April 2017

IT is a fast moving industry. Heinz Kabutz says that "we are in an industry with a knowledge half-life of at most 18 months. [...] Half of what you knew 18 months ago is worthless today, so you need to keep learning new things." We need to learn a lot, fast and continuously. Today even traditional companies recognise the need for professional development, also - or especially - for senior and expert level employees. (I could argue that senior tech people need more training than junior ones, because their time of dedicated learning in school or university has been longer ago, but I am digressing.) All companies I have seen, offered five days of professional training by year. (Unfortunately, not all employees take the opportunity to use this training budget, but that is another story.) A few companies have a stronger focus on self-development. For example the Swiss Zühlke Engineering offers ten days of professional training. (At least they did in the past, as confirmed by several Zühlke employees I met.)

Obviously ten days are twice as much as five, but I believe we need more. A few companies allow Research or Lab Fridays from time to time, following the idea of 20% time, made famous by Google Friday. While slack at work is focusing on innovation, the time is also available to learn. In the end, exploring new ideas is related to both. One of my clients runs a "Basteldonnerstag" once a month, which adds another ten days. sipgate runs Open Fridays every second week. So we are up to 20 or even 30 days for your professional development each year, I like that.

My Personal Development
As Code Cop I am working with my clients on different things. Some clients use technologies I have never seen before. Still my goal is to help them to improve. It could be as simple as writing unit tests with a xUnit styled testing framework - or as alien as modularising a legacy application written in an old, purely procedural language.

I learn a lot and need to learn more. I am conscious of the time I spend on learning. I think about learning methods and try different approaches, e.g. flash cards. I am still performing code katas, on my own and together with others.

2016
When reflecting about last year, I think that I could have done better. I had interesting work and got a lot of new experience, but I did not attend all training that seemed necessary and I did not visit as many conferences as I needed to visit. I worked full time and had to squeeze in the occasional learning. Out of curiosity I counted the days spent on learning last year. I was very surprised when I found 33 full days spent on professional training:

9 days of conference presentations. Last year I attended 5 traditional conferences, e.g. GeeCON, full of great talks and coding demos.

6 days of classic training like training courses or workshop days before conferences.

After seeing these numbers, I am impressed with myself. ;-) 33 days are a lot, and one third of them was spent on evenings and weekends.

Previous Years
So 2016 was a good year for my personal learning. How about the previous years?

2015, shown in the orange bars, is pretty similar to last year (blue bars). Surprisingly I spent 33 days on professional development, too: one workshop less and no Coderetreats, instead more remote pairing sessions. In 2014, shown in yellow bars, I fell a little short. I did not attend any training or unconferences and did fewer workshops. Becoming independent enabled me to visit (paid) training and I just discovered the opportunity of unconferences and workshops back then. Still I had more than twice as many pairing sessions, summing up to 27 days of professional development.

Conclusion
While I felt bad about my personal learning earlier, these numbers satisfy me. 33 days sounds much and I am starting to pride myself on them. I have no way to compare, I know people who attend at least one conference each month, which already sums up to 24 days at least. So maybe 33 days are not that many after all. So I might/ should/ could do more (MOAR PROFESSIONAL DEVELOPMENT!!1!), but I am pretty sure that I will not. I did not aim for 33 days in the past and I will not do so now. I am very busy, both with my work and my major ongoing side project. On the other hand, this year was full of opportunities and I already spent 12 days professional training in the first quarter.

27 February 2017

Since one of my very first presentations in 2009 I have been asked how to make time for testing and code quality related activities. Keeping the code of high quality is difficult if your manager or product owner is only interested in deadlines and the number of hours spent on creating the software. People told me that in their organisation there is neither time nor budget for code quality and that their boss does not consider it necessary. While this is the perfect subject for an angry rant, this time I want to list some options instead.

Context
First let me set the context for my answers:

The demand for software developers and IT professionals in general is ever increasing. We are a highly privileged part of the entire workforce. While finding a decent job is always a (subjective but nevertheless real) problem, finding any work in software just to feed the family is not an issue. There is always another job.

Testing is a mindset - you have to want it. There are thousand excuses why not to write a test or delay that particular cleanup. Some people pretend not to be allowed to create quality code, while they are just lazy. I would rather hear their honest views. I am suspicious of colleagues, who claim an interest in quality code but keep delivering crap on a daily basis.

More often than the lack of interest is the lack of knowledge. For example many developers I meet are not sure how to write good automated tests, because they have written only a few in their entire career. Because they are unsure - they do not know how to start - they claim it to be time consuming and drop the idea. If I do something for the first time I will not do it well. Until I master the new skill I will be slow. These developers need training, more specifically they need practise. Every developer needs to be familiar with clean code, refactoring unit testing, and much more. If you feel not sure enough to apply these core skills in your daily work, ask for training, attend programming workshops at conferences or get a programming coach. Coding Dojos and Coderetreats are a great place to start.

Actions
So you want to write unit tests and are able to do it. But your boss has no interest in it or there is no team culture to do it. What could you do?

First read my favourite article of Joel Spolsky, Getting Things Done When You're Only a Grunt, which covers some organisational issues. Like Joel, I recommend staying true to yourself - just do it. This is hard in the beginning when you are alone, but others might follow. (It takes a lot of energy and several years to transform a whole team from within.) When complaints about your work start coming in you have several options:

Do not try to defend yourself and avoid arguing. This is the way you work, end of discussion. Again, you need to be fluent and sure to be able to do that. Especially if you are a new employee you have some privileges. The team might accept your new style. If you are applying testing and clean code successfully others might follow.

Argue for code quality. Sure you need some extra time to write these tests, but then you will not have to go back and fix the code again and again which results in less context switches, less defects and less hot-fix releases. I have not met any manager who would not understand that. But sometimes we (IT) do not use the right vocabulary to be understood by managers. When you talk to your boss, it is better to talk about cost, risk and financial benefit than technical issues. Using the management speak is a skill. Start by collecting hard facts about code quality related activities. Research the estimated cost and later benefit for your particular case and compare it to the risk and later cost of skipping it. The Technical Debt metaphor helps here. Create a simple Powerpoint (yes, blasphemy ;-) with these facts. End with the red traffic light or the estimated downward trend of the team's velocity. For example instead of "the code is ugly" you could say that "because of its inconsistent structure you are more likely to introduce mistakes when changing it." Charts displaying the absence of structure, e.g. class diagrams with edges all over the place, make the missing structure obvious for non-technical people.

Hide the activities. Push for code quality while you create the code. If you write the test before (TDD anyone?) or immediately after the implementation, writing unit tests is not visible as separate activity. The same is true for refactoring. Do not wait for Friday afternoon to clean up the code you wrote all week, because you might not have time for that. If you improve the code after each green test, there is no bad code even if you are forced to stop early. Further add the time for testing and cleanup to your estimates, but do not talk about it. I know some developers who estimate higher than others. Their estimates are accepted because their solutions are better and have less defects.

Make excuses. Even technical managers do not know the exact details about the code you work with. Maybe there were some issues not anticipated during planning. There are always some. Communicate their (exaggerated) impact and argue that you needed some time to deal with them while in reality you had to restructure some legacy class to add to it.

Finally, you can always find another job. Today you have more options than ever due to remote work.

25 January 2017

Last year I ran a workshop at Quest for Quality, a young Devops and testing conference in Ljubljana. On of the speakers was Finn Lorbeer. During the conference dinner he helped me with suggestions for vegetarian food choices - the dinner was meat heavy unfortunately - which I appreciated a lot. I am not strictly vegetarian but since I talked to Carlos, I have reduced my meat consumption considerably. Now let's hear his views on meaningful work.

Finn, please take a few sentences to introduce yourself.
I am Finn and I work for a consultancy called ThoughtWorks. I am specialised in all aspects of building a high quality product. I analyse software as much as the team composition, the established processes, the business and data around it. With this heuristic approach I consult the ThoughtWorks teams themselves.

Finn, I know that you are vegetarian and concerned with preserving the environment. Why does that matter to you?
I am a sensible human being. Plus - and this is probably the differentiation - I do not close my eyes to what is going on in the world. I became vegetarian after thinking about where the meat that I was consuming (daily!) really came from. I ignored what marketing told me, and tried to be smarter than blindly believing what I saw in the supermarket. If you are really aware of how much suffering you inflict for you convenience, how would that not change your behaviour? It changed mine.

Years later, investigating more on the topic, I found out that it’s not only about meat. The entire animal farming industry is the root cause for a huge part of our CO2 emissions. Nothing in my private life has a bigger impact on the world's climate than having a vegan diet. I have no idea how people can get up in the morning being aware that with most of what they do over the day destroys the chemical composition of the atmosphere of our planet. So I guess they are not aware. And this is the main difference. It matters to all people, not just me.

What do you actually do regarding these things?
We are right now changing the chemical composition of our atmosphere and destroy our planet we live on. We are very close to a tipping point where the climate may change very fast. We have to stop this madness right now. And there is something everyone can do easily.

The CO2-Footprint of the beef of one burger is about equal to driving 100km by car. I neither eat meat nor drive a car. I organise film screenings about climate justice topics and I am in exchange with people from Ecuador, the US, Australia, China, India and more countries to think how we cannot only impact our private lives, but also our work environment.

What do you consider the biggest challenge (for humanity) of our times?
Again climate change. The poorest areas of the world already suffer the most. Syria experiences the driest times in history. Central Africa, too. They are already hotspots of wars and uprisings today. And we really wonder why so many refugees come from exactly those areas? There are fights between citizens and police in Mexico, because the people have no more access to fresh water. The arctic is melting at an incredible speed. While I love sailing, I would not enjoy sailing over the north pole in a couple of years.

What could we do to engage in these topics? For example, did you take part in public protests, donate money to NGOs or sign petitions?
I think the best thing one can always do is to lead by example. It is difficult to just sent some money somewhere. There are programs where you can donate money based on the miles you flew by plane to counterbalance your CO2 footprint. But studies showed that the people fly more when they use such services. They do not have a bad conscious any more, they pay to be free, and fly more.

I would like to see more impact on these important topics of my regular work by just working on "the right things". Do you think that is possible in general?
No. If everyone does this our economy and lifestyle breaks down. This is not sustainable. Many people need to work so that we have the money that some can do "the right things". This is the basic idea of any social system. So the setting is there, but the balance is wrong: e.g. broker (who do not create value in the economy) earn up to 100 times more than people in child care. IT people earn 10 times more than activists working for NGOs. We have to balance that better than we did before. But it’s unreasonable to think that we will all just work for social justice issues.

There are many decisions we take before and during a project. Which choices do you think are relevant? (The recent VW scandal is an example. Developers could have chosen not to commit fraud.)
I think that this sounds easier than it really is. Imagine that you are together with 200 developers at VW. And all 200 seem OK with tweaking the software a bit. The reasoning - everyone else does it, too - seems just OK and so you go along. What is the alternative? Stand up against 200 colleagues? It is rare to find so very, very courageous people. If this discussion is going on it’s too late already. There is little you can influence as an individual in a large group. The least you can do is to refuse to do it. Someone else will do it, but at least it was not you.

I believe that we all as individuals should work on a culture where such a discussion does not even start. If 200 people would not even consider an idea to manipulate their software, then no one dare to ask. If we build software "properly", we build it secure and with high quality. Both characteristics oppose fraud. I think here a positive attitude towards the (real) product you are building goes hand-in-hand with a guidance to what is right. One should never blindly code, like a code monkey.

How do you think about selecting industry, customer and project based on your values and social responsibility?
This is really difficult! There is something "bad" to find about almost any company. Twitter and Facebook create the little interests-spheres. Amazon tries to make us buy more than we want (and more than some people can actually afford). Uber replaces long-lived taxi companies. Amnesty International does only oppose small third world countries. But what do they do about big companies that are even worse than some small nations? Did Amnesty ever raise issues about Google and their mass-surveillance? No.

Do you have problems with any industries? Why? What about Porn industry or weapon manufacturing?
So while I think there is not "the" company to work for there are definitely some not to work for: companies earning money in tobacco, oil, porn or weapon industry are not worth looking at. They do actually nothing to improve our world.

I think I can work in the finance sector or insurance. Usually, those clients pay well. And this money can then be used for a better course, like helping programs that are working on the social justice mission.

Did you ever reject a customer or an actual project, that would bring you money based on your values?
No. But I never had a client or project that was totally aligned with my values either. As I explained above: while there is no perfectly aligned company, I never join or reply to offers, that do not fit with my values.

On the other hand, what would be industries, customers and projects that you would love to work on?
I am lucky to work for a company that shares some of my values, especially about social and economic justice. ThoughtWorks just released an open source hospital system that was built together with doctors in India. It is now being rolled out in Pakistan and Bangladesh. There were some developers working on it, so my part was simply to ensure we have the money to do so, e.g. by joining "any" project in Germany.

If I could choose freely, I think I would either go into the automotive industry or renewable technologies. Why automotive? We are at the brink of electro mobility. But our old, rusty German companies move really slow in this direction. I would love to help them get up to speed and get rid of their 130 years old model of explosion-driven-vehicles. A society that is mostly vegetarian and bases on electro mobility is be something I would be proud to be a part of.