Why Your Development is Crazy

Your development is crazy, or at least stressed. More likely its downright insane. We are struggling to deliver applications. And we’re really smart and we work amazingly hard. Seriously – when was the last time you met more than a stray dumb programmer? We all feel dumb, but there are damn good reasons we feel that way.

I’ve written about how hard programming is, but I stumbled across more specifics when I asked a question in a specific way for a speech abstract:

What’s changed about object orientation since we thought we knew how to design objects in the days of Grady Booch’s 1991 design book and Nancy Wilkinson’s book on CRC cards?

I knew things have changed, but what blew me away was how long this list became and that every time I show it I get a few more items. I added another one this morning and there is no doubt in my mind that this list will soon exceed 50 items.

Let me clarify how I intend this list. It’s extra things we either have to explicitly think about during design and/or things that when we do not think about threaten our applications. Don’t over analyze the list right now. Just soak it in. Add in the comments if you think I missed one. Then I’ll come back in later posts to give a sentence or two about why I think each item belongs on the list since I’ve been the gatekeeper. Finally, I think there are answers emerging from this list in how we need to shift design of our applications.

First, let’s get the list (in no particular order) on the table:


1.  Parallel entities

2.  N-Tier

3.  Sheer magnitude

4.  Application code generation

5.  SOA (Service Oriented Architecture)

6.  Semantics and canonical messages

7.  Workflow

8.  Rules engines

9.  Aspect oriented programming

10.Impact of libraries

11.Property dialogs

12.Designers (Property & UI)

13.Design Patterns

14.Unit testing


16.Interfaces (contracts)

17.Multiple assemblies

18.InternalsVisibleTo attribute


20.Perf and virtual table issues




24.Partial classes

25.Partial methods

26.Extension methods

27.Lambda expressions

28.Anonymous types

29.Declarative – XAML


31.Declarative – LINQ


33.Dynamic languages


35.Unstructured data

36.Generative programming

37.Social networking


39.Reporting (filtering, authorization)



42.Attributes during programming

43.Threading/parallel processing

44.Data transfer objects

45.Visual modeling/model-driven design

46.Design for evolving architectures, maintainability and extensibility

47.Poorly written/flakey tools (especially designers)


Thanks to the user groups in Mitchell (South Dakota), South Bend (Indiana), and Fort Collins (Colorado) for their support and contributions.

3 thoughts on “Why Your Development is Crazy”

  1. Maybe add:

    Cross platform.
    Mixed languages.
    Memory/Resource management.
    Distributed systems.

    I’m unsure about suggesting source control as that might be covered in tools.

    You’ve left out a lot a “social” aspects:

    Project management.
    Documentation & communication.
    Bug reporting.
    Stress management.
    Team building.
    Conflict resolution.
    Salary/Contract negotations.
    Workplace conditions.
    Health and safety.

    Of course there are customers who use the software:

    Requirement analysis.
    Marketing, sales.

    And heck, how could I forget the ongoing training that developers need in order to keep their skills useful/marketable. There’s a dozen items just in that.

    There’s a lot more and I’m only scratching the surface. Looking up the books by Steve McConnell will spill a thousand more points.

  2. Here are a few more, and they are whoppers:

    Software factories (Jack Greenfield)
    Domain Specific Languages
    UI usability (Platt, Cooper, Krug, Van Duyne, etc.)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>