Monday, April 7, 2008

Teflon Programming

The bane of our industry is poor quality software. We live in a disposable world and we treat our software in the same way. This fact is easily obscured by the mesmerizing stream of innovation; we're almost happy to discard the crap we use today in favor of new things, even knowing full well that these too will be considered crap in just a few years. Of course, throwing something old away in favor of buying something new is good for the manufacturers and hence we consumers are encouraged to think this way. That's why we don't see cars built to last for thirty years; the car manufacturing industry is far better off if the bucket of rust falls apart after just ten years. The sooner the better, in fact. Though of course, as a manufacturer, you don't want the car you've built to fall apart faster than the other manufacturer's car; you want to have a reputation of quality, so there is significant pressure to keep the darn thing on the road for a reasonably long time. The pressures on the software industry are quite similar. We don't really need a new version of our operating system when the old one is more than adequate, but if we can be convinced that we really need some new wow factor, we can be convinced to make someone else rich. Similarly, we need a new language to replace Java almost as badly as we need another mouth to eat more quickly.


I think the fact that software is all too easily viewed as lacking long term value leads to a career path that might best be described as Teflon Programming. The career works as follows. Always look towards starting something new. If you can't drive the innovative ideas yourself---so few can---look elsewhere for them. Pay very close attention to buzzwords! They will guide you like a moth to a flame. When you see the bright light, do something in that space and do it quickly! Don't worry about testing and code quality, it will only slow you down. You want to be the one who achieves 80% of the goal with only 20% of the effort. Doing so will impress many people and you will move ahead faster by impressing more people. Once you've delivered your first beta, be sure to drop your project like a hot potato, of course with the premise that it's "hot" in a good sense, i.e., like hot property. If you've managed perceptions well, you'll have been promoted by this point for your extremely innovative thinking and amazing productivity. Now just rinse, lather, repeat. The programmers left juggling your hot potato will curse you, but they are the meek and they will not inherit the earth. You can easily besmirch their character for having allowed your impressive results to flounder. Their complaints will just be ignored as the petty griping of those without talent and vision. Meanwhile, you're like Teflon: nothing bad sticks to you because you're busy attracting attention to the next more wonderful thing you've moved on to. That's right, you've learn the art of taking credit and giving blame; it will serve you well in your quest to be the pinnacle of success.


As you might have figured out, I don't care for Teflon Programming, I don't care for the fact that it's so easy to get ahead with that approach, and most of all, I don't care for the fact that it's bad for the clients. I've been working on EMF for a very long time, and much of that has been a struggle because, shockingly, not everyone is enamored with modeling and, worse still, most people even have negative preconceptions. Nevertheless, I intend to continue for a long time. To make it a pleasure, I make sure I create as little crap as possible, because my clients and I will have to live with both the good and the bad forever. In other words, I believe my responsibility is to ensure that my clients have something of lasting value and that they can confidently look to me to ensure that what they build today will have value well into the foreseeable future. I think many of the people at Eclipse are like me. In fact, I like to think that most of the people at Eclipse are like me. When I look at what we're doing with e4, I see what appears to be proof positive. Sure it would be easy to start with a clean slate and do something completely fresh and innovative, without regard for past mistakes or for impact on existing clients, but that would be Teflon Programming and that's not what Eclipse is all about.

9 comments:

guycole said...

Well said. I have long felt our worst problem was "fashion". Sad but true, buzzword compliance counts way more than robust implementation.

I have been doing commercial software development for 25 years. Certainly there has been great improvements, but to chase the new simply because we are bored w/the old isn't really a great practice.

But it does build a stellar career.

Michael Scharf said...

Interesting post, Ed. I think the solid work that you create is the material Teflon programmers (like me) need. Development is like a logarithmic curve, steep in the beginning and flat in the tail. You work in the flat part. Teflon programmers are in the steep part. However, without solid libraries and frameworks, Teflon programmers would have a hard time to do the steep part of the curve.

I think it is a kind of symbiosis between both species. Teflon programmers and solid developers need each other.....

If I would have to rewrite EMF, it would take me a lot of time. In one of my Teflon projects, the (Annotation driven EMF Editor), I started without EMF. But then I realized how EMF would speed my work up, because I was about to re-implement EMF.... I could have implemented EMF in the Teflon way, but I needed more than the 80%, I needed the 100% (80% of 80% is only 64%).

If you would remove all the Teflon programmers from the world, who would tell the managers and the companies that there are some guys out there that create great technology. "Look at this cool EMF stuff! It just took me a few days to do this cool application. Without EMF it would have taken me forever....".

In the project where I created the annotation driven UI we replaced 150,000 lines of MFC code with 3,500 lines of emfatic code (plus a few thousand lines of Teflon framework).

Conclusions: Teflon programmers need you! They live on your work, they eat it to grow and to shine ;-) On the other side, without Teflon programmers, who would promote a framework as complex as EMF.

Ed, maybe you should do some Teflon programming to show the capabilities of your solid work. Could be fun for you (to shine like a Teflon programmer) and I am sure many people out there will love it (well, and use it as starting point for many more Teflon projects).


But maybe being Teflon programmer or being a solid programmer is a matter of personality.

I wish I would be more of a solid programmer like you, but there is so much exciting technology out there that wants to be explored...

Ed Merks said...

Michael, you bring an interesting perspective to the picture that I hadn't considered from my personally biased perspective. There is indeed room for rapid prototyping, quick proof-of-concept work, and even quick and dirty solutions to customer problems. I think it's also true that different personality types are involved. So upon reflection, I suppose I've been unduly harsh and have not considered that even in this space, diversity has more value than I gave it credit.

I guess the really frustrating thing is that I think the Teflon programmers have a much easier time demonstrating their value. I could imagine being quite a good Teflon programmer, but if we all have are Teflon programmers, we'd not be so well off in the bigger picture.

In any case, I hope the project managers of the world reflect carefully on the fact that a diverse group of people is needed to create software and that selectively rewarding certain types of behavior in favor of others will tend to create a flock of moths all displaying that same behavior. So be sure to recognize the full panoply of behaviors that are necessary for producing software.

Michael Scharf said...

Ed, I think you are still in a very exposed position and may people recognize the value you create. But there are many silent workers that do a great job and nobody recognizes them. I know some excellent people in some eclipse projects that do all the work but the recognition goes to some other guys (like a project manager or a promoter who would say "we did..." but the "we" sounds more line "I" because nobody knows the silent-workers that are in the "we"). I think eclipse should have an silent-worker-award. But often those guys are not interested to be put into the light,actually they hate it.

They remind me of a German billionaire who does not want to be recognized as billionaire. He lives a normal and silent life in a little village. The last photo of him, publicly known is more than 20 years old. He once appeared in the to 10 list of the the richest people in Germany, but next year he totally disappeared from that list (an I am sure he did all tricks to avoid being recognized as super rich). And then there are those guys that pretend to be rich...


Worse than the Teflon-programmer is the thief-programmer, someone who appears to the outside to be the Teflon-programmer but in reality, there is a silent-worker in the background doing all the thinking and the work....

Michael Scharf said...

...and there are cases where Teflon-programmers and silent-worker live in a happy symbiosis....

Anonymous said...

Ed, it's great to see you standing up for doing The Right Thing. Of course if you're smart and have a social conscience, as you clearly do, you're not going to be rewarded by the world as well as you deserve. I suppose that's part of the bargain for keeping a good conscience: to give and not to count the cost. You have to decide whether you want to be a net giver or a net taker.

Teflon programming can only flourish for long in communities where software doesn't have to pay its way - e.g. open source and large IT organizations. (Of course good software can flourish there too.) Sadly, in companies where software has to pay its way, few managers are far-sighted enough to allow the development of anything radically new.

I've been really lucky to continue working on the same project for over 15 years: first in academia, where there is time and freedom to do something new and get it right, and since 1995 in the commercial world, where great ideas have to be turned into products that generate clear value for customers. It's probably not the most profitable way, personally or for the company, but I believe serving others by doing the right thing is an end in itself.

Good luck in your work!

James E. Ervin, IV said...

I think alot of what you said in your post goes without saying. I just seriously hope that the people at Eclipse are listening. The day e4 comes out and lets say more than 10% of existing plugins/libraries based on Eclipse break, is the day that Eclipse dies. I think that Joel on Software had a great point to that about microsoft and the need for backward compatibility.

Anyways, I found the fact that you use EMF interesting. I can't grok EMF period. I mean, I read the articles, bought the book and wanted to drink the Kool Aid and I couldn't. Am I the only one that sees EMF as a potential 'Eclipse Plugins on Rails' framework? I mean you take your model and whap, a basic (if ugly) plugin with model, view and controller code in five minutes. Isn't that what RoR is promising?

Still wouldn't EMF be better off using something like Grails (Groovy on Rails) technology? This way EMF models could be specified as in Grails/GORM as simple POGOs and the needed boilerplate could be inserted at runtime. In fact, the need for doclet tags to specify if something is to be overwritten would be rendered redundant. With proper IDE support, you might have something there.

I know this is not directly related to your blog entry (only tangentially) and I really should write my own blog entry about it, but hey it is something that has been on my chest for the past, say, nine months or so.

Ed Merks said...

Jervin, I've heard folks describe EMF as Ruby on Rails without the hype. I simply don't have a lot of time to spend on hype nor do I have the inclination. Rather than making promises, I build something solid and keeping it moving forward and that's more than enough effort.

I could certainly imagine EMF being used to generated all manner of things to target any number of languages and runtime environments. In fact, I don't have to imagine all that much with things like EMF4Net and Texo. If it makes sense to use EMF for something, I'm quite sure someone will come along and try it. I'm always interesting in helping others bring their ideas to fruition.

Anonymous said...

How can you say "Just get it done" is a wrong philosophy ?

Look at the contradictions in your text. You want quality and fast rewewal. In fact you don't know what to choose so you keep trying having both...