Sunday, March 11, 2007
« Paul Sheriff's Inner Circle (updated and... | Main | Is Computer Science dead? »

As I’ve mentioned before, my mother is battling cancer. Due to this, I’ve spent more time in hospitals over the past few months than I have in my life before now. And in so doing, I’ve drawn some scary conclusions about where our industry may be headed.

When I got into the industry 20 years ago (yes, it’s true…), it was quite realistic to think that a hot-shot programmer could be an expert in everything they touched.

In my case, I got hired to write software on a DEC VAX using VAX Basic. Now, I was a dyed in the wool Pascal fanatic, and the idea of using “Basic” was abhorrent to me. But not as abhorrent as not having a job (this was during the Reagan-era recession after all), and besides, I loved the VAX and this was a VAX job.

What I learned, was that VAX Basic wasn’t “Basic” at all. It was a hybrid between FORTRAN (the native VAX language) and Pascal. A couple months later, I was an expert at, not only the VMS operating system, but at this new language as well. It was my sixth programming language, and after a while learning a new language just isn’t that hard.

My point is this: as a junior (though dedicated) programmer, I knew pretty much everything about my operating system and programming language. For that matter, I was versed in the assembly language for the platform too, though I didn’t need to use it.

Fast-forward 8 years to 1995: the beginning of the end. In 1995 it was still possible for a dedicated programmer to know virtually everything about their platform and language. I’d fortunately anticipated the fall of OpenVMS some years earlier, and had hitched my wagon to Windows NT and Visual Basic. Windows NT was, and is, at its core, the same as OpenVMS (same threading, same virtual memory, etc.) and so it wasn’t as big a shift as it could have been. The bigger shift was from linear/procedural programming to event-driven/procedural programming…

But, in 1995 it was quite realistic to know the ins and outs of VB 3.0, and to fully understand the workings of Windows NT (especially if you read Helen Custer’s excellent book). The world hadn’t changed in any substantive way, at least on the surface, from 1987.

Beneath the surface the changes were happening however. Remote OLE Automation arrived with VB 4.0, rapidly followed by real DCOM. SQL Server appeared on the scene, offering an affordable RDBMS and rapidly spreading the use of that technology.

(Note that I’d already worked with Oracle at this point, but its adoption was restrained by its cost. Regardless of the relative technical merits of SQL Server, its price point was an agent for change.)

And, of course, the HTTP/WAIS/Gopher battle was resolved, with HTTP the only protocol left standing. Not that anyone really cared a lot in 1995, but the seeds were there.

Now step forward just 3 years, to 1998. Already, in 1998 it was becoming difficult for even a dedicated developer to be an expert in everything they used. Relational databases, distributed programming technologies, multiple programming languages per application, the rapidly changing and unreliable HTML and related technologies. And at the same time, it isn’t like Windows GUI development went away or even stood still either.

Also at this time we started to see the rise of frameworks. COM was the primary instigator – at least in the Microsoft space. The face that there was a common convention for interaction meant that it was possible for people to create frameworks – for development, or to provide pre-built application functionality at a higher level. And those frameworks could be used by many languages and in many settings.

I smile at this point, because OpenVMS had a standardized integration scheme in 1987 – a concept that was lost for a few years until it was reborn in another form through COM. What comes around, goes around.

The thing is, these frameworks were beneficial. At the same time, they were yet another thing to learn. The surface area of technology a developer was expected to know now included everything about their platform and programming tools, and one or more frameworks that they might be using.

Still, if you were willing to forego having friends, family or a real life, it was technically possible to be an expert in all these things. Most of us started selecting subsets though, focusing our expertise on certain platforms, tools and technologies and struggling to balance even that against something resembling a “normal life”.

Now come forward to today. What began in 1995 has continued through to today, and we're on the cusp of some new changes that add even more complexity.

Every single piece of our world has grown. The Vista operating system is now so complex that it isn’t realistic to understand the entire platform – especially when we’re expected to also know Windows XP and Server 2003 and probably still Windows 2000.

For many of us, the .NET Framework has replaced the operating system as a point of focus. Who cares about Windows when I’ve got .NET. But the .NET Framework is now well over 10,000 classes and some totally insane number of methods and properties. It is impractical to be an expert on all of .NET.

Below the operating system and .NET, the hardware is undergoing the first meaningful change in 20 years: from single processor to multiple processors and/or cores. Yes, I know multiprocessor boxes have been around forever – our VAX was dual CPU in 1989. But we are now looking at desktop computers having dual core standard. Quad core within a couple years.

(I know most people went from 16 to 32 bits – but the VAX was 32 bit when I started, and 64 bit when I moved to Windows, so I can’t get too excited over how many bits are in a C language int. After you've gone back and forth on the bit count a couple times it doesn't seem so important.)

But this dual/quad processor hardware isn’t uniform. Dual processor means separate L1/L2 caches. Dual core means separate L1, but sometimes combined L2 caches. AMD is working on a CPU with a shared L3 cache. And this actually matters in terms of how we write software! Write your software wrong, and it will run slower rather than faster, thanks to cache and/or memory contention.

(This sort of thing, btw, is why understanding the actual OS is so important too. The paging model used by OpenVMS and Windows can have a tremendous positive or negative impact on your application’s performance if you are looping through arrays or collections in certain ways. Of course Vista changes this somewhat, so yet again we see expansion in what we need to know to be effective…)

At least now we only have one real programming language: VB/C# (plus or minus semi-colons), though that language keeps expanding. In .NET 2.0 we got generics, in 3.5 there’s a whole set of functional language additions to support LINQ. And I’m not even mentioning all the little tweaky additions that have been added here and there – like custom events in VB or anonymous delegates in C#.

And how many of us know the .NET “assembly language”: CIL? I could code in the VMS macro assembly language, but personally I struggle to read anything beyond the simplest CIL…

I could belabor the point, but I won’t. Technology staples like SQL Server have grown immensely. Numerous widely used frameworks and tools have come and gone and morphed and changed (Commerce Server, SharePoint, Biztalk, etc).

The point is that today it is impossible for a developer to be an expert in everything they need to use when building many applications.

As I mentioned at the beginning, I’ve been spending a lot of time in hospitals. And so I’ve interacted with a lot of nurses and doctors. And it is scary. Very, very scary.

Why?

Because they are all so specialized that they can’t actually care for their patients. As a patient, if you don’t keep track of what all the specialists say and try to do to you, you can die. An oncologist may prescribe treatment A, while the gastro-intestinal specialist prescribes treatment B. And they may conflict.

Now in that simple case, the specialists might (might!) have collaborated. But if you are seriously ill, you can easily have 4-8 specialists prescribing treatments for various subsystems of your body. And the odds of conflict is very high!

In short, the consumer (patient) is forced to become their own general physician or risk serious injury or death at the hands of the well-meaning, but incredibly-specialized physicians surrounding them.

And I think this is where our industry is headed.

I know people who are building their entire career by specializing on TFS, or on SharePoint Server, or on SQL Server BI technologies, or Biztalk. And I don’t blame them for a second, because there’s an increasing market demand for people who have real understanding of each of these technologies. And if you want to be a real expert, you need to give up any pretense of expertise in other areas.

The same is true with the Windows/Web bifurcation. And now WPF is coming on the scene, so I suppose that’s a “trifurcation”? (apparently that’s a real word, because the spell checker didn’t barf!)

What amazes me is that this insane explosion in complexity has occurred, and yet most of my customers still want basically the same thing: to have an application that collects and processes data, generates some reports and doesn’t crash.

But I don’t think this trend is reversible.

I do wonder what the original OO people think. You know, the ones who coined the “software crisis” phrase 20 or so years ago? Back then there was no real crisis – at least not compared to today…

So what does this mean for us and our industry?

It is an incredible shift for an industry that is entirely built on generalists. Companies are used to treating developers like interchangeable cogs. We know that’s bad, but soon they will know it too! They’ll know it because they’ll need a bigger staff, and one that has more idle time per person, to accomplish things a single developer might have done in the past.

Consulting companies are built on utilization models that pre-suppose a consultant can fill many roles, and can handle many technology situations. More specialization means lower utilization (and more travel), which can only result in higher hourly rates.

Envision a computer industry that works like the medical industry. “Developers” employed in corporate settings become general practitioners: people who know a little about a lot, and pretty much nothing about anything. Their role is primarily to take a guess about the issue and refer the customer to a specialist.

These specialists are almost always consultants. But those consultants have comparatively low utilization. They focus on some subset of technology, allowing them to have expertise, but they’re largely ignorant of the surrounding technologies. Because their utilization is low, they are hopping from client to client, never focused entirely an any one – this reduces their efficiency. Yet they are experts, and they are in demand, so they command a high hourly rate – gotta balance the lower hours somehow to get the same annual income…

Many projects require multiple specialists, and the consumer is the only one who knows what all is going on. Hopefully that “general practitioner” role can help – but that’s not the case in the medical profession. So we can extrapolate that in many cases it is the end consumer, the real customer, that must become tech-savvy enough to coordinate all these specialists as they accidentally conflict with each other.

Maybe, just maybe, we can head this off somewhat. Maybe, unlike in the medical industry, we can develop generalists as a formal role. Not that they can directly contribute much to the effort, but at least the people in this role can effectively coordinate the specialists that do the actual work.

Just think. If each cancer patient had a dedicated general practitioner focused on coordinating the efforts of the various specialists, how much better would the results be? Of course, there’s that whole issue of paying for such a dedicated coordinator – somehow who’s continuing education and skills would have to be extraordinary…

Then again, maybe I’m just being overly gloomy and doomy. Maybe we’ll rebel against the current ridiculous increases in complexity. Maybe we’ll wake up one day and say “Enough! Take this complexity and shove it!”

Sunday, March 11, 2007 12:01:25 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [20]  | 

Sunday, March 11, 2007 6:31:30 AM (Central Standard Time, UTC-06:00)
As usual, a well written and thought provoking piece...

"Not that they can directly contribute much to the effort, but at least the people in this role can effectively coordinate the specialists that do the actual work."

That being said, I thought architects were somewhat responsible for being 'across' everything, i.e. at least superficially familiar with all of the technologies at play in a given solution. Of course, the term architect is often nebulous at best so what I consider to constitute that role may be a little different to someone else's view.

Daniel
Sunday, March 11, 2007 8:47:37 AM (Central Standard Time, UTC-06:00)
Great post, Rocky.

BTW, I think you're describing what the medical folks call a "Hospitalist".

http://en.wikipedia.org/wiki/Hospital_medicine

Sunday, March 11, 2007 9:09:05 AM (Central Standard Time, UTC-06:00)
I agree with you, and as you mentioned, nearly all of the server products coming out of Microsoft are making the situation worse. I cringe at the thought of even installing Sharepoint, TFS, BizTalk, etc. let alone learning the ins and outs of each one, not to mention the inevitable way that they all "play" together in some fashion.

Sunday, March 11, 2007 1:16:15 PM (Central Standard Time, UTC-06:00)
http://dotmad.blogspot.com/2007/03/family-doctor-is-good-enough-for-me.html
Sunday, March 11, 2007 2:51:01 PM (Central Standard Time, UTC-06:00)
If we redesigned it today with a small team or really bright and widely experienced people would we get what exists today.

I think not.

We'd have a simpler and more powerful system that a lot of people could grok pretty well.

The specialist road is now created by people who lack general experience and just make it worse.

This road is wrong and I'm pretty sure it will be destroyed. Now if the language / server / standards people effectively aimed to simplify they might become part of the solution (not part of the problem).
Sunday, March 11, 2007 2:54:37 PM (Central Standard Time, UTC-06:00)
This is sort of a dismal post and I wish there was something I could disagree with. But I can't disagree with a word. I've been hitting the cracking point recently with 3.0 where I can't even come close to being good at more than a few things. Even coasting in areas you already know well isn't possible any more. If you aren't willing to work your butt off, you can't even come close to making it.

I guess the old adage that "Your job is *supposed* to be hard" is becomming inevitably true in our field.
Sunday, March 11, 2007 9:03:00 PM (Central Standard Time, UTC-06:00)
Hang in there Rocky... Sounds like you need a brush of optimism here.

The key is in being willing to do what it takes to succeed. In the words of the honerable Vince Lombardi, "Success is like anything worthwhile. It has a price. You have to pay the price to win and you have to pay the price to get to the point where success is possible. Most important, you must pay the price to stay there."

What Lombardi leaves out is the key of knowing what the formula for success is. And I'll give you a hint - it doesn't involve wishing or hoping, it involves knowledgable, skilled thinkers. Lombardi was successful because he could combine winning strategy AND motivation to achieve success.

What you have identified is simply the need to change the formula for how large projects are built. You're right in that you can't put the design on one person's shoulders, but it would be wrong to say it's not possible to be successful with large projects(and I know that's not what you're saying). The question I have is this: Is it now more difficult to FIND the solution, or to SELL the solution to the stakeholders and management that approve the project?
Chris Cichocki
Monday, March 12, 2007 1:58:30 AM (Central Standard Time, UTC-06:00)
Rocky,
Thank you for your work. You are a wonderful inspiration, your dedication to our field is unshakeable and your willingness to articulate your evolution of thought is tremendously gracious and open of you. So many “leaders” in our nation today are concerned about the “appearance” of valid relevant analysis, that they sometimes allow “appearance” to supersede tough, meaningful progression. Your right on with your train of thought, and, like global warming, it’s not too late. Here is my feedback to your commentary, hopefully in as meaningful and candid a response as your post deserves:
How could any of us expect to keep up with a company that can afford to invest billions in R&D. I agree, it’s just not possible. So, what's the crisis really about? Well, you can't fault Microsoft in continuing to evolve the .NET platform because so many organizations continue to select Windows as their platform; both desktop and server. The more customers that select the platform, the more solutions Microsoft is held accountable for. I would suggest to you Rocky, that there is a very real and direct solution to the problem you’re illuminating.
In the past and currently, if you cannot live, breath and thrive in trial and error you have no hope of succeeding in our world. As you said, the days of old where a single person could wrap their hands around the technology end-to-end is now impossible, and I suggest it’s only impossible if we as developers are required to keep our skills current similarly to the days of old. A huge shift could occur if the same level of effort Microsoft demonstrates in evolving their platform is also proportionally spent on revolutionizing their documentation and training strategy. An obvious strategy that I’ve seen with Microsoft is in its control and access to meaningful information that helps professionals create great applications (i.e. if I pay money I get information faster). One suggestion -- this control should be completely removed. Immediate access to good data shouldn’t be dictated by the pocketbook; that’s a profit vertical that Microsoft should write off or file it as a marketing expense.
Documentation has historically been a weak area in our field, and it’s simply time for that to change. Documentation can’t stop at syntax. It must expand to justification and reasoning down to the property/method level. I shouldn’t have to jump through articles, books, videos, podcasts, etc. to get it. Put it all in one spot, intelligently related (If you have to intelligently relate the documentation, it may also illuminate weaknesses in design). For example, I shouldn’t have to go to one place to discover ipc is a new remoting channel, then have to go to another place to learn that its introduction is only for local machine cross app domain communication and doesn’t propagate a network ssid – and believe me I needed to read at least 1000 words to extract the sentence I just typed. Read this link, http://msdn2.microsoft.com/en-us/library/system.runtime.remoting.channels.ipc.ipcchannel.aspx, and you get what I mean. They could of added a few more words to the first sentence to save me 30 minutes of research.
So many of our implementation decisions are based upon performance, why isn’t that something that is routinely addressed in class/property/method usage documentation? Sure there are an infinite number of combinations to the various technology platforms, but more often than not there are approaches to implementation that would cover 90% of uses. Those should be illuminated. If nothing else than to let our time sink shift from discovery to validation.
If there isn’t sound reasoning and justification, then the complexity shouldn’t be introduced, therefore if change does occur, justifying and explaining should be a natural progression. Currently I have to search the web, search out video’s, buy books and a host of other things to get this consolidated view of change.
As you said Rocky, the customer demands at their core are not evolving at the same rate as the capability. Granted Microsoft is also attempting to shift what is asked for by changing what is possible but an increased sensitivity to the time sync it takes developers to keep up is certainly a fair request.
I would also suggest that our definition of “up-to-date” needs to shift. No longer should it be trying to be well versed in technologies the day they come out. How many major clients do you know rolled to Vista the day it launched for business? However, your greatest opportunity for education on the technology occurs the day of and the days following its initial release (i.e. free online courses, etc.). 6 months later when a client is ready to implement, the accessibility to this information has decreased (i.e. costs you 200.00 for the same course that was free 6 months ago). Or how many books have you read that had to be prefaced by “This was written at the time of beta…” I appreciate the efforts of those who want to get us the information fast, but it’s not contributing to the overall health of our industry if you’re just pumping out print that is relevant for days.
It’s interesting that the .NET framework was released to consolidate and simplify commonly performed actions. The fact that one of my clients is running 1.1, another is running 2.0 and another is beta 3.0 demonstrates that the original goal of simplification is being lost by the implementation strategy of the platform evolution, compounded by its increasing complexity.

If you agree, I hope Microsoft will listen. If you don’t agree, well, I’m sure I’ve gone mad.

Best Regards,
Robert
Robert
Monday, March 12, 2007 7:24:57 AM (Central Standard Time, UTC-06:00)
Great, GREAT, post!

"What amazes me is that this insane explosion in complexity has occurred, and yet most of my customers still want basically the same thing: to have an application that collects and processes data, generates some reports and doesn’t crash."

BINGO!! That statement covers probably over 95% of applications being created. A very logical question comes out this. If we are creating basically the same type of applications over and over and over, then why is it getting more and more difficult to do so?

I recently attended a Microsoft Launch event that covered all the cool things you can do with Office 2007 (especially if you use Sharepoint). By the end of the session, I was so confused I couldn't think straight. You know how some applications devolve into very complex logic? You know, where you set a flag here and there to get something you need, but then unexpected things happen in other parts of the application because of it? Well, that's what I got out of the session. "Oh sure, you can do that. Just open Word, select Options, click this tab, click the Advanced button, set this little check box here (the one with no real explanation of what it does). THEN, open Outlook, select Options, click this tab, click the Advanced button, see this check box (it just happens to have the same name as the other - thank goodness)..."

Ask them another, related question, and there off on another tour of the Options panels. Oh yeah, and don't forget that many of these options can be changed by the end user, so your code stops working! My eyes are bleeding. I never, ever, write applications for Office and this is why! Thanks Microsoft for verifying my decision. Where oh where has common sense gone!
Monday, March 12, 2007 1:53:15 PM (Central Standard Time, UTC-06:00)
Lets start with the need for a specialist - most people don't need one.
If you have a good family doctor, he/she should address 99% of the problems you have, assuming you even need to see a doctor. A bad family doctor will just throw you to the wolves (specialists) instead of trying to figure out what's wrong with you, but that's just bad medicine, not a rule.
Likewise, most software projects should be fine with regular developers, never requiring a specialist unless something goes very wrong with them.

And there is also the matter of team work. It's common knowledge MD professionals don't play nice together. On the other hand, software developers are team players by requirement.
I can't imagine two doctors working together, unified toward a single goal -
But that's just what pair-programming is all about!
Monday, March 12, 2007 1:57:25 PM (Central Standard Time, UTC-06:00)
But if you want something to realy be gloomy about, consider a future in which 99% of the developers are located in India and China, with only high-level positions left in the US....
Monday, March 12, 2007 2:30:38 PM (Central Standard Time, UTC-06:00)
"What amazes me is that this insane explosion in complexity has occurred, and yet most of my customers still want basically the same thing: to have an application that collects and processes data, generates some reports and doesn’t crash."

As Mark mentioned in quoting this same part of your post, I think that this is the crux of the matter, and rather than get bogged down by all of the options MS presents (which, I believe, is mainly driven by a simple desire to make money), just stick with what you know works and meets the customer's expectations (as well as offers them the best options for extensibility, etc. of course).

Years ago when everyone talked about web services all the day long, I got books on the subject, saved links, etc. all with the expectation that I was going to have to become an expert on the subject. Know what? I never read the books and I have never needed that knowledge because I haven't worked on any applications where web services were needed! I know enough about the subject to be able to recognize when I should delve further into it, but that is all I need. I think *that* is how we can become great generalists even while others strive to become specialists and fail to provide real value. If you are a good developer, you can quickly become expert enough in a subject to get the job done, and if not, hopefully you have the smarts to know when to look for someone that *is* an expert and get their help.

"Maybe we’ll rebel against the current ridiculous increases in complexity. Maybe we’ll wake up one day and say 'Enough! Take this complexity and shove it!'"

I just ignore the increasing noise - if you focus on the needs of the customer, and stay minimally aware of the technologies available, you will be able to get the job done.

Being continually distracted by the roar of the simultaneous releases of multiple new technologies coming from Redmond and beyond simply makes it too hard to focus on meeting the core needs of our clients, in my not-so-humble opinion.
Monday, March 12, 2007 4:08:20 PM (Central Standard Time, UTC-06:00)
Awsome post Rocky. First of all, my family's thoughts and prayers are with you at this difficult time. I lost my mom to cancer 10 years ago and her memory, along with the memory of many others who have lost their battle with cancer motivate me to ride my bike and raise $ for the Luekemia and Lymphoma Society's Team in Training Program. If you check out my web site: http://www.CyclingFoodmanPA.com, you will see my dedication and motivation to fight this disease that has taken so many people from my life (of the 15 funerals I have been to in my life, 10 were cancer related and one of those was my mom and another was a 14 year old child named Andy Yost)

I started programming in COBOL, VSAM, etc., on the mainframe and moved toward the PC because it was more fun. Well, after programming in dBase, Pascal, C (loved Borland's C compilers), some C++, then moved to MS Access and VB 4.0 then to VB 5.0 then VB 6.0 and now finally the .NET languages. Lots and lots of technologies and stuff to learn over the years but that is what makes things interesting and keeps me from getting bored.

I realize it is impossible to be an expert in everything, however, you have to know a little about everything to know when to bring the heavyweights on the things you don't know about. I have decided to concentrate on SQL Server 2005 and the .NET 2.0 and your CSLA Framework which is an awsome tool. You are an awesome developer Rocky. Your knowledge and the way you convey that knowledge is incredable. I have bought all your CSLA books since VB 6 and you have "shown me the way" to write excellent Client/Server applications.

Hang in there and keep up the good work. Your mom is in my thoughts every time I get on the bike and work out.

Keith
Wednesday, March 14, 2007 10:59:13 AM (Central Standard Time, UTC-06:00)
Take a look into Alan Kay's work on his recent NFS proposal grant if you haven't already.

http://www.vpri.org/html/work/ifnct.htm
Thursday, March 15, 2007 7:33:18 AM (Central Standard Time, UTC-06:00)
The biggest difference between the two professions is that, with one of them, we have complete control. As much progress as we are making in the world of medicine, we can't build a human being from scratch! So with medicine, specialization is absolutely necessary.

With computer systems, complexity like this is neither necessary nor desired. They are complex because they are still evolving at a very rapid pace. Microsoft is in the middle of learning a hard lesson right now. They've just released a fancy new operating system that most people don't want. Not that it's a bad system, but it doesn't work - well - on 90% of computers people already have (you need a brand new computer with lots of horespower). People and business are sick and tired of constantly having to buy new stuff just to have the ability to do what they can already do with their "old" systems. The new software from Microsoft doesn't really do anything different, it just does it with more style.

But I ramble...

Sooner or later (I'm thinking 10 years or so), someone will develop a "language" for interfacing with computers that is a true standard and will work on any system - anytime. It will take another visionary like Bill Gates to pull it off. Heck, maybe he'll be the one! I'm certainly not smart enough to do it! Once that is done, working with computers will be as simple as pouring your morning cup of tea. I'll happen. It's just a matter of time.
Friday, March 16, 2007 11:08:10 AM (Central Standard Time, UTC-06:00)
"Jack of all trades, master of none"

There seem to be a fair number of people in our industry who believe that everyone who is a Developer/Programmer/Arcchitect should be a Jack. Can you imagine your family doctor scrubbing in as the lead when you need brain surgery.

There are lots of people who just want to do the job and earn an income, they are quite happy as generalists. They do "get it done" but it tends to be a solution of the moment.

There are other people who want to be really good at something, they want to be a Master/Specialist.

Its sort of out of context but I think this applies: A person cannot serve two masters, lest he/she serve one badly and the other not at all.

Even family doctors and Generalists are kinds of specialist too.

My mother passed away about a year ago, she had a great family doctor, he made sure she did regular checkups and monitored her health, he made sure she had the right attitute about self-monitoring. It was less than a month after a regular checkup that she noticed something and when she noticed it, she went to her doctor immediately and then to the specialists and treatments.

The speed with which she went for treatment made a huge difference, if her family doctor had not been a "specialist of people", we might not have had the 5 good years that we had before the cancer came back.




Friday, March 16, 2007 11:49:36 AM (Central Standard Time, UTC-06:00)
This article definetly shows a trend in the industry. I'm a consultant at one of top software consulting companies. We pluck graduates out of college and give them crash courses in C#, ASP.net, SQL Server, BizTalk, and SharePoint. They get sent on many short term assignments where they do staff augmentation. They tend to pick up a lot of skills on these assignments. We kind of compare this period to a doctors residency. They need to understand everything before they can specialize.

We have many areas to specialize in, and at this point they are partnered with one of our senior specialists. This way the junior specialist has someone checking up on them, guiding them, and helping them when needed.

I think the amazing part is how well we work together. We have project management specialists who go in and create requirements, RFPs, and also lead the team on large projects. We specialize in fields that have the highest demand, so right now our SharePoint experts have no down time. If the demand decreases, we find that many of the developers take the down time to learn popular new technologies.

I don't see a problem with specialization. We frequently bring our specialists in to integrate systems or upgrade current applications. When they go in there they get the job done and teach the developers who work there how to support it. I see this with SharePoint all the time. The company didn't have to hire a full time expert, and if they need anything in a year down the road they can just call us bring in another specialist.

In a sense our company is a hospital. The only differance is we have people dedicated to coordinating our specialists on large scale projects. I think the next few years will show large growth in consulting companies, as they have seen the writing on the walls for a while now.
Mike
Friday, March 16, 2007 12:37:19 PM (Central Standard Time, UTC-06:00)
I agree to some extent and I would like to present a counter-example, construction. Sure you still have the designers, the planners, the architechs, etc that get whatever needs setup and alligned initially, but when the work starts, you have people that are good at managing it (general contractors) and consultants (subcontractors) that get it all done. Not everyone knows how to build a suspension bridge, but collectively, it is completed -- dare I say teamwork?

I think the long and short of it is, and always will be, effective communication. Without it, yes, we will turn into the health care industry. The next few years should be very interesting to see if it continues to get more complex ...or simpler.
Jesse
Friday, March 16, 2007 6:33:42 PM (Central Standard Time, UTC-06:00)
Software development has gotten more complicated. People have not gotten smarter. We expect too much and do too little to make it possible.
Joe Chung
Monday, April 02, 2007 2:16:00 PM (Central Standard Time, UTC-06:00)
To code a web page in ASP.Net, with business logic and a good user interface, requires knowledge of 7 languages!

HTML
C#.Net or VB.Net
Javascript
Regular Expressions
XML
CSS
SQL

That is simply insane!

Can you imagine our business managers having to write a sales proposal in seven different languages as part of their daily work? And, even better, each sales proposal would require different languages in different sections - depending upon what is being sold and where they were in the sales cycle? If they picked the wrong language for that document section, it would take 40 times longer to print!

When I started programming in COBOL and Basic back in the '80s, I could define a field as a number and place it on the screen. The user could not type in a non-numeric value into that field, so when I processed it, I knew I was working with a number. It just plain worked with no effort on my part - including handling the number of digits to the left and right of the decimal point.

Just to do that (and provide immediate user input that they did it wrong), requires knowledge of 3 languages:

HTML
Javascript
C#.Net or VB.Net (because the user might turn off Javascript!)

That's not insane, it's criminally negligent! This kind of functionality for numbers and dates should be built into the HTML standard and browsers should implement it automatically. I suspect billions of dollars have been wasted worldwide just coding validation logic for numbers and dates.


David Wendelken
Comments are closed.