Technische Schulden

Standard

Das Thema “Technische Schulden” interessiert mich schon seit längerer Zeit. In den letzten Monaten sind einige interessante Blogartikel über dieses Thema erschienen. Grund genug, den derzeitigen Diskussionsstand in einem eigenen Blogartikel zusammenzufassen.

Was sind technische Schulden?

Ward Cunningham hat in den 90er Jahren die Metapher “Technische Schulden” (engl. Technical Debt) geprägt. In einer Videobotschaft erklärt er den Ursprung dieser Metapher.

Um einen kurzfristigen Vorteil zu bekommen, z.B. um ein Produkt schneller auf den Markt zu bringen, muss manchmal eine Entscheidung getroffen werden, die für die langfristige Entwicklung der Software nicht optimal ist. Solche Entscheidungen haben Folgen, die Ward Cunningham mit den Konsequenzen verglich, die durch Schulden entstehen.

Wenn man Schulden hat, muss man Zinsen zahlen. In der Software-Entwicklung bedeutet das, dass durch ein suboptimales Design Änderungen schwieriger sind und somit länger dauern. Der Aufwand, um neue Features einzubauen, wächst.

Um die Zinslast zu senken, kann der Schuldner einen Teil seiner Schulden zurückzahlen. Der Softwareentwickler refaktorisiert und verbessert so das Design der Software. Änderungen sollten dann einfacher sein. Der Softwareentwickler kann neue Features wieder schneller einbauen.

James Shore erzählt von einem Projekt, für das er und sein Kollege technische Schulden aufgenommen haben, um einen Demotermin auf einer Konferenz zu halten. James Shore schätzt, dass die technischen Schulden einen Zusatzaufwand von einem Monat (also “Zinsen”) für einen relativ kurzen Zeitraum von wenigen Wochen gekostet haben. Es dürfte sich gelohnt haben. Sie konnten die Demo erfolgreich präsentieren und sie haben danach ihre “Schulden” zurückgezahlt.

Ausweitung der Metapher

Die Metapher wurde im Laufe der Jahre für alle Designprobleme angewandt, sogar für solche, die “unabsichtlich” in die Software gelangten. Die Auswirkungen und die Lösung sind ja gleich.

Robert C. Martin hat vor einigen Wochen einen Blogpost geschrieben, in dem er zwischen technischen Schulden (technical debt) und “Schlamassel” (mess) unterscheidet. Ein Schlamassel ist immer eine Folge von Faulheit und Unprofessionalität, während die Entscheidung, technische Schulden zu machen, immer bewusst und nach Abwägung der Vor- und Nachteile getroffen wird.

Das Vierquadrantenmodell

Martin Fowler meint, dass es nur um eine Metapher geht und stellt die Frage, ob diese Metapher auch hilfreich ist, wenn man allgemeine Designprobleme im Programmcode hat. Er teilt die Ursache technischer Schulden in vier Quadranten ein:

  • umsichtig-überlegt (ursprüngliche Bedeutung des Begriffs “technische Schulden”)
  • umsichtig-versehentlich (“Jetzt wissen wir, was wir hätten tun sollen.”)
  • waghalsig-überlegt (“Wir haben keine Zeit für Design!”)
  • waghalsig-versehentlich (“Was heißt Layering?”)

Robert C. Martin stimmt dieser Systematik prinzipiell zu. Er gibt aber zu bedenken, dass einige, die sich eigentlich im Quadranten “waghalsig-überlegt” befinden, sich im Quadranten “umsichtig-überlegt”
wähnen könnten.

Das Vierquadrantenmodell zeigt uns also, wie gut wir unsere technischen Schulden kennen und ob die Gründe dafür gut gewählt sind.

Designen oder nicht Designen? Das ist hier die Frage.

Wie viel technische Schulden kann man aufnehmen? Martin Fowler hat dazu die Hypothese der Designwiderstandskraft (Design Stamina Hypothesis) aufgestellt. Ohne Designaktivitäten kann man zu Beginn eines Projekts tatsächlich Zeit sparen. Aber je mehr Features implementiert werden, desto langsamer lässt sich die Software weiterentwickeln. Mit gutem Design sorgt man dafür, dass die Entwicklungsgeschwindigkeit annähernd konstant bleibt. Stellt man diesen Zusammenhang in einem Diagramm dar, ergibt sich ein Punkt, an dem sich die zwei Linien treffen. Die Anzahl der im Code akkumulierten Features an diesem Punkt kann man als horizontale Linie darstellen, der sogenannten Designpayofflinie.

Bis zur Designpayofflinie können technische Schulden problemlos aufgenommen werden, darüber ist man mit dem sauberen Design besser dran. Leider lässt sich diese Hypothese nicht beweisen, aber sie erklärt, was viele Softwareentwickler beobachten.

Wie findet man heraus, wo die Designpayofflinie ist? Die Produktivität eines Software-Entwicklers lässt sich leider nicht messen und daher gibt es dazu verschiedene Ansichten. Ich teile übrigens die Meinung von Martin Fowler, dass die Linie viel niedriger ist, als viele annehmen.

Für Startups kann es besser sein, zu Beginn weniger auf das Design zu achten und technische Schulden aufzunehmen. Wichtig ist dabei, rechtzeitig die Schulden zurückzuzahlen. Kent Beck hat die Phasen eines Startups mit den Phasen beim Starten eines Flugzeugs verglichen. Er erklärt auch den Zusammenhang zwischen diesen Phasen und dem Softwaredesign.

Was also tun? Die Schulden zurückzahlen oder mit den Zinsen leben?

Es gibt zwei Möglichkeiten, mit technischen Schulden umzugehen. Man kann durch Refaktorisieren Schulden zurückzahlen oder mit den erhöhten Kosten in der Softwareentwicklung leben. Wenn sich die technischen Schulden in Code befinden, der selten geändert wird, zahlt es sich wahrscheinlich nicht aus, viel Zeit ins Refaktorisieren zu investieren.

Wenn die höheren Kosten ein Problem sind, kann es manchmal notwendig sein, diese Kosten sichtbar zu machen. Johanna Rothman hat User Stories verwendet, um die Reduktion technischer Schulden in der Iterationsplanung berücksichtigen zu können.

Was können Softwareentwickler davon lernen, wie Unternehmen mit ihren finanziellen Schulden umgehen? Steve McConell hat dazu einen interessanten Artikel geschrieben. Die Art der technischen Schulden entscheidet darüber, wie man damit umgehen sollte.

Aaron Erickson verglich den Umgang der Softwareindustrie mit technischen Schulden mit den Praktiken, die die Firma Enron für ihre Bilanzfälschungen verwendet hat.

Kritik an der Metapher

Im August 2008 fand ein Workshop über technische Schulden statt. Die Ergebnisse wurden in einem InfoQ-Artikel zusammengefasst.

Manche sehen technische Schulden als einen negativ besetzten Begriff und lenken die Aufmerksamkeit auf die positiven Aspekte des Programmcodes. Eine interessante Idee von Michael Feathers ist, den Code als Kapital bzw. Vermögen zu sehen. Chris McMahon hatte eine ähnliche Idee. Brian Marick baute diese Idee aus und verglich den Programmcode mit einem Garten, der gepflegt werden muss.

Interessant sind auch die Eigenschaften, die Teams mit niedrigen technischen Schulden auszeichnen.

Fazit

Technische Schulden sind eine Metapher für den Umgang mit Designmängel in Software. Sie zeigt, wie sich Designprobleme auswirken.

Das Vierquadrantenmodell kategorisiert die Ursachen. Anhand dieses Modells lassen sich Gründe für die Aufnahme technischer Schulden ableiten.

Es gibt Situationen, in denen die Aufnahme technischer Schulden die bessere Wahl ist. Aber man darf niemals vergessen, diese Schulden wieder zurückzuzahlen. Die Kosten der Softwareentwicklung steigen, wenn darauf vergessen wird.

Um technische Schulden zurückzuzahlen gibt es nur eine Möglichkeit: Refaktorisierung. Manchmal ist es notwendig, die Kosten der technischen Schulden sichtbar zu machen, z.B. durch Gegenüberstellung der Kosten des Refaktorisierens und der Kosten bei Beibehaltung des Status quo.

Neuere Ideen sehen den Programmcode in einem positiveren Licht. Sie lenken die Aufmerksamkeit von den Problemen darauf, dass der Programmcode einen Wert darstellt, auf den geachtet und der gepflegt
werden muss.

1,129 thoughts on “Technische Schulden

  1. wh0cd274393 [url=http://buykamagra.doctor/]buy kamagra oral jelly online[/url] [url=http://buyclonidine.doctor/]where to buy clonidine[/url] [url=http://levitraonline.doctor/]levitra[/url] [url=http://buyarimidex.doctor/]where can i buy arimidex online[/url] [url=http://buystrattera.doctor/]strattera cost[/url] [url=http://buytoradol.doctor/]buy toradol online[/url] [url=http://genericamoxicillin.doctor/]generic amoxicillin[/url] [url=http://cardura.doctor/]cardura 1 mg[/url]

  2. Hmm it appears like your website ate my first comment (it was extremely long) so I guess I’ll just sum it
    up what I submitted and say, I’m thoroughly enjoying your blog.
    I as well am an aspiring blog blogger but I’m still new to everything.
    Do you have any tips for first-time blog writers?
    I’d genuinely appreciate it.

  3. Bom dia! Eu simplesmente gostaria de oferecer-lhe
    um enorme polegares para cima para o excelente informação tem
    aqui sobre este post. Eu vou ser voltando para
    seu site para obter mais informações em breve.

  4. This is the perfect web site for anyone who hopes to find out about
    this topic. You know so much its almost tough to argue with you (not that
    I personally will need to…HaHa). You certainly put a new spin on a
    topic which has been discussed for ages. Great stuff, just
    wonderful!

  5. Pretty great post. I simply stumbled upon your blog and
    wanted to say that I have truly enjoyed surfing around
    your weblog posts. In any case I will be subscribing for your feed and I’m
    hoping you write again soon!

  6. Hi, I do believe this is an excellent website. I stumbledupon it 😉 I will
    come back once again since i have book-marked it.
    Money and freedom is the best way to change, may you be rich and continue to guide others.

  7. Hey there! This is kind of off topic but I need some help from an established blog.
    Is it difficult to set up your own blog?

    I’m not very techincal but I can figure
    things out pretty fast. I’m thinking about setting up my own but I’m not sure
    where to start. Do you have any points or suggestions?
    With thanks

  8. Attractive component to content. I simply stumbled upon your
    blog and in accession capital to claim that I get
    in fact loved account your blog posts. Any way I’ll be subscribing on your
    augment or even I achievement you get admission to consistently quickly.

  9. auto like, Auto Liker, Increase Facebook Likes, Autoliker Facebook, Status Auto Liker, Photo Liker, Autoliker, autolike, auto liker, facebook auto liker, Status Liker, Fb Autoliker, Autoliker, Auto Like, Working Auto Liker, Facebook Autoliker, autoliker, Facebook Auto Liker, Photo Auto Liker, Facebook Liker

  10. Having read this I thought it was very informative.
    I appreciate you finding the time and energy to put this information together.
    I once again find myself personally spending way too much time both reading and commenting.
    But so what, it was still worth it!

  11. My brother recommended I might like this web site. He was entirely right.
    This post truly made my day. You cann’t imagine simply how much time I
    had spent for this information! Thanks!

  12. Nice blog here! Also your website quite a bit up very fast!
    What host are you the usage of? Can I get your associate hyperlink to your host?

    I want my web site loaded up as quickly as yours lol

  13. Have you ever considered about including a little bit more than just your articles?
    I mean, what you say is valuable and all. Nevertheless think about if you added some
    great visuals or video clips to give your posts more, “pop”!
    Your content is excellent but with pics and clips, this website
    could definitely be one of the very best in its niche.
    Good blog!

  14. Just desire to say your article is as astonishing. The clarity in your post is just excellent
    and i could assume you’re an expert on this subject. Well with your permission let me to grab your
    feed to keep updated with forthcoming post. Thanks a
    million and please continue the enjoyable work.

  15. Great article! This is the kind of information that should be shared
    around the net. Shame on the seek engines for now not positioning this put up higher!
    Come on over and visit my web site . Thank you =)

  16. ปั๊มไลค์เพจ facebook, ปั้มไลค์เพจ, เพิ่มไลค์เพจ, ปั๊มไลค์เพจ, เพิ่มไลค์แฟนเพจ, ไลค์เพจ, ปั้มเพจ, ปั้มไลค์แฟนเพจ, ปั๊มไลค์เพจ, เพิ่มไลค์เพจ ราคาถูก, ปั๊มไลค์แฟนเพจ

  17. Somebody necessarily lend a hand to make severely posts I’d state.
    That is the first time I frequented your web page and to this point?
    I amazed with the research you made to create this actual put
    up extraordinary. Magnificent process!

  18. Wow, wonderful weblog structure! How long have you ever been blogging for?
    you made running a blog look easy. The total look of your website is magnificent, as well as the content!

  19. Hi! This post could not be written any better! Reading this post reminds me of my old room mate! He always kept chatting about this. I will forward this post to him. Pretty sure he will have a good read. Thank you for sharing!

  20. I’m curious to find out what blog system you have been working with? I’m having some small security problems with my latest website and I would like to find something more safeguarded. Do you have any suggestions?

  21. Wow that was unusual. I just wrote an extremely long comment but after I clicked submit my comment didn’t show up. Grrrr… well I’m not writing all that over again. Anyway, just wanted to say wonderful blog!

  22. I will right away clutch your rss as I can not find your email subscription hyperlink or e-newsletter service. Do you’ve any? Please permit me understand in order that I may just subscribe. Thanks.

  23. Excellent post. I was checking continuously this blog and I am impressed! Extremely helpful information particularly the closing section 🙂 I handle such info a lot. I used to be seeking this particular info for a very long time. Thank you and best of luck.

  24. I was wondering if you ever considered changing the structure of your site?
    Its very well written; I love what youve got to say. But maybe you could a
    little more in the way of content so people could connect with it better.
    Youve got an awful lot of text for only having one or 2 pictures.
    Maybe you could space it out better?

  25. Greetings from Los angeles! I’m bored to death at work so I decided to browse your blog on my iphone during lunch break. I really like the info you present here and can’t wait to take a look when I get home. I’m surprised at how quick your blog loaded on my mobile .. I’m not even using WIFI, just 3G .. Anyways, fantastic blog!

  26. Hmm is anyone else experiencing problems with
    the pictures on this blog loading? I’m trying to figure out if its a problem on my end or
    if it’s the blog. Any suggestions would be greatly appreciated.

  27. I really wanted to type a brief message so as to thank you for all of the magnificent tips and hints you are placing at this site. My extensive internet lookup has at the end been compensated with reliable know-how to go over with my close friends. I would state that that most of us visitors actually are truly lucky to dwell in a fabulous community with so many perfect people with useful methods. I feel quite privileged to have encountered the website and look forward to some more pleasurable times reading here. Thank you again for a lot of things.

  28. I spent four years trying EVERYTHING in Online Dating, and through a huge amount of trial and error, I produced a system that I will share for you. This book will take you, step by step, through everything you need to know to double, triple or even quadruple the number of women you meet online.

  29. I’m so happy to read this. This is the kind of manual that needs to be given and not the random misinformation that’s at the other blogs. Appreciate your sharing this best doc.

  30. I spent four years trying EVERYTHING in Online Dating, and through a huge amount of trial and error, I produced a system that I will share for you. This book will take you, step by step, through everything you need to know to double, triple or even quadruple the number of women you meet online.

  31. It is appropriate time to make some plans for the future and it is time to be happy. I’ve read this post and if I could I wish to suggest you some interesting things or advice. Perhaps you could write next articles referring to this article. I want to read even more things about it!

  32. I got this website from my buddy who informed me on the topic of this web site and
    at the moment this time I am browsing this web site and reading very informative articles or reviews at this time.