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


15.Refactoring


16.Interfaces (contracts)


17.Multiple assemblies


18.InternalsVisibleTo attribute


19.Overloads


20.Perf and virtual table issues


21.Generics


22.Reflection


23.Intellisense


24.Partial classes


25.Partial methods


26.Extension methods


27.Lambda expressions


28.Anonymous types


29.Declarative – XAML


30.WPF


31.Declarative – LINQ


32.DependencyProperties


33.Dynamic languages


34.Security


35.Unstructured data


36.Generative programming


37.Social networking


38.AJAX


39.Reporting (filtering, authorization)


40.BDD/TDD/Agile


41.ASP.NET


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.
    Feedback.
    Prototyping.
    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)
    WCF
    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>