The number one trait a successful developer needs.

Every month a new programming language or methodology appears, followed by devotees singing it’s praises from every corner of the Internet. All promising increases in productivity and quality. But there is one quality that all successful developers possess. One trait that will make or break every project.

Discipline.

An undisciplined developer will not be able to ship on time and will not write code that is easy to maintain. A disciplined developer will not only enable to success of a project, but will raise the level of productivity in others. I think that a lot of software architects and developers do themselves a disservice when the attribute their success to whatever methodology they have adopted. It really boils down to how disciplined you are.

  • http://www.camthegeek.com Cam Soper

    Can you define “discipline?” There are lots of different ways to be disciplined. I might get to work every day at 9 and call that discipline. I might adhere to good coding standards and methodologies and call *that* discipline.

    So what is discipline?

  • http://www.lazycoder.com Scott

    Either one of these definitions work:
    http://dictionary.reference.com/browse/discipline

    – behavior in accord with rules of conduct; behavior and order maintained by training and control:
    – a set or system of rules and regulations.

  • http://jonrowett.com JonR

    gods, this is too relevant right now (we have a “problem developer”)

  • http://terminally-incoherent.com Luke

    This actually rings true for just about any profession in which one is expected to produce some sort of deliverables on a strict deadline, on a fairly consistent basis.

  • http://jonrowett.com JonR

    yeah, but this is also a profession in which many many hours are spent gassing (read: blogging) about what does or doesn’t make a “good developer”. sometimes we need to get back to basics with posts like this – many devs (especially the younger ones ;-) have such a high regard for themselves that they forget what they’re actually paid to turn up and do…

  • http://kohari.org/ Nate Kohari

    Am I the only one who sees the irony in comparing the name of the blog to the topic of this post? :) Not that I’m actually saying you’re lazy!

    Also, I agree completely. Discipline is important not only to hit deadlines, but also to hone one’s skills.

  • http://terminally-incoherent.com Luke

    Actually, laziness is one of the “other” traits of a good developer. Lazy coders do not want to re-invent the wheel, or re-type code segments over and over again. Educated laziness facilitates code reuse and good OO practices.

    So I guess good developers should be both lazy and disciplined at the same time. In other words, they should be deliver on the deadline, but strive to do it with the least amount of work and effort as possible.

  • http://jonrowett.com JonR

    good laziness == not implementing your own version of nhibernate every time you start a project

    bad laziness == putting lines of CSV data into a single varchar column because it’s “simpler”

    (both examples of things i’ve seen fairly recently)

  • http://www.camthegeek.com Cam Soper

    @JonR: OUCH. That hit a little close to home.

    @Luke: Ding ding ding! We have a winner!

  • http://kohari.org/ Nate Kohari

    Gotcha. Maybe a good way of putting it is: a good developer knows when inaction actually results in raised productivity.

    Very zen. :)

  • http://www.lazycoder.com Scott

    @Nate Kohari – Exactly. In my career, I’ve known when to hold off on development and wait for certain PMs to change their mind. I’ve stopped writing DAL’s almost altogether. I use NHibernate/SubSonic/ActiveRecord depending on the project. I no longer write image swapping code or cross-browser form accessors in JavaScript, I use a library. If it weren’t for lazy developers, we’d still be hoping that a stray breeze doesn’t blow our stack of punchcards off the table and out of order.

    So one example of where a lack of discipline can cause problems is when naming database columns. We have a column called “list_id” which is a PK on a table. Sometimes, in related tables the FK column is named “ListId”, sometimes it is called “list id”, and in the UI code, the label for the textbox that holds the value is called “List Value” (we have a different column in the same table called “List_Value”). A little discipline when naming the columns would have gone a long ways towards maintainability and being able to understand the code quickly.

    Proper discipline can cover up a lot of flaws in a poor methodology, but the inverse isn’t true.

  • http://www.librador.com Martin Vilcans

    True. Too many developers, especially inexperienced ones, seem to think that being clever is more important than being disciplined. I guess the best is to combine discipline with cleverness and the right kind of laziness. The worst developer is undisciplined and stupid and works very hard.

  • http://jonrowett.com JonR

    nah, the worst developer is inexperienced, undisciplined, spends all day on IM / forums / side projects, throws regular tantrums, never hits a deadline, always has an excuse, and likes to blog about how stupid all his colleagues are.

    oh, and he changes jobs alarmingly regularly.

  • http://www.lazycoder.com Scott

    Holy Crap JonR, it’s like you *know* me. :)

  • http://jwalant.soneji.googlepages.com Jwalant Natvarlal Soneji

    Well thats true, I have seen some of them and some have got on site opportunities also.
    Discipline means for me is to stick with some particular coding pattern and also to stick with ideologies related to coding.
    I like innovations but they have to proove their importance in the project or future prospects.
    But, I also seems to have many internet activities with me. And so feel inside doing wrong in my office hours.

  • Scott L

    I disagree with this. Software development is a social activity.
    People have different personalities, and they bring different
    strengths and weaknesses with them. To pick “disciplined” as
    the best is narrowminded.

    http://worsethanfailure.com/Articles/The-Cool-Cam.aspx
    http://www.randsinrepose.com/archives/2005/02/20/organics_and_mechanics.html
    http://en.wikipedia.org/wiki/Myers-Briggs

  • Pingback: Discipline Makes Strong Developers

  • Pingback: In the search for discipline « Tarvainen

  • Pingback: Discipline Makes Strong Developers - Programming

  • Pingback: Coding Horror