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.