7 July 2013

Where is the Quality?

I am professional Java developer since almost 14 years. I have been coding for education, fun and profit for 27 years and three months now. I bought my first book on how to program BASIC for the Commodore 64 in 1986, even before I got the computer itself. I have been enthusiastic about all this since then and never stopped pushing forward. But I am depressed. Maybe I get depressed easily, as once after a particular bad gig I had to take an antidepressant for more than a year. Fortunately no burn-out this time - I am just fed up. Time for a rant ;-)

AngerThe current state of the IT industry makes me unhappy. That is nothing new and maybe my last employer is a particular bad example, but I do not think so. I have been with some companies during my career and talked to developers working on different projects, and usually I hear the same story: Deadline first, crazy rush, get the shit out of the door, repeat. I am the Code Cop, I try to keep things together, clean them up, whip them into shape. But I am wasting my time. My work has no meaning. I am just one but "they" are legion. Recently I got really angry when being confronted with bad code. How do you dare to deliver such crap to my production code base. This is all a big joke.

Some developers have no idea about object orientation, encapsulation or how to design a class at all. The senior developers know their business and applications well, still some of them are unable to create a reasonable design or model classes with a single responsibility. This does not only apply to off-shoring, but to local teams as well. Managers and architects are talking about all aspects of the development cycle but the actual creation of the core asset, the executable code. Development of code is seen as a commodity, unimportant work, just fill in the gaps.

Dark Future
Last month I was invited to a small panel discussion. Together with a test automation expert and an user interface specialist, we were discussing with the audience about the future of software development. The opening question was for our advice for students of higher technical education. Where the testing and user interface people predict a bright future, I have a darker vision. I would not advise anybody who is passionate to start working in today's mainstream IT industry. Software is growing more and more complex and changing it takes longer and longer. At the same time the cost pressure increases. Current trends like Water-Scrum-Fall try to fix these problems with a process. The real issue is the bad quality of our code. We have accumulated a massive amount of technical debt. The same is true for testing. Yes, we plan for unit tests during development, but then need to finish the requirement first and skip the tests. In the end we get some UI test automation, delivered by an outsourced testing team. Hello software testing ice-cream cone.

Dead EndEscape?
I get many mails from head hunters looking for Java developers. But their work is as broken as ours. I am sure, if they would just read one post of my blog they would not send me information about an open position for a junior developer who is supposed to add buttons to a web application. Some head hunters are even specialized in IT personnel but seem to be as (un-)skilled in their work as most of us. From my experience they just do not care, else they would not send me letters with a wrong name in the salutation. Anyway, all advertisements for job vacancies I have seen so far were flat and did not say anything about what to expect. I am not excited.

I believe that the Software Craftsmanship movement was born to address these issues. But Austria is a small country and I am not aware that there are companies like 8th Light around. Still I know of many passionate developers and would like to hear about companies, where all members of the development team are craftsmen. It will definitely be a small company, at least a small development team hiding somewhere. So please stop hiding and come outside, I am looking for you! (I really hope you exist ;-)


Gerald Bauer said...

Try learning a new language. You will meet lots of great people who care about quality at the vienna.js (JavaScript) or vienna.rb (Ruby) or even the vienna scala meetups for example. Enterprise Java and quality. Ha. Thanks for organizing the Eclipse camp. Keep it up. Cheers.

Peter Kofler said...

Hi Gerald, thank you for that new perspective. I did not consider it an attribute of Java, which is most "enterprisy". Probably it is not even a problem with Java but of its enterprise usage. And yes I even know people in the Java community who care about quality, that is not the problem.

Martin Wildam said...

You are not alone with your experience! I am far from being convinced to produce "clean" or high quality code but what I see elsewhere is often very crappy. I do not contribute to bigger projects on github or sourceforge etc, so I cannot talk about those. I can only talk about components or a bulk of scripts, where I really see source code. But apart from that I do see product bugs where even every support guy must agree that behind such bugs there can be nothing else than crappy design and poor quality in implementation (=coding).

When I look back to my history, I can see one big difference regarding how things run nowadays: I was coding and coding and coding. And although I already knew about coding, I learned it again and further in the specialised school I attended. There I learned a lot of related stuff and organization, documentation and economics.

Nowadays if you look around, the coding gets the least attention and the coding is the worst payed job. Interestingly the focus is on management and sales. My experience: Increasimg number of people doing blabla-jobs and even the people doing the first analysis and consulting are often dumb and the development starts (and continues) wrong targets.

And then as companies do not want to hire programmers their consultants (maybe even combined with exaggerated self-esteem) do the coding. Other consultants even know that they are not really (good) coders but they are doing it simply because they are put under pressure.

I often get the explicit advice to do it quick and dirty "just for now" not only during a proof of concept and then when it is time to do it right for production you hear somethimg like: "Why do you need so much time for that task, the most is already working?" Apart from that, management is not aware that IT gets more and more complex and complicated which of course does not make it better for the interested ones to get started or reach a higher (quality) level.

I often have completely redesigned and rebuilt applications and I know very well that this costs a lot of time and effort (and money of course) and I do feel also being alone with my opinion that things should be done right.

Unfortunately poor quality is all around - not only in IT business. It starts buying two sand shovels for my children near the beach. I bought those which seemed to be the most robust ones but they were rotten both within a few days anyway...

We are in the crapware age, folks!

@Gerald: Learning a new language does not solve the issue (apart from the fact that even the best programmer somehow is thrown back to novice level then in regards of language specific pitfalls and missing library knowhow). Of course different languages attract different people and produce different communities which might make a little difference, but does not solve the core problem.

I tried a little Scala for example and I understand, why many good developers might like it. But I am pretty sure that for not so experienced developers it would be either more easier to introduce crap coding in Scala. I know, there are plenty who do not agree with me here.

Martin Wildam said...

Oh, and management may have a totally different approach to quality - or "high standards".

The daily dilbert from yesterday points it out:

Peter Kofler said...

thank you for your comment. Esp. "the coding gets the least attention" is exactly one of my points. I can not find the link now but once I read a post where the blogger meant that even the CEO/CTO should look at the code his company lives on. I never saw something like that.

And yes, "we are in the crapware age" seems to be a good description, next to "the future’s shit" (by David Green).

Unknown said...

Hi Peter,

As a developer who frequently experiences how much additional work crappy code causes when implementing changes, I understand that it's important to create good, maintainable code. Managers who don't have this experience don't understand how important this is. To convince them, one requires quantitative facts, or at least reasonable estimates.

Some developers use code quality tools like Sonar to get an indication of how good the code is, but that data is of no value to managers because there's no obvious, direct mapping from code complexity to costs, for example. "The Economics of Software Quality" by Jones & Bonsignour is on my reading list, because I'd like to have good arguments for software quality which I could tell managers, but I fear that rigorous quantitative analysis would be way too costly in the real world.