Tuesday, May 02, 2006
« CSLA .NET community contributions | Main | Iron Architect Contest »

You might wonder what’s up. I go and stir the pot by saying that software development is too darn hard, and that TDD is overhyped (and broadly misunderstood) and then disappear from the conversations.

 

Well, so far in 2006 I completed the CSLA .NET framework (twice), finished two books, buried my last Grandmother, have been supporting my Mother through dealing with cancer (which has shut down her kidneys, so now she’s dealing with dialysis too), had the lower level of my house flood (with luck my office will be reclaimed for use late this week – at least my son has his bedroom back) and I’ve spoken at 9 events requiring travel (2 international). And things don’t look to change soon. I’m traveling 5 out of the next 7 weeks (1 international), and my Mom's chemo runs through the summer (fingers crossed).

 

In summary: I’ve been just a little busy, and blogging is comparatively quite low on the priority list. Certainly it falls below family, generating income and replacing carpets and walls.

 

It isn't that I meant to stir the pot and then disappear - but the universe decided to complicate my life in some unexpected ways. So I'm sticking my head up when I can, and I hope you understand that the frequency of my participation in any dialog is a bit restricted at the moment.

 

A while back I posted a blog entry suggesting that software is too hard. This was recently republished by Fawcette.

 

This generated a few emails from people saying that they agree; that their experience is like mine; that the process of analyzing business problems, then designing and building software to address them is fundamentally the same today as it was 15-20 years ago.

 

It has also generated some emails and comments from people who either disagree, or at least find the conclusion demoralizing or depressing.

 

Well, it was supposed to be depressing, so in that I feel quite comfortable.

 

Let’s face it. Most software basically collects data from users, stores that data and then displays the data back to the same, or other, users in a different format. This type of system is often called forms-over-data (or if you remember terminals it was screens-over-data, or if you are a web person maybe it is pages-over-data).

 

This is the software I’m saying is too darn hard. Why the hell is it so hard, does it take so much work, to create a data entry screen that dumps the data into a data store? And why can’t we just flip a switch to say we value performance over scalability, or scalability over security, or fault-tolerance over performance or whatever?

 

This is where I’m saying the Elvis/Einstein personas and our vendors have failed us.

 

In fact, I’d suggest we’re going the other way. We’re coming up with ways to further complicate the most common types of application by adding in SOA, TDD, WinFx and more.

 

Now let me be clear here. Most applications are mostly forms-over-data. Almost every application really does have some small bit of interesting complexity. In other words, out of perhaps 100 forms in an application, 1 or 2 might be more than simply forms-over-data. And of course, there are those precious few applications that are not forms-over-data, and you people working on those projects should consider yourselves truly fortunate!

 

So the problem is this: we get so wound up trying to figure out how to do that 1-2% of the application that is interesting that we complicate the hell out of the 98% that should be drop-dead trivial. We rule out tools, technologies and frameworks that could have trivialized the 98% because they can’t address the 2%. We adopt expensive methodologies to enhance productivity and/or quality because those methodologies are truly useful for that 2%. But then we apply the same ideas to the 98%, needlessly increasing the complexity and cost of something that should have taken precious little effort.

 

You can TDD/unit test/integration test until you are blue in the face. You can triple or quadruple the time and effort required to build a data entry form. And in the end you’ll still have a boring old data entry form. Worse yet, you can’t automate testing of the part that matters the most: the actual UI. The part that the user cares about typically remains untested until the users try it out themselves.

 

This is what frustrates me. See, I fully understand and support the idea that you should test the hell out of the 2% of the app that’s hard. Whether you write the tests before, during or after the development to me seems like a secondary question – but actually doing the unit and integration testing should not be optional. But I think that development of the bulk of the app, the trivial forms-over-data part, should be so automated that we don’t actually “develop” it and thus don’t need to do any sort of low-level unit testing, or probably even integration testing.

 

Again, let me be clear. It is this forms-over-data stuff that’s too hard. It is this stuff we’ve been building basically the same way for at least 20 years. Why? I don’t know.

 

This problem space isn’t that big or hard. Yet we keep rehashing it over and over and freakin’ over again. Now we’re going to rehash it with SOA and WPF, with a sprinkle of workflow just to make it really hard.

 

Given that we actually need to code forms-over-data, of course we feel the need to tell people to do unit testing. If you code it, you should test it. Since people struggle with the discipline to write the tests during or after development, TDD is helpful in that it (maybe) provides the discipline to write the tests first. But again, the key is that if you write it you must test it.

 

But what I’m saying is this: we shouldn’t code this stuff!!! Forms-over-data should be automated.

 

Scott Bellware saysSoftware development isn't too hard.  Software development is fun.  It's a challenge - of that there's no doubt.  And sometimes it's a tiger that won't be tamed.” And he’s right – at least in terms of that complex 2% of most applications. But no experienced developer is going to find forms-over-data “fun” after 15-20 years. And no amount of Extreme Agile anything is going to change the fact that what businesses mostly want is to have their computers store and regurgitate data.

 

I’m working with a client now who’s designing an application that is virtually all forms-over-data. And just like countless applications before this, more time is spent discussing the “plumbing” issues – the use of ORM, WPF, WCF, WF, ADO.NET, WinFS, ASP.NET, LINQ, Windows Forms, XHTML, Javascript, layers, tiers, patterns – than is spent discussing the business issues. You know, the whole reason for writing the damn app in the first place!

 

Trying to pull the client out of the alphabet soup of techno-babble that is today’s technology, so we can actually discuss the business needs and thus determine how to proceed is like pulling teeth. Books from people like Eric Evans and David West are great tools – if you can get people to step out of techno-land and into a productive level of discussion.

 

But then there’s that ugly 2% of the app again. Every time you talk about the truly interesting bits of the app, there’s so much worry about whether the “technology can handle it” that the conversation instantly devolves into an argument about whether the COM interop overhead in Enterprise Services will be a roadblock or some equivalent. WTF?!?

 

And worse. Even after you fight through that – continually bringing the dialog out of the murky depths of techno-babble and into a level where OOD is possible – the technical powers-that-be want to apply the complex technology needed for the complex parts of the app back into the trivial forms-over-data parts.

 

“We need consistency.” “If it can solve the hard parts, it can sure handle the easy parts.” “Someday we might need to scale higher.” “What if we want to reuse the data someday?”

 

So the forms-over-data must be written using overly complex technologies (for forms-over-data anyway). Thus it must be written by hand. Thus it must be tested. Thus it costs many times what it should have cost.

 

And the most irritating consequence? All that time and money wasted on complicating the forms-over-data reduces the amount of time and money available to address the parts of the app that are actually hard, or interesting – or fun.

 

 

Just over 20 years ago I was an intern for a summer while in college/university. The IT director told me in no uncertain terms that I was wasting my time getting a degree in Computer Science. “They’ve got this new thing called CASE” she said. “In a few years anyone will be able to program computers.”

 

Her presupposition was that CASE would actually trivialize software development to the point that “normal people” (presumably business analysts) would be able to create applications. Obviously that didn’t happen, much to my relief.

 

But it does make me wonder why there’s so much excitement around Software Factories and DSLs, since they look terribly close to CASE… Perhaps, lurking deep in the bowels of the Software Factory concept, there’s some differentiating factor that will allow it to succeed where CASE merely limped along to a slow, agonizing death.

 

I hope so. Because it seems to me that Software Factories and/or DSLs are the only area of technology active today that might address the fact that software (at least the forms-over-data majority) is too darn hard to build.

 

Maybe, just maybe, forms-over-data will be automated by some of these Software Factory ideas, so we can just slap out that 98% of the application and spend our time on the fun parts: that interesting and truly complex 2%.

 

In the meantime, I’ve got to get back to designing a 3D rotating, infinitely scalable form to enter customer data (to keep the user from losing interest in their dead-end data entry job, and in case the company quadruples in size every month for the next decade)…

Tuesday, May 02, 2006 2:16:42 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [34]  |  Tracked by:
http://www.ayende.com/Blog/2006/05/02/ThatBoringUI.aspx [Pingback]
"Tool Support for Creativity" (Commonality) [Trackback]
"Why Programming is Hard" (John Wood) [Trackback]


Tuesday, May 02, 2006 3:07:17 PM (Central Standard Time, UTC-06:00)
For what it's worth Rocky - your books, the CSLA.NET framework, its related community, and generating the CSLA objects with tools like CodeSmith have made the process a whole lot easier and a bit less monotonous.

Sorry to hear about your grandmother, and I wish the best of luck to your mother.

--Josh
--Josh
Tuesday, May 02, 2006 3:11:43 PM (Central Standard Time, UTC-06:00)
I'm hearing you Rocky. But the fact that the 98% needs coding does keep the business analysts (and other wanna-be amateurs) out of our way and so we get to keep our *Professional* jobs. The wide availability and "ease of use" of early versions of VB gave everyone the confidence to be a *programmer/developer*. The result was both positive and negative. Good applications came from it, but I would bet that more poorly built applications came from it. Where does that leave us professionals? With a bunch of burnt potential customers who are now very wary of what now looks like a rouge industry. Having tools to just automagically build 98% of an application will only exacerbate this problem. The 2% of the application that counts the most will be botched by the wanna-bes and so we end up with more burnt customers and an industry with a decaying reputation.

I don't mind coding the 98% if it keeps the weeds out of the grass.
Joe Hanna
Tuesday, May 02, 2006 4:28:31 PM (Central Standard Time, UTC-06:00)
Joe,

This reminds me of a (now somewhat infamous) TechEd panel discussion that included Billy Hollis, Jeffry Richter and myself. Jeffry was railing against tools like the wizards in Visual Studio and other VB-like productivity concepts. And against programming languages that encourage productivity and abstraction (such as VB – though C# is so VB-like that it must be iffy as well).

The reason? Exactly what you are saying. Productivity tools such as wizards, graphic designers and human-focused programming languages make our industry too accessible to “the chaff”. Harder programming languages and a lack of productivity tools are beneficial, in that only dedicated (and thus presumably good?) developers stick around.

Neither Billy nor I agreed with this perspective. Somehow Billy actually worked his “lipstick on a pig” quote into the mix, though I honestly don’t recall how it applied. But it got a good laugh :)

But seriously. Highly paid professionals in first world countries aren’t going to be building that 98% for very long. If it isn’t automated, it will simply be shipped off to cheaper labor. The fact is, that stuff doesn’t require high skill – so “professionals” aren’t really required to do it. If you or I cost too much, businesses will send it somewhere else.

Unfortunately they’ll likely send the 2% with the 98%, leaving us looking for new careers. I think the time is coming when the only way to even be allowed to do the 2% is if you can do the 98% cheaper than it can be done in India, China or whatever other country outbids those two.
Tuesday, May 02, 2006 7:30:11 PM (Central Standard Time, UTC-06:00)
Bravo Bravo!! I definitely was wondering about your silence Rocky.

First off, I think that anyone turning this into a TDD debate is missing the point. From my limited experience TDD is awesome. The problem is that the cost, perceived or real, is too high for most small development shops.

I don't agree that keeping things difficult is a good way to keep out the riff-raff. That, to me, is not too far removed from the developers who write unmaintainable code for "job security". If we could design, code and test the 98% in just 20% of our time we would have more time (and budget) to work on the interesting stuff. The stuff what would really add value to the company ... but is not required for the date-entry person to do their job. You know, the "we don't have time for that" stuff.

In many, many cases a wizard to create a datagrid and associated data entry form (using databinding) would to the job. That's icky though. We "professionals" don't want to do that. "We need more abstraction." "That won't scale." We have 25 users, but we *might* have 1000 in a couple years.

To combat rewriting the same data entry form for all 56 data entities some companies manage to find the time to create a "framework" (CSLA or otherwise). Given the options, I think this is a good thing. The problem is that all the frameworks are different (and they aren't documented very well). As a result, the company now has cut their costs by streamlining the cost of data entry forms, but each new developer has a three month ramp up time to be independently productive.

Sorry to hear about the rough start to 2006, Rocky. Best of luck the rest of the year.

-Matt
MattH
Tuesday, May 02, 2006 8:00:36 PM (Central Standard Time, UTC-06:00)
Rocky,

Yep... I remember the data dictionary and CASE discussions. It seemed to me at the time that application development evolution was a potential at the end of the mainframe years, but totally disappeared when client server arrived. Everyone was too busy "staying equal" to evolve anything... they were too busy scrambling to figure out how to do the same old thing on the new platform. Ten times worse with n-tier... you are one persistant sucker if you come out the back end EQUAL in your application development. I agree with your 98% observation... but isn't the real problem the physical requirements for n-tier (i.e. the plumbing, remoting, etc.). It seems to me that CSLA provides a fairly workable efficient solution for that 98% ... even when the 98% has to be remoted. Were you thinking something besides CSLA for that 98%. My limited experience with code generators is eventually you have to look in the black box, and from that day forward you are supporting the black box and your application. It seems your templates and cut and paste is a very workable solution... although the forum is full of avid code generator supporters.

Here is a question I have never understood: Why does Microsoft leave such a gap that you filled with CSLA? Redmond outsourcing to Minneapolis... all for the price of a book. Have they ever called to purchase CSLA? :)


I'm very sorry to hear about your grandmother and mother. I saw your dedication in your book to your grandmother... very well done.



Mike
Wednesday, May 03, 2006 2:40:00 AM (Central Standard Time, UTC-06:00)
First sorry to hear about your mother's cancer... I hope she'll recover soon to a level where life is still enjoyable...

About software is too darn hard: creating a lot of data-entry forms is repetitive, so that can be generated. The complexity isn't in that repetitiveness of the forms. It's in the details. 'If this checkbox is checked, this part of the form has to be disabled' etc. Soon the whole app is interconnected with eventhandlers and as soon as you set an entity's field to a new value all kind of things happen and no-one has an overview what happens.

I think this is mostly caused by the plumbing code that's still required to write software. An application is mostly about the implementation of the functionality that has to be performed by the application though that can only be done inside a 'house' of other software, which controls the flow, state and presentation. It's that plumbing code which makes everthing so complicated.

However, there are plumbing frameworks available for data-entry. Higher level systems like Oracle forms (it might suck in other ways, but you get the idea): the plumbing is already there, just add the functionality lines and you're done. But are these applications used for data-entry systems? Mostly, they're written in VB, .net or java or if you're really dealing with S&M people: webforms.

What you see in videogame programming for some time now is going to be common in normal software development soon I think: in the early days, videogames were programmed inside the game engine, the game code was part of the engine, it was one program. Today that's no longer the case. The engine is written by team A (or licensed from another company mostly) and the actual game is written on top of the engine, using the engine's api and scripting languages.

Today, in software development, an application is still written inside the engine: DAL/BL statemachines, they're part of the same code as the application. I think that will change, where you'll see more and more people simply purchasing/licensing an 'engine' and write the app on top of that. At least, the teams which will be succesful.
Wednesday, May 03, 2006 2:44:08 AM (Central Standard Time, UTC-06:00)
Excellent article. Please accept my deepest sympathy for your Grandmother, and all the other issues currently plaguing your life.

Isn't databinding supposed to deal with the 98% you're complaining about? The databinding wizards in VS 2005 are pretty powerful. The probably I've had with .NET databinding is that it isn't extensible enough - the slightest deviations from the simplest case require a lot of work to code.

How about Clarion?

To Joe:

Would you agree that cars should be made so hard to drive, that only someone with the skill and training of a racing-car driver could drive one? Traffic accidents be vastly reduced under such a scheme.
.
Wednesday, May 03, 2006 7:38:07 AM (Central Standard Time, UTC-06:00)
Rocky,

Question: If 98% of apps are forms driven, doesn't that mean they are better served by data centric design? If so, then CSLA ends up being applicable to only 2% of the application.

I figure CSLA application design starts with CRC, and is finalized with template (sterotype) selection. I would have a hard time being convinced that one should introduce a prior design decision per use case... i.e. which framework. Frameworks are trade offs and usually require significant learning curves. Even if you could make the case that Framework #2 could do "this" part of the application better, it has to overcome the threshold/cost of learning/maintaining two frameworks. Now I suspect you are talking about Microsoft built in functionality {not really frameworks as we use the term}. For example, the dataset is built in and we don't generally have to look into the black box on how they pull it off... we just look at interfaces and functionality.

Frans... I agree with most of what you said. I think application development still involves "coding intermixed with plumbing". That's exactly what CSLA is all about... abstracting the plumbing. We all know we aren't totally there yet when we use the phrase "extend the framework for your own needs".

I think the problem layer remains the Presentation/UI. We can package business logic in many ways and get the job done... I think CSLA is brilliant for n-tier business logic code packaging. We have already had excellent UI development tools (I challenge anyone to name something better than Powerbuilder and datawindows). I haven't seen anything to rival datawindows in n-tier land (disclaimer: haven't had a chance to work with VS 2005 much yet). It's the UI stupid... it's still a cluster ****.


Mike
Wednesday, May 03, 2006 7:47:18 AM (Central Standard Time, UTC-06:00)
Sorry to hear about your loss.

Surgery is also too darn hard but this does not allow quest for better medicine and better surgery practices to stop.

Morts are not acceptable in Medical profession or Engineering profession but are acceptable in Software profession.

One can also get cheap surgery done in other countires but most of people prefer to do it here. It is because of professionalism that doctors profess here.

Doctors maintain their certifications and update themselves with latest finds in Medicines and also at the same time, take care of their patients.

May be if we exhibit such professionalism as doctors do, business people would prefer us instead of outsourcing.


In that direction, I think that Agile Programming, TDD, OOP, CSLA is a right direction.


Frans,

I don’t think any engine will be able to solve the business problems of one’s organization.
Elvis will prefer to buy a skeleton and add blood and flesh and make it work according to business needs of their organization
Wednesday, May 03, 2006 8:49:47 AM (Central Standard Time, UTC-06:00)
Here here. About time someone said it!

More layers - for the sake of more layers, do not an architecture make.

Ideas are great. But before some "Capital A" Architect tells me that I need to do TDD, or to unit test getters, or for that matter, that I need to make objects out of something that is perfectly well modeled by typed data sets, perhaps someone can point to some sort of science that actually demonstrates return on investment of these new ideas.

Until that time, some of this stuff should stay in the R&D lab. I would be more convinced if someone could point to a well known success story when advocating a trendy technology.

Some technologies/methodologies that have worked... parallel/grid computing (google - search engine). AJAX in certain circumstances (MS Outlook OWA... then gmail, then everything else). Visual Basic 3.0 - not for nothing, but that horrible app that everyone loves to hate is the basic reason why we use Windows today (i.e. first accessible programming environment that brought together windows, mice, and databases). I am sure you can think of others. Perhaps we should focus on building on what has worked, than re-inventing the damn wheel every year with a new development method/language/architecture/etc.
Wednesday, May 03, 2006 8:59:44 AM (Central Standard Time, UTC-06:00)
Mike, it is true to some degree that those data-centric forms could be served by a data-centric application design overall. However, as others have pointed out, we all know that it isn't as simple as JUST recording data - there are validation rules and interactions that must be considered as well. Even so, I maintain that (with exceptions) the field of data-centric forms just isn't that complex.

But you are still left with the question of coming up with a good solution to data-centric forms, that really does provide for scalability and UI-independence (because the UI technologies do continue to change due to consumer/market forces). This is why CSLA remains a good answer for these forms-over-data scenarios imo.

That said, I include myself in my own criticism. While I think CSLA helps, it doesn't go far enough - at least for the 98%. I think there's too much work involved in writing much of that code, though code generation helps a lot!

But have you ever looked at your code and counted the lines that do real work? I mean real business work - implementing business code (validation, calculation, authorization, etc.)? If you discount all the "plumbing" code - opening databases, declaring fields and properties, setting up data binding, etc. what you find is that only around 4% of your lines of code have any value to the business.

So 96% of the lines of code you and I write exist for us coders, not for the business. They exist to satisfy some carnal urge to code, not to help make a profit or reduce cost for the business.

I think the secret to success in the future lies in reducing that 96%. That's just overhead or noise. When the signal-to-noise ratio is 24:1 that's not good...
Wednesday, May 03, 2006 11:12:14 AM (Central Standard Time, UTC-06:00)
Thank you.
Jonathan Allen
Wednesday, May 03, 2006 4:49:29 PM (Central Standard Time, UTC-06:00)
It seems like Ruby on Rails, which uses convention and lots of code generation to make the simple things simple, tries to address the problem Rocky identifies.
Leif Wickland
Wednesday, May 03, 2006 4:51:19 PM (Central Standard Time, UTC-06:00)
Rocky,

"But you are still left with the question of coming up with a good solution to data-centric forms, that really does provide for scalability and UI-independence (because the UI technologies do continue to change due to consumer/market forces). This is why CSLA remains a good answer for these forms-over-data scenarios imo."

Yes... exactly. I don't want TWO frameworks, therefore my ONE framework has to be able to cover the most complicated part of my application. Having a bit of overkill is workable... but the opposite of finding out your framework falls short mid-development can be a VERY expensive discovery. The simplest framework that covers my most complicated need (or anticipated need) wins. Of course, we are dealing with the Microsoft marketing machine, so we are in an environment where you have to pad quite a bit towards the "what I might need end". CSLA offers defensive driving... I'm in. Now if I can just find a client that's in. :)

I really like how honest you always are in your analysis... it's what makes you so incredibly informative for us Mort's out here. You seem to be a lot more interested in the mental jousting than winning the argument. Rare in IT/Geekdom.

I went to a Tulsa .NET user group meeting, and didn't find anyone who knew about CSLA. We need to change that. :)

Mike
Wednesday, May 03, 2006 7:59:52 PM (Central Standard Time, UTC-06:00)
It is through the mental jousting that we (or at least I) learn the most. People often characterize software development as "engineering" or "science" (I have a Computer Science degree for that matter). And I do think it has elements of those things, though I personally think there should be more emphasis on the science end than on the engineering end of the spectrum.

But software design and development are fundamentally different from those as well. Both engineering and science ultimately deal with the real, physical world. Software is not physical. It is a purely mental exercise. Oh sure, we generate some quasi-physical artifacts (code listings, screen shots, UML diagrams), but the _real_ work occurs entirely in the minds of the people involved, and in the ephemeral memory of the computers that bring the results of our imaginations to life.

This is why I love computing – there is literally nothing else in the world (save perhaps printed works of fiction and arguable some forms of abstract art) where the fantastical creations of the mind can be directly shared with the rest of the world.

Our understanding of computing, of what it truly means and enables, is (imo) in its infancy. So claiming to have the answer, or to know the best way to do anything, is hubris.

Sure I get down on the amount of work required to build the boring parts of software. And on the constant rehashing of basic concepts like remote procedure calls or other technology concepts. But only because those things drain time and resources from the truly exciting things we _could_ be doing. The future is bright, terribly exciting and even a bit scary. I think that we just need to push through a bit of stagnation to get to that future.
Wednesday, May 03, 2006 9:42:43 PM (Central Standard Time, UTC-06:00)
I view software as a combination of English and Math. English because just like well constructed sentences, software requires well constructed readable code. Math provides order... software solutions are not random, they solve problems just like math equations.

I guess a book could be considered an extension to English. Methods or classes being similar to chapters... they have a specific purpose which adds to the whole... and I certainly can vouch for the fact many of the systems I have seen had very, very bad plots. :)

Maybe we should all go take a shot at writing fiction... but then that requires imagination. I'm not sure if the IT industry beats the spontaneity out of you, or helps hone it. :)
Mike
Wednesday, May 03, 2006 11:18:26 PM (Central Standard Time, UTC-06:00)
The more I read about this Morts/TDD discussion, the more I feel that we need to go from "Morts computing" to "OTTEC".

We all know what is "morts", they are, in short, classic VBers.

What is "OTTEC" then?

Let's first talk about "Enterprise Computing" (EC). EC has been the niche of the Java platform; its sweet spot is to have at least three developers, three months development, and thirty end users -- I made the numbers up, but you got the idea.

OTT stands for, well, real simple, "One-Two-Three", which refers to "one developer, two weeks development, and three end users". Obviously, it is about small applications. Traditionally, it is the niche of "departmental computing", in which classic VB is the king.

However, in hindsight, we now know better. OTT is still enterprise computing, for the following reasons:
(a) Many OTT products (or subsystems) consist of bigger systems, and they are mission critical;
(b) An OTT will have a long lifecycle time, during which it usually grows; and even it does not, its maintenance and small enhancements will cost resources and time far more than "one-two-three".

So, OTT is OTT Enterprise Computing, hence OTTEC (or, 123 enterprise computing).

Neither classic VB nor Java can handle OTTEC. Note that I am not talking about the languages per se; I am not even talking about the platforms. I am talking about the techniques and cultures that are carried with VB and Java. To carry out OTTEC, we need C#/vb.net. It will borrow techniques from lightweight Java world (i.e. non-J2EE world), and will push those techniques to their lightweight extremes. Just to be fair to classic VB, I want to point out again that classic VB was the king of the OTT niche; as a result, classic VB carries the right culture for the sense of how "heavy" the techniques should be.

Why OTTEC is important? -- if you know the importance of classic VB in a company (regardless what Java, perl, or C/C++ people have told you), you know the importance of OTTEC; and wait, there is more. Once we can do OTTEC in .net, and apply good Enterprise Computing techniques, then, we can divide bigger projects into many OTTEC projects. Then, more than 80% of Enterprise Computing are OTTEC! Effectively, this is an extreme vision/version of Extreme Programming (Test Driven Development).

Since we are talking about XP/TDD, I should point out one thing: because OTTEC is so lightweight, although it is double "extreme" of XP, it "cuts corners" (or, “lightweightize”) on some of its "extreme" techniques. For example, in OTTEC, there is no need and no time to unit testing UI; and there is no need and time to use mock objects, since we do not do intensive framework development and the testing is relatively coarse grained -- typically, only those facade methods are unit tested, and the testing purposefully includes database access code. Therefore, mock objects are not necessary. Also, because the code in unit testing does not use mock objects; the code is more ready to be pasted in UI code. This means there is no “extra” time that is “wasted” in unit testing – in OTTEC, every minute counts.

Note that this does not mean you do not need to know mock objects. When you use frameworks, you got to run their unit tests, and so you got to know mock objects. Also, to take full advantage of the nature of open source, to be a competent user, you got to be a contributor, therefore, you got to use mock object to develop frameworks or tools.

OTTEC is flyweight XP/TDD. Note that for XPers orTDDers, it may sound paradoxical; becuase they are used to feel that they are the most agile doves; and now, here are the flies ;-)

I am trying to develop the concept "OTTEC", to make sense of nowaday's software industry. To see more, go to my blog
http://survic.blogspot.com


survic
Thursday, May 04, 2006 1:58:56 AM (Central Standard Time, UTC-06:00)
Rocky, sorry to hear about all the madness the world’s decided to throw at you all at once (why is it these things never come along at convenient times nicely spaces apart to make them easier to deal with). I hope your relatives get well soon and that things get back to normal for you. On a positive note I must say I very much enjoyed your DNRTV shows – top quality viewing that. All the best – Simon G
Simon Geering
Thursday, May 04, 2006 9:50:32 AM (Central Standard Time, UTC-06:00)
Hi Rocky

Elvis, Mort and Einstein.

I remember that when I bought you Wrox .Net Business books before Wrox went bankrupt, I have to buy 10-15 additional books (3 UML, 7 Design patterns, 2-3 Object Oriented programming)

Last year I was given an opportunity for J2EE project. Because Management though that if one can develop Industrial Strength Application using .Net. There is no reason that he can do same for J2EE and I grabbed the opportunity. These are avenues that you have opened up people with VB background.

I am sure that you have lot of stories how your book mentored people to become good Software professional.

I am curious to know that why do you have soft corner for Morts.

I can understand complains of Microsoft .I remember your comment while discussing Microsoft attitude on open source software like nunit,nant that Micosoft would have never given us .net if there was no Java. As there is no competition for Microsoft office, you hardly feel like to upgrade your office product since they have so less to offer in every version upgrade.
They would have liked to continue making billions with VB3.0 and Morts.

Do you really think that Morts use CSLA or will they give CSLA a thought? I am asking this question because I have seen lot of Elvis commenting that CSLA is a complex framework.

With advent of .net and outsourcing, there is pressure on Mort to raise themselves to the level of Elvis.
They have to not only solve the business problems but also make sure to provide maximum ROI to business in long term. This should be a mixed blessing.


Rant
I once told my J2EE friend that .Net Elvis are smarter than J2EE Elvis because we have to figure out good Enterprise practices out of Microsoft help content which is more geared towards Morts, RAD and Prototype kind of work (which has it own uses). J2EE Elvis are only exposed to good Enterprise practices.


Silver Bullet for computing
AS for finding right solution for computing, Einsteins may find the answers. Elvis will just keep them updated themselves with knowledge of all current methodologies, best practices and tools to solve the complex business problems.

I believe that every methodology is right methodology depending upon the certain factors like project duration, complexity and other factors.

I would use
1. XP for 2-3 months duration Project
2. Waterfall Methodology/ Agile Methodology with heavy focus on automated unit testing and continuous integration for 5-6 Months duration project
3. Unified Process Methodology/Iterative Prototyping/Phased Waterfall Methodology for project with duration of 1 Year or more.

What surprises me that some people don’t admit that every methodology has benefits and drawbacks and may be suitable / unsuitable for some projects,. Instead they claim that methodology/practice is totally trash or it is a silver bullet that is right for every project.

If one applies Unified Process to 2 months project and say unified process methodology is trash. To me, it is an example of bad application of Methodology


Outsourcing
Regarding 100% outsourcing, I think that still business needs a Elvis to oversee offshore development. It should be in Elvis hand to do 2% development and get done 98% boring development offshore. He can use offshore resources as code generators. I know for a fact, a project was outsourced with out any Elvis overseeing. They simply produced lemons for the millions they were given. Nobody came to know initially. Once they were asked to make enhancement or changes, problems started to crop up. Then Elvis were brought onsite for help and told that management that how bad application is written and how difficult it is to maintain. Project was brought onsite and is being rewritten .So much of cost saving

More worrisome factor (imo) is the fact that few students are enrolling in computer science and reluctance of business houses to hire fresh graduate from colleges. Very soon we will have a system which will produce very few new Einsteins and Elvis
Thursday, May 04, 2006 8:34:15 PM (Central Standard Time, UTC-06:00)
Vikas:

I agree with you saying that a 2-3 months project is the sweet spot for XP, which was getting popular within lightweight java niche (which is not "entity bean J2EE" though; "entity bean J2EE" typically corresponds to UP). I guess we could say it is "Elvis".

However, I would say that a typical classic VB project is less than 2-3 months. So, we need a concept for project even lighter than XP. I guess we could say it is "Mort".

For "Einstein", that is C/C++, of course.

I’ve just realized that my career is from "Einstein" to "Elvis" and to "Mort". My goodness! Is the next step using VBA-equiv. with a "game engine" which is written offshore?

I do not believe that future, though. I agree with you, and not agree with Frans, enterprise computing require flexibility, it cannot be done via “game engine” approach. Another way to look it, comparing with classic C/C++, the modern Java and .net platforms are themselves a flexible “game engine”.

The key of “Mort” is that it can compete with off-shoring and “game-engine configuring/scripting” (or a combination of both) head-on: to off-shoring, you need detailed spec; however, “Mort” can get the whole thing done during the “spec” timeframe. The same thing happens to “game engine” – you need to “configure” or “scripting” an “engine”; however, “Mort” can finish it earlier than the “configuring” or “scripting”.

However, to do that, while keeping the key spirit of extreme agility, “Mort” must give up those classic VB habits, in TDD terms, “smells”. For example, no logging, mix UI with business logic, no “transaction” concept, or, handle transactions in ad hoc ways, no authorization concept, or, handle authorization in ad hoc ways, and no automated (“pretty-high-level”) unit testing. Without giving up those “smells”, the career of “Mort” will end with VB6. This is indeed the implication of .net, off-shoring simply makes it faster and more sudden and possibly disruptive (let's hope it will not, if we "Morts" do it right).

survic http://survic.blogspot.com


Friday, May 05, 2006 8:51:28 AM (Central Standard Time, UTC-06:00)
I think it is dangerous to closely link "Mort" with VB. "Mort" existed long before VB ever appeared. Almost all COBOL and RPG programmers, and a great many FORTRAN programmers were Mort. A non-trivial number of Powerbuilder and SQL Windows programmers were Mort.

The fact is, people who view programming as a job. Who work for a company to use that company's computing resources to address business problems are Mort.

To me, the big diffentiation between Mort and the two E's is what happens when the person goes home after work. Certainly Einstien never leaves work - chasing down null pointer memory issues is all-consuming :) Though on a serious note, both Elvis and Einstien tend to go home and read computer magazines/books and do more programming. Programming is life. Mort tends to go home and play with the kids. Mort's are Boy Scout troup leaders, are active in community and/or church, etc. All that time spent in the "real world" distracts from their ability to be super-programmers, but then perhaps their quality of life is higher overall? :)

My point about software being too hard is that business programmers shouldn't have to deal with "smells" because the tools, frameworks and environments used to build business software should fix the problem. Logging? Built in. Transactions? Automatic.

That's what I mean by software is too hard. The level of variation between one business system and the next really isn't that high. We make it harder by arbitrarily deciding to use Enterprise Services for project A, ADO.NET transactions for project B and System.Transactions for project C. We debate endlessly over ease-of-coding vs performance vs transactional-safety. But honestly, we probably should have just used Enterprise Services and bought a bigger computer - that would have been cheaper.

Better yet, WE shouldn't have to use System.Transactions. That should be abstracted into a tool or framework. The most we should do is indicate that we want transactional protection - the rest just works.

The same with logging, security and so forth.

If our tools provided clear, logical and useful "homes" for UI code and validation and calculations and authorization then that layering (which we all agree is required) would happen more often than not. Today the "home" for validation logic is behind events in the UI - and that just sucks. But that's not really Mort's fault.

Mort has a job to do and needs to get it done fast. Both because they need to meet business needs, and because they have a real life. If it takes 1.5 to 3 times as long to build a "business layer" as opposed to double-clicking a control and writing some code, then guess what happens?

But suppose there was a clear, natural home for that business logic - IN THE TOOLS. So when the developer goes to create the validation logic it is very clear where it goes and how it works. And that place is in a reusable business layer - but the developer doesn't really care about that, just that there was a clear home and an easy way to write that code.

THAT is what I think should be happening. THAT is what I want our vendors to provide.

Honestly I think this can be done with tools - like Visual Studio - and still allowing us to use C# or VB. But failing that, it may be the case that we need a different tool/language that is more directly focused on business development. Let's face it, business development is fundamentally different from framework (or "game engine") development. The requirements are different, the goals are different, the approach is different.

VB and C# today are the same language. And they are focused on framework creation more than business application creation. C# was created to build .NET. VB changed to match C#. While I supported (and still support) that change in VB, I sometimes wonder if it was smart. Because what it means is that Micosoft no longer has a business-focused language/tool. We are mis-using a framework-building toolkit to create business applications. No wonder it is too hard...
Friday, May 05, 2006 9:23:44 PM (Central Standard Time, UTC-06:00)
"To me, the big diffentiation between Mort and the two E's is what happens when the person goes home after work. Certainly Einstien never leaves work - chasing down null pointer memory issues is all-consuming"

Hey.. call Jeff Foxworthy... "You might be an E if you....". :)

Mike
Saturday, May 06, 2006 1:46:49 AM (Central Standard Time, UTC-06:00)
Imagine CSLA can be the open-source (or "source-available")“game-engine”

1. >>“We probably should have just used Enterprise Services and bought a bigger computer - that would have been cheaper.”

---- Perhaps not even need “a bigger computer” – How about make CSLA to abstract tx further -- combine all those things into the COM+ style?


2. >>“Honestly I think this can be done with tools - like Visual Studio - and still allowing us to use C# or VB.”
---- How about finding ways to “integrate” CSLA “into” Visual Studio?


3. >>“But failing that, it may be the case that we need a different tool/language that is more directly focused on business development.”
---- How about introducing a “small language” into CSLA. Here is an example -- those validation rules -- we need a tool to translate them into javascript. I am thinking, if we can define a subset of C#/VB.net and javascript, and we write the validation rules only using such a subset. Because it is a common denominator, the translation can be accurate and totally automatic.


Sunday, May 07, 2006 10:28:35 AM (Central Standard Time, UTC-06:00)
My wishlist for CSLA 3.0

:) Okay , I promise that I will not give any mort or myself hard time again at my workplace.

I am very glad to see that our views are same on game engine vs. framework.

When I said that developers would prefer skeleton, I meant a framework which provides logging, transaction, security, database connections while developers focus on writing software to solve business problems

I can see CSLA3.0 in making with strong smell of service orientation.

We plug a framework with out IDE .Framework provides all the plumbing for logging, transaction, database connections, security etc. We double click and write the 2% code. The code can be encapsulated and published as a component or service to a central repository. Repository contains the all information for internal and vendor‘s services or components. Business Analyst can use these components for a workflow type of application with out any assistance from developer (BPM).

Is it doable or science fiction for now? Hope that I am not asking for too much for my 50$. ?
Monday, May 08, 2006 11:23:27 AM (Central Standard Time, UTC-06:00)
Continuing the mental jousting....

Is OO 1) more compelling for business logic 2) more compelling for plumbing 3) equal?

If 98% of apps are "forms-over-data", then they have to be considered more data-centric rather than behavior-centric... UNLESS... the plumbing behavior is just as complelling... which puts OO back in the contest for the 98% of the application.

IMO, in our current .NET plumbing environment... it's the need for remoting, or providing for the potential need of remoting, that makes CSLA mobile objects compelling... more so than the need for OO on that 2% of the application.

Just a bit of jousting.
Mike
Monday, May 08, 2006 2:34:58 PM (Central Standard Time, UTC-06:00)
If you carry it to the extreme, where truly "everything is an object" you could envision some interesting things. If every field of data is its own object (with its own behaviors), then what we think of today as "business objects" would merely exist to add cross-field behaviors to existing field objects. Things like collections would merely exist to add cross-object behaviors to existing business objects. Etc.

David West kind of talks about this in his Object Thinking book. The problem with carrying things this far (or as far as West does even) is that you lose data binding and other RAD support from VS. Precious few of us (Mort or not) are willing to give up the RAD tools, and so we don't carry OO as far as we could (should?).

So to answer your question Mike, I think that carrying OO far enough means it applies directly to the business logic. But since we don't choose to go that far, so as to remain within the capabilities of our dev tools, it could be argued that OO has more value around the plumbing than the business logic.

However, I reject even that argument. I think that there's tremendous value in behavioral- or responsibility-driven OO design in terms of increasing the maintainability (and thus decreasing the cost) of applications. The key, I think, is that focusing on behaviors reduces our unhealthy fixation on code reuse. And that fixation on code reuse is the source of many of the problems in software today.

While reuse is admirable, it leads directly to fragility. Fragility leads to complex maintenance, which leads to higher costs, which leads to frustration, which leads to anger, which leads to hate, which (of course) leads to the Dark Side. So you see, only Sith seek reuse ;)

But seriously, reuse is problematic. As soon as your code (procedure/module/object/service/whatever) is expected to serve two or more different needs you are in trouble. UNLESS the identity/responsibility/behavior of that code retains its integrity. In other words, you can NOT allow new callers to require that you change your code, unless that change DIRECTLY serves the code's pre-existing responsibility. And even then you'll likely break existing callers.

This isn't really an OO thing - as I note, it was the downfall of procedural programming, and will most likely be the downfall of SOA as well...
Tuesday, May 09, 2006 8:52:28 AM (Central Standard Time, UTC-06:00)
I agree with Rocky’s post. But I thought that SOA is more tied to fate of OOP than procedural language

SOA – Good, Bad and Ugly

Good
I thought SOA empowered by Behavioral Designed OO programmed business objects is the nirvana that we, Software professionals are seeking. It is aimed at cutting cross enterprise duplicate efforts. SOA is evolution of component ,EAI or workflow applications to next level.

Bad
SOA empowered by procedural programming.
It is aimed at getting the job done and go home and have a life.

Ugly
SOA = Web Services.
Taking a huge performance hit in an application (between BLL and DLL) when none required
Saturday, May 13, 2006 1:50:01 PM (Central Standard Time, UTC-06:00)
All excellent views.

VS 2005 has helped in this manner along side with Atlas.

Atlas helps make creating the UI easier to do by wrapping sections of the page up with UpdatePanels, etc...

The ObjectDataSource has also helped greatly with the ability to attach the forms to the business logic layer. This ObjectDataSource is quite incredible (although it lacks in creating very complex forms).

The 'FormView' control has also greatly helped in the mundane aspects of a form - simple drag it the form, attach your ObjectDataSource to the form with the BLL and you have 2-way binding.

This is all what makes creating these forms simplier. Now, if we could get VS to provide more graphical UI creation of complex stored procs and I'd be happy :)

I personally think the 'hardest' part is changing requirements midstream by customers.
Steve
Saturday, May 13, 2006 2:05:37 PM (Central Standard Time, UTC-06:00)
Leif Wickland: Ruby on Rails works fine for the simplest things. But after it generates, you still have to goto some sort of 'scripting' in the UI to do anything complex.

If you look at the VS 2005 formview -> objectdatasource ->typed DS/table adapter model you'll see that you can generate the same thing Ruby generates with drag-n-drop with no code.
Steve
Saturday, May 13, 2006 2:08:42 PM (Central Standard Time, UTC-06:00)
Last comment - I've never used CSLA, I came here to learn about it - but I find it hard to understand what CSLA and how it will help me.

Please show code examples and give more examples :)
Steve
Monday, May 15, 2006 12:41:50 PM (Central Standard Time, UTC-06:00)
Thanks Steve - you can find information specific to CSLA .NET on www.lhotka.net/cslanet and in my books and on the forum at http://forums.lhotka.net.
Monday, May 15, 2006 8:21:17 PM (Central Standard Time, UTC-06:00)
>> Again, let me be clear. It is this forms-over-data stuff that’s too hard. It is this stuff we’ve been building basically the same way for at least 20 years. Why? I don’t know.

No kidding. If you're a Microsoft it doesn't help that Microsoft has been feeding us crap and inconsistent databinding schemes since days primordial.

But isn't this the kind of problem that a framework like CSLA should be able to fix? The 90% case IMHO is:

Simple DataBinding (Fields to Control properties)
List Binding
Data Validation at point of Entry
CRUD

Out of the box (in .NET 2.0 WinForms) Microsoft provides decent functionality for 1.5 (List binding and Simple Binding) out of the four. ASP.NET none at all ...

As it stands we keep reinventing the wheel for these technologies for every freaking release that Microsoft comes out with because they just don't get those basic 4 building blocks that are the 90% scenario...

Sunday, June 04, 2006 10:12:30 PM (Central Standard Time, UTC-06:00)
I came across your article as a nice surprise on the last page of one of the trade rags, and I must say, I really did enjoy reading it. You really nailed one of the key problems facing us developers today, thanks for an enjoyable, if unexpected, read!
Tuesday, June 06, 2006 11:04:37 AM (Central Standard Time, UTC-06:00)
Re: the unhealthy fixation with code re-use:

- yea, brother.

Designing, writing & promoting code within the enterprise that is designed for re-use: Dog Bites Man, happens every day. Actually going back & re-using code that had been designed for re-use, written by someone else, more than 12 months earlier : Man Bites Dog, stop the presses!

Oh, yeah, and Rocky : (and I say this as an early reader of VB6 Business Objects) I hereby formally welcome you to the GOP (Grumpy Old Programmers) club. I knew you would make it eventually. ;~)
Comments are closed.