Will Microsoft Meet Occupational Programmer’s Needs?

Contents


Defining “Occupational Programmer

I made two posts recently that muddled serveral issues so I am creating a seperate post here to isolate them and provide a location for comments specific to this issue:

Microsoft is not meeting the needs of “Occupational Programmers.”

The first thing I should do is define the term “Occupational Programmer:

“An Occupational Programmer is one whose job is something besides programming. The programs they write are related to their main job such as streamlining tedious processes or automating labor intensive tasks. These people only spend a small percentage of their time programming.”

Professionals need Industrial Strength

Occupational programmers have significantly different needs than professional programmers or even hobbyists. Professional programmers need industrial strength developer tools. I could blather on forever defining that but I think most professional programmers know what they need as that’s what they focus all their time doing.

Hobbyists need to Learn

Hobbyist programmers main need is to learn. For them each learning experience grows on the past. Further, I would argue most hobbyist programmers are either younger (i.e. in elementary school, high school, or even college with a lot of free time on their hands) or older (i.e. retired and looking for something fun to exercise their brain.) I’m sure there are many hobbyists in between but I’d argue they are not the majority. Hobbyists goal is often to get better at programming, and I believe they are by definition both passionate about it and interested in learning in ways that occupational programmers simply are not.

Occupational Programmers need Productivity

Occupational programmers don’t have time to learn; they’ve got a real job to worry about. And occupational programmers often don’t care about learning the intricasies of programming at a professional level. Most importantly, occupational programmers don’t program frequently enough to transfer their learning from short to long term memory. Tellingly, Microsoft has a Coding4Fun website for hobbyists, but doesn’t have a Coding4Work website for occupational programmers!

Occupational Programmers need Discovery

Occupational programmers also need to be able to discover how to do things without lots of prerequisite knowledge. They need to be able to be highly productive every time the sit down to code. In that vein Microsoft’s “My” object is intuitive enough and addresses discovery.

Occupational Programmers need to Experiment

On the other hand, occupational programmers need to painlessly try things to see what works and not be distracted by lots of complexity. It is here where even Microsoft’s Express Editions fall short. They need a far simplier environment that allows them to type in a single line of code, highlight it, and then press a key to run it; no other prerequisites required. And if, for example, the code won’t run because of a missing reference the environment should pop up a suggestion based on an index of all available components on the user’s system, the occupational programmer should never be left trying to figure out where to go next to solve his problem.

In other words the occupational programmer needs a powerful interpreter but one that works more like SQL Query Analyzer than a command line interpreter. SQL Query Analyzer’s is it’s “canvas” that allows one to leave lots code lying around in various states of completion while it only executes the code that the user has currently highlighted.

Occupational Programmers need Progressive Disclosure

occupational programmers need Progressive Disclosure. They shouldn’t open up a development environment with numerous items competing for their attention. They shouldn’t have to worry about projects or properties or toolboxes, they should have a screen where they can start writing code and the equivalent of a (well designed) “Start” button and menu/wizard system.

Occupational Programmers need their Skills Grown

Additionally, the languages and tools used by occupational programmers should empower they to continually improve their skills without even trying, as they end up building significant systems over time. Some will even change careers to become full-time professional programmers eventually. If they are sandboxed with dead-end language and environment, think VBA or Visual Studio Tools for Applications, that’s no good either.

But Don’t Sandbox Occupational Programmers

And occupational programmers should be given the same languages professional developers use, but in a less-restrictive form; one potential example being a dynamic version of VB.NET with duck typing, etc. This is so professional developers can reuse and refactor the occupational programmer’s components and code. Occupational programmers have specialized knowledge that professional developers simply don’t have and putting them in two different sandboxes doesn’t make sense.

Focus on Languages and Frameworks, not GUI Tools

Further, the tool builders should focus on language and framework first, not the visual tools. Although this applies across the board for developer tools, it’s especially important to state related to occupational programmers because the tendancy is to just throw lots of GUI at less experienced developers, but that approach is fraught with peril (anyone remember Visual InterDev Design Time Controls?) I can acutally write a long post on this topic alone, and plan to, but suffice it to say that the focus should be on making it very easy to implement something in code using the language and the framework, and then create the visual tools to streamline this last.

Not Hard to Serve this HUGE Market

I believe there are tremendous number of occupational programmers out there whose needs are not being served and the irony is that I’m not proposing anything complex. On the contrary, Microsoft has partically all the technology it needs to build and ship the first version of what I’m envisioning within six months or less assuming a 3 to 5 person “SWAT team” that’s sheltered from politics (by 3 to 5 people I mean everyone; development, testing, documentation, marketing, etc.) It would be a tiny investment, and if it was released below the radar and sans Microsoft’s full hype machine it’s benefit to prospective users could be evaluated before they committing Microsoft to supporting any legacies it might create. And Microsoft could call this tool “Power Developer” (I chose that name because of PowerShell.)

There’s a lot more I could say on this issue (and I’ve said some of it in the past), but I’ll leave it at this and await your comments.

Other References

P.S. Here are some posts I made over 2.5 years ago on this and related subjects:

And these are some posts over people have made and/or posts with related comments, in no particular order:

I’m Available…

P.P.S. If any decision makers at Microsoft are listening but don’t currently have the right person on the inside to champion this idea, they should be aware that I am, at the time of this writing, available to help. :)

 

Microsoft’s Obsolete Process and Release Cycle

I made two posts recently that muddled serveral issues so I am creating a seperate post here to isolate them and provide a location for comments specific to this issue:

Microsoft is loosing the battle with its open-source competition in languages and web frameworks because of their obsolete processes and release cycles

In summary, it’s my belief that the processes and release cycle for designing, building and releasing developer tools as well as for attracting developers that worked so well in the 80’s and 90’s are now obsolute when compared to the process in use by the open-source community. Further I believe that if Microsoft doesn’t completely rethink how it manages it’s processes and release cycle for designing, building and releasing developer tools in a manner that is competitive with the open-source process that it will slip farther and farther behind until it’s developers tools become irrelevent. Of course as that happens Microsoft’s platforms will also slowly decline in relevence until it is simply no longer the main player but instead one of many.

That’s not to say they are not doing some things right, they are. But they need revolution not evolution to stay the major player in developer tools.

Can Microsoft’s Developer Division Compete Moving Forward?

I’ve been planning to blog about this for some time but just haven’t gotten to it. Well here goes…


Contents

Note: The day after I posted this I decided to add headings to make the argument easier to follow.


Is Microsoft’s Approach Failing?

I believe Microsoft legacy processes simply cannot react fast enough to the innovation happening in the open source arena on the language and web framework front. Microsoft’s developer division typically offers three-year version cycles where they first architect Visual Studio and related technologies in a vacuum. In recent years they’ve even thrown out alphas and betas to the Microsoft faithful to get feedback which, and thankfully they’ve used a lot of that feedback. But that approach just isn’t working in the market anymore. When the release cycles of
scripting languages frameworks like Ruby On Rails and Django and CMS platforms such as Drupal are sometimes as little as a few months, it’s really hard to wait around for the next version of Visual Studio.

After Ten Years; Too Little, Too Late?

It would be different if Microsoft’s developer technologies provided at least 95 percentile of what’s needed by work-a-day developers on a daily basis, but they don’t. Case in point is we still don’t have the ability to do complete URL Rewriting for ASP.NET on IIS even though Apache has had mod_rewrite for years. Looking back, how many years of massively duplicated developer effort in the field did it take befor Microsoft finally provided a login module and a method of managing site-wide templates?!? (i.e. “MasterPages”) Oh, about a decade from when they first released Active Server Pages.

Providing Solutions Frequently Just Not a Priority

It’s not just that Microsoft’s developer division takes too long to offer new solutions to recurring needs; it is that they place such low priority on providing those solutions. Three year development cycles testify to that fact, especially when you consider it takes Microsoft many releases to address fundamental needs. The guys on the product management teams at Microsoft are really smart people, but they often can’t see how much trouble they cause people in the field by their decisions. They see the world of creating Visual Studio, but they don’t see the world of using Visual Studio to develop software.

Core “Real World” Problems Not Addressed

What’s more, Microsoft architects its developer products in a vacuum; they don’t use them to solve “real world” problems. Sure, they may use them internally for developing productsbut when does the average developer’s project look like product development at Microsoft? They often create excellent software but software that either doesn’t solve real world problems or does so in a totally over-engineered manner. While running Xtras I watched many a developer launch a 3rd party component business because they had identified a need while working on a real world project. However, once they saw small success as a vendor they started developing, designing, and even envisioning new products in a vacuum. And often those products either didn’t address real world needs or did so in a really unnatural manner.

Microsoft is a much worse example of this. Their saving grace thus far has been market share and financial resources to brute force their products into the market, and many of the faithful won’t even look at other s offerings to understand why some of Microsoft’s offerings so miss the mark. I know, until recently I was one of them.

Values “Sugar”-Free Over Productivity

And Microsoft’s product managers often dismiss feature requests that would make development a LOT easier as simply being “syntactic sugar. For example, one such dismissed feature request I made years ago was for simplified property references in VB.NET. I wanted a syntax that would allow a developer to implement a single-line syntax for specifying properties you didn’t need anything special, something like:

1. Property Foo Into _Foo

Instead of nine lines of:

1. Private _Foo
2. Property Foo
3.    Get
4.       Return _Foo
5.    End Get
6.    Set(ByVal value)
7.       _Foo= value
8.    End Set
9. End Property

That would have reduced the number of lines of VB.NET code by probably half an order of magnitude. But they just weren’t interested in it because it “bloated the language and otherwise had no value” (I am paraphrasing from memory.)

Focuses on Details, NOT the Big Picture

Even more, I advocated an advanced scripting language that would be a lot like today’s “in-vogue” scripting languages. I called my proposal VBScript.NET. But then my suggestions were dismissed for esoteric reasons and I was told that Top Minds Are Working On It! (Well, evidently not, or so many developers wouldn’t be moving to PHP, Ruby, and Python.) Microsoft’s culture is to argue semantics when reality doesn’t match their world view, and they are blissfully willing to ignore the pain that continues to exist.

Revolutionary Paths Are Often Dead-Ends

What’s more, probably because of its financial resources and a hubris that comes from being the industry leader, Microsoft has a bad habit of creating huge revolutionary jumps instead of small evolutionary steps. Rather than always creating lots of little independent layers of loosely coupled components, each with it’s own independent functionality, documentation, and rationale for existence, Microsoft often builds monolithically complex solutions where the individual components are highly coupled, not documented, hidden beneath the covers, and frankly with functionality that has not been fleshed out well had it had to be developed to stand on its own. This creates bloated and fragile systems that are often extremely hard to debug and for which there is no passionate community of supporters surrounding it.

ASP.NET: Wrong Medium, Wrong Model

ASP.NET is a perfect example of many of these problems. Rather than study the web and realize it was a violently different platform than desktop apps, Microsoft chose to shoehorn an event model onto the web and use a page-oriented implementation. Not only did they get the medium wrong, they also got the model wrong. And this decision resulted in an outrageously complex pipeline processing model with tons of code that is hard to debug or even understand, and that requires lots of high end developers to figure it out and repeatedly explain to newbies what they need to do just be able to do some of the simplest things, things that are brain-dead easy in PHP for example.
But hundreds of thousands of Microsoft-centric developers just trudged along and accepted it as the next best thing because Microsoft said so. And for a short time, I was one of those true believers.

ASP.NET: Exceptional Engineering, Answers Wrong Questions

Now, however, even many Microsoft developers are starting to see ASP.NET for what it really is: An exceptionally engineering product that answers the Wrong Questions. Former ASP.NET developers are moving to the platforms I mentioned earlier (Ruby on Rails, Django, and Drupal) simply because those platforms offered developers the syntactic sugar they crave, and because the developers of those platforms focused on solving pain because the pain they were solving was their own.

Open-Source: Answering the Right Questions, Rapidly

Open-Source development by nature results in lots of little independent layers, and there are communities that sprouted or are sprouting to support each of those independent layers. Each of those layers has had an opportunity to be fleshed out, and by comparison it shows. How can something like Open-Source PHP on Apache take on mighty Microsoft’s ASP.NET and IIS, and win? Because they answer the right questions, and they did so in far less than a decade.

Is there any hope for Microsoft’s Developer Division?

Which brings me back to the original question:


Can Microsoft’s Developer Division Compete Moving Forward?

Frankly, though I really like the .NET Framework and hope I’m wrong, I’m completely skeptical.

 

Open Source Web Design Templates

The open source ethos is growing fast, and it has finally made its way to website template designs: www.oswd.org. No longer does one have to go to Template Monster or the likes and pay $40-$100 for a cool web design![1].

This guy ROCKS! His name is Francis J. Skettino and he’s from Philadelphia, Pennsylvania. Do him and the rest of the web developer world a favor and blog about him to give him lots of Google-juice (be sure to put a title in your links, something like “title=’Open Source (Free) Website Design Templates’.”)

  1. But I’ll bet the designers who upload templates get lots of consulting business enhancing those templates!

The Weborati

Just who are the “Weborati[1] you ask? And where does the term come from? Well, to answer the latter question, It’s a neologism that just made up; please don’t shoot me for it. :)

As for the former, they are people who either created – starting with Tim Berners-Lee – who have passionately shepherded the web technologies over the many years since Tim first created ENQUIRE as a side project while at CERN.
In this group I would include the original and even the active members of the W3C Technical Architecture Group (TAG) as well as the active and passionate RESTafarians which of course includes Roy T Fielding, the father of REST.

I coined the term so I could refer to them collectively. But I want to make it clear I mean no condescension; I have great respect and appreciate for these people. I just thought a catchy name would make them more memorable and easier for me to refer to them. :-)

Footnotes

  1. …as an obvious pun on the various “-oratisTechnorati, Glitterati, Cognoscenti… (are there more?)

InstallPad - It coulda been a Contenda! (and still might be…)

I came across an interesting piece of software called InstallPad via SDTimes "News on Monday" email newsletter. InstallPad is designed to download and automatically install applications on Windows machines. Relatedly, ever since I first installed FireFox I was very impressed with what a great design they had implemented in their add-on updater. I believer that InstallPad works in a similar fashion.

InstallPad might become really big…

InstallPad was developed by a recent University of Maryland graduate Phil Crosby who evidently interned for both Microsoft and IBM.

Although InstallPad is actually a pretty-simple idea I could see InstallPad become very popular very quickly. It has a viral quality to is that makes me wish I had developed it. As InstallPad can solve a problem for software developers by distributing software updates to their customers, I could see software developers motivated to distribute InstallPad for Phil. All that software developers would need to do is either include InstallPad with their software and/or point their customers to the InstallPad download page. Finding a motivated group of people who can help you succeed is the mark of a true viral strategy.

InstallPad has got all the right attributes. Phil even opened his source code on a subversion server and is asking people to contribute.

And I think he’s got that potential…

…Except!

Except for one problem. For some unknown reason (I haven’t contacted him to ask, I decided to blog it instead), Phil decided to license InstallPad for Personal Use Only! Instead of using an existing open-source license approved by the Open Source Initiative Phil decided to roll his own and disallow business use. Even though he was quite excited to be frontpaged by Digg his choice of license is going to all but neuter any chance of InstallPad becoming significant. 

Phil probably wants to reserve the right to sell InstallPad to companies as he claims he is working to form a startup. But that is exactly the wrong strategy. In order for InstallPad to be really successful it will need to have a significant percentage of the Windows user base in a given market segment, and I’d estimate that "significant" would need to be at least 30% if not more like 60% or 70% (with a caveat, in a moment.)

Why is having a large percentage of user in a segment so important? Phil needs vendors and software developers to see InstallPad as worthy of support. Because InstallPad could solve a problem for software vendors without them requiring to do much work, it could be a win-win. But only if it gains a significant user base first OR if the software vendors can distribute it for free. (that’s the caveat.) But requiring InstallPad to be purchased for commerical use eliminates the second option and creates friction that minimizes growth of the user base. Alternately, if software vendors are free to distribute Installpad, they could start making their updates available in a InstallPad-friendly format, at an InstallPad-friendly URL, and with InstallPad-friendly configuration files. That would drive InstallPad adoption and increase the number of software applications with which InstallPad would work seamlessly.

Now you could counter with "Phil doesn’t have to do anything special as it can work with existing software as-is," but the reality is there are hundreds of little gremlins that will cause InstallPad to fail and/or require an end-user of InstallPad to have to fiddle to get his app to upgrade. And each time a users has to figure out why InstallPad is not working is one more chance for them to decide InstallPad’s is not worth the trouble.

Or you could say "People can just use it to download open-source apps from SourceForge which already has a compatible Url structure." But don’t you think it’s rather ironic to have a product downloading and installing open-source that itself is not open source?  I think users will view it the same and shy away from it.  And it’s not the type of software that is likely to get a lot of contributers if it is not truly open-source.
 

The other issue Phil has to concern himself with is that the idea is not very hard to duplicate, especially since Phil offers the source code for public viewing. How long would it take an unethical person to building his own from scratch after viewing the source?  On the other hand, nobody needs to be unethical; they could just reverse engineer it. From what I saw it wouldn’t take long for a pair of professional programmers to duplicate it.  And as soon as someone creates an alternative and licenses it via an approved open-source license their new software gain a large user base much more rapidly. And Phil will be left with having had the great idea first but ultimately InstallPad will become insignificant.

So InstallPad’s greatest potential hedge against competitoon is an installed user base, and Phil should do everything possible to minimize friction to growing that installed user base.  Which means licensing freely for commercial use.

Show me the money!

But you are probably now thinking "How will Phil make money if he gives away his software for commercial use?"  Several ways:

  1. Consulting - Offer himself and/or his team up to work for corporations that want to use InstallPad but that have needs the software doesn’t currently address. Have his software and website proactively solicit for that business. If he doesn’t like the idea of doing consulting he should think about it like this: he is going to be adding features anyway, why not get someone to pay for it upfront? Most companies will be glad to pay a nice consulting fee if you solve a problem for them, especially if what they pay for gets contributed to an open-source project that they won’t have to maintain moving forward and that hopefully others will be paying to improve too.
  2. Dual-License - Just like MySQL, Phil could offer a dual license that offers "Enterprise" features for a fee. His consulting engagements in larger companies to help implement InstallPad would allow his to see the need for features that the general population does not need but that enterprises will pay handsomely to license. And by handsomely, offering at a price that would save large companies a lot on software licensing fees when compared to the offerings of companies like Altiris yet still make his company highly profitable if he keeps his costs under control. Basically he would become the classic upstart as described by The Innovator’s Dilemma.
  3. Other - Thirdly, there are the opportunities Phil won’t even know exist until after he has the asset of a large user base to leverage. It really is true; build it and they will come.

But three things above will not happen until he generates significant growth in his user base and also significant buzz. And I’m here to tell you based on my experience in dealing with thousands of software vendors over the 12 years I ran Xtras, chances of his software growing a significant user base with the current licensing model are slim to none. So he’s absolutely got to open-source it. IMHO anyway. :-)

So Phil; here’s the strategy I think you should use:

Give InstallPad a real open-source license like BSD (but ideally not GPL as it’s requirement for code contribution can cause other problems) and then focus on getting as many people to use InstallPad as possible. Further, create a set of guidelines and/or best practices that a software vendor would use to make their software optimized for InstallPad. You could even create a little graphic they can use, like the "Optimized for Windows XP" logo.

Then start with some mid-size software vendors and call on them to ask them to support InstallPad. You can find these vendors by asking everyone you know which software products are a pain to get updated. I say mid-size because you won’t get the time of day at a large computer, at least not until you have a sizable user base. And a small company’s user base is too small to really give you any leverage in exchange for your effort.  What you want to do is get companies with, say, 10,000 users or more sending out their software with InstallPad and/or sending out emails to their customers with links to download InstallPad.

You need to make it easy for software vendors to contribute "InstallPad Profiles" for their software (you may not have the concept of a InstallPad software profile yet, but you will.) You could use InstallPad to download these profiles from the vendor’s website at a location they give you and then maintain. You can then incorporate all vendor’s profiles into one configuration file which InstallPad users can download from your website or a mirror every time InstallPad runs.

And add a feature that asks your users to let you know about software they want InstallPad to upgrade but that doesn’t work, for whatever reason (i.e. files not available online, crashes during install, no hands-free install, etc.) You could even suggest they ask their vendors to support InstallPad on your behalf. There’s nothing like having a bunch of users begging for something to motivate a software vendors to do something!

If you do all this and you are diligent about "selling" the InstallPad concept to software vendors, you will soon have more users than you can handle and it will be time to find some angel funding!

Concerns about your use of Urls

Regarding the technical side of InstallPad, there are two things you should be aware of. One is a potential concern about how you are groking version numbers from Urls, and the second is an opportunity given your use of Urls:

Contact me if you’d like to know more about these issues. As an aside, I believe Url design is critically important for an optimized Web 2.0 strategy, hence my reason for launching the Well Designed Urls Initiative.
 

About these Strategies…

One of my specialties as a consultant is software and partner marketing strategies. I learned by studying and doing over the last twelve years founding and running Xtras which I have since moved on from. And I’m sorry to toot my own horn but the best evidence that I’m good was the five year period from 1994 to 1998 when I grew Xtras by over 1700% and was recognized by Inc Magazine on their Inc 500 list of fastest growing private companies in 1999 as #123 on the list. In addition, as I have immersed myself in recent trends, I’ve come to believe that some of these most effective strategies, at least within the foreseeable future, will be to leverage open-source (as if you couldn’t tell), the effects brought on by "Web 2.0," and of course, as always, partnering. Leveraging them, if done correctly, can provide hugh benefits to both customers and the companies that employ them; truly a win-win scenario.

If you are currently unsure how best to leverage open-source, Web 2.0 effects, and partnering strategies for your software and/or website, I can help you devise your marketing strategy on a short-term consulting basis. Alternately, if there is a strong enough fit for my interests, I might even consider helping on a longer term basis is there is equity involved. So if you want to create or improve your strategy, let’s talk.
 

Fixing the Vote, the right way…

Dumbold Voting Machine for The Sims

For many reasons I’ve not previously blogged about politics, nor do I intend to make it a habit. But in this case I want to address a burning issue that I believe should not be partisan-in-nature, and further that I believe the evolving processes in the tech community can uniquely solve. I am of course referring to the crisis in confidence regarding the vote counting process in the United State and open-source solutions development, respectively.

Rather than rehash the issues related to the voting crisis, let me simply reference numerous articles written by others who are much more eloquent:

Clearly if the problem is not fixed and confidence is not restored in our voting process, it could cause the entire foundation of our democracy to fail. This is an incredibly important issue, and no one but a fool would argue that ensure out election process is accountable is essential.

However, given the events of the past decade,I don’t believe the public will soon trust either politicians or corporations to solve this problem. Frankly, I think that it can only be solved by the public. And by that I mean voting machines developed with the community via an open-source process on commodity standardized hardware.

Counting votes reliability and without the potential for fraud is a thorny technical issue but I believe that the tech community has probably tackled and beat far more complex challenges. I believe an open-source voting system could be designed and developed that would make it effectively impossible to tamper with the vote, and I personally think it would be great to be involved in designing the architecture for such systems.

With that, I would like to issue a challenge to the tech and business community. Let’s:

  • Take back our democracy!
  • Pull together a group of qualified people and create an open voting machine,
  • Design and develop voting software that is 100% auditable and verifyable,
  • Design an inexpensive hardware reference platform using off-the-shelf components,
  • License the hardware and software via an open-source license so they can be widely manufactured,
  • Find people to fund a foundation, if possible, to make this thing official (though let’s not make funding a requirement), and
  • Let’s put an end to voting machine tampering and help minimize voter fraud (worldwide.)

If both software and inexpensive hardware were made available to all democratic jurisdictions and municipalities that any local company could install and service and the public is made aware of these machines so as to put pressure on elected officials to adopt them, I see little reason why the machines wouldn’t be widely adopted in relatively short order. That is except to perpetuate the ability to perpetrate election fraud.

Having open voting machines would also teach a lesson to those companies such as Diebold that did not proactively ensure we could be confident in the results of our elections. Plus it would allow jurisdictions (the world over) the ability to guarantee the integrity the vote.

With that in mind I registered the following domain and I will donate it to this initiative assuming I can find other like minded people to make open voting machines a reality:

www.openvotingmachines.org

Note that www.openvotingmachines.org just redirects to this blog post at the moment.

If you find this idea compelling, even if you don’t have the time to participate, please pass it on to your friends, relatives, and/or colleagues that you think might be interested, as applicable. And if you happen to know someone who might be interested in funding a foundation to make this happen, or provide fund for such a foundation, all the better; please forward this post on to them too.

Now I don’t know if this post will gain any traction. Maybe it will and maybe it won’t but I sure hope it does because there are few other things that could be as potentially devastating as loss of confidence in our elections. Post a comment if you want to become actively part of this initiative, and let’s get the ball rolling!

P.S. I didn’t see this post until after I had conceived of mine, but it sounds like this guy had similar thoughts although he has not made any call to action. Maybe those commenting on his post could be some of the first to join this initiative? I unfortunately don’t have the time to drive this initiative as I need to focus on generating revenue or I would pursue these people, but I wanted to put this call-to-action out into cyberspace in hopes that enough people who do have the spare time will be inspired to pursue it (OTOH, if this initiative were funded by someone, maybe I could be active in driving it?)

Monolithic Complexity vs. Lots of Little Layers

In my opinion, there two (2) approaches to software development methodologies and resultant architectures[1].

In the beginning: Monolithic Complexity

Monolithic Building

I call the first approach: "Monolithic Complexity" which I characterize by the following:

  1. Grand Visions,
  2. Marketing defines Software Architecture,
  3. Significant Development Budgets,
  4. Attempt to Eliminate Constraints,
  5. Requirement to Accommodate Infinite Future Scope,
  6. Feature Sets based on Target Customer, Price Points, and Release Schedule,
  7. Divergent and Expanding Functionality,
  8. Related Teams Worked on Most Components,
  9. Minimum Utilization of External Components,
  10. Software Comprised of Complex and Highly-Coupled Components,
  11. Most Components Built to Specifically Support Application,
  12. Data and Configuration Stored in Highly Optimized Binary Format,
  13. Brute Force Development Processes,
  14. Constantly Extended Release Dates,
  15. Installation, Operation, and Extension Requires Exactness, and
  16. Planned Upgrade Cycle.

Microsoft is a master of Monolithic Complexity. One only need to see, use, develop for, and study the history of Windows, Visual Studio, SQL Server, and Exchange to understand just how much Microsoft fits this category. However, most modern software companies emulate this same approach regardless if they do or do not execute as well as Microsoft has.

Then came: Lots of Little Layers

Lots of Little (Independent) Layers (Buildings)

Moving on, I call the second approach: "Lots of Little Layers." I characterize this software development methodology and resultant architecture by the following:

  1. Modest Visions,
  2. Developer defines Software Architecture,
  3. Little or No Development Budgets,
  4. Nothing but Constraints,
  5. Moderate Consideration of Future Scope,
  6. Feature Sets planned based on Developer’s Needs,
  7. Cohesive and Focused Functionality,
  8. Unrelated Teams Worked on Many Components,
  9. Maximum Utilization of External Components,
  10. Software Comprised of Simple and Minimally-Coupled Components,
  11. Most Components Useable in Other Contexts,
  12. Data and Configuration Stored in Poorly Optimized Text Format,
  13. Minimization of Development Effort,
  14. Frequently Released on Schedule,
  15. Installation, Operation, and Extension Accommodates Sloppiness, and,
  16. Upgrade Cycle an Artifact of Reality.

Anyone involved in software development in the past half decade will immediately recognize the latter: open-source development. Yes these include Linux, Apache, MySQL, and PHP as well as Ruby on Rails. But open source also includes software that Microsoft-centric developers probably know well including NUnit, NAnt, CruiseControl.NET, SharpDevelop, and dasBlog.

All in Life is Gray

Of course nothing in life is really black and white, and that applies here. Some open-source development follows the second approach less than others and it is inversely proportional to the extent with which the open-source project is shepherded by a corporate entity versus a passionate group of individuals.

A Uniter not a Divider

Now I’m not arguing against corporate entities in this short essay as I ran one for the previous twelve years and plan to again in the near future. Instead I am merely indicating differences and then drawing attention to the benefits of a specific aspect of the latter.

Paper covers Rock

I am writing this not to discredit commercial software companies but because I want you to see how by its very nature open-source development results in lots of little layers of software. But more importantly, I want you to understand that this approach has significant benefits. Just as scissors cut paper and rock breaks scissors, paper covers rock[2].

And finally, I want to encourage commercial software companies, especially Microsoft, to emulate this approach.

And in the future, as I have time, I plan to drill down to different aspects of the "Lots of Little Layers" approach to identify why the approach is so valuable complete with examples and counter examples. In the mean time I look forward to your comments and questions on this


1 - It has also been said there are two types of people in the world; those who believe there are two types of people in the world and those who don’t.

2 - Okay yes, I used a ternary metaphor to describe a binary choice. So sue me. ;-)