Blue Theme Orange Theme Green Theme Red Theme
 
World Class ASP.NET Hosting – Click Here for 3 Months Free/NO Setup Fee!
Home | Forums | Videos | Photos | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Login Close
User Id:
Password:
 
Forgot Password
Forgot Username
Why Register
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
World Class ASP.NET Hosting – Click Here for 3 Months Free/NO Setup Fee!
 Resources  
Close
 Our Network  
Close
Search :       Advanced Search »
Home » Design & Architecture » Where did all the Designers Go! 

Where did all the Designers Go! 

Software is one of the fastest paced industries in the business world. As quickly as software languages come and go, skill sets require constant learning. In trying to keep up with implementation aspects of software, did we somehow forget about the priority of creating a good design? This article describes how we came about with a void of software design skills in the programming world.

Author Rank:
Total page views :  8303
Total downloads : 
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
 
Become a Sponsor

 Edited by Nina Miller

 

 

Introduction

As a consultant, you often find yourself looking at other people's code. That is because you are often asked to finish an existing product, or to make an existing product work correctly.  One of the most frustrating aspects of inheriting preexisting code is that invariably the code was written with only rudimentary consideration of the design process. "How can that be?", you wonder. "I thought all software programmers are designers by nature."  If you believe this, you've swallowed the biggest myth of all time. Software developers are rarely designers. In fact, I have come across so few real software designers over the years that I ask myself, who is even creating the software products for our industry? What has caused this dearth of design talent in the industry? After some thought and investigation, I have compiled a list of reasons as follows:

1) Software design is not taught in our universities.

Why not?  Why isn't the most important aspect of writing software the first required course for this major in in universities and other learning institutions?? Why is Software 101 about writing code or about understanding some computer language? Professors are more interested in the number theory behind the software. Concepts like recursion and data structures are a lot more sexy in the academic world than iterative development and refactoring and software testing . When computer programming first entered the curriculum about 25 years ago, it wasn't even an engineering discipline in many schools; computer programming was in the math department! Have we come a long way since then? I'm not so sure.

2) Job Talent Scouts are only looking for Coders.

Part of the problem is marketing. Job listings cite implementation-specific skills like Java or C++ or C#.  Rarely does a job description list in its criteria a proficient, experienced software designer. Recruiters pick up on this and feed their clients what they are demanding. Recruiters actually scan resumes for "implementation-oriented" key words. The result? A job market with a glut of implementers and no designers.

3) Code is outsourced. 

Companies now outsource most of their coding. They think they know what they need and the skills required to do a competent job and they provide a basic requirement spec. The company is on a tight deadline, and demands an unrealistic turnaround. The contractor doesn't waste time with something as lowly as design. He goes straight to the code with some vague notion of "n-tier development" in the back of his mind.

4) There are no credentials for Software Engineering

Before you go to med school you need to take the MCAT's, to go through a stringent application process, to get in, and survive 4 or more grueling years. When you leave medical school you are certified and licensed to practice medicine. You then complete a residency to specialize in your field in order to independently treat patients. To become a software engineer, you merely just say it on your resume. "Hi, I'm a software engineer!"  And what does that mean to a potential employee?  It means anything from writing a VB Program for balancing a checkbook to architecting a complex aviation system. It is not clear to anyone what qualifies someone as a good software engineer. Granted, when someone applies for a job as a software engineer, the employer should know exactly what to ask the candidate to determine if he knows something about software engineering. But in my entire career, I rarely have been tested on my software engineering skills.  A prospective employer is more likely to ask "How do you put up a message box in windows SDK?".  The questions tend to be implementation specific. I remember taking a test for one of the top software consulting firms on Wall Street and the entire exam consisted of esoteric implementation-specific questions about C#. Great. You wonder if that firm ended up with a bunch of jeopardy contestants who would be wizzes in the category... "I'll take, "What is the IL code for a finalize block for $200?".

5) Employers use poor judgment

Employers need to be educated also. If the senior software engineer in your company is not doing any design, do you think that the manager who hired him is even aware of it? Those managers are asking the same vanilla questions. "We are developing in C#, Do you know C#?".  "Have you ever used STL?". "How good is your JavaScript?".  Again, employers are focused on the tools and not the nuanced skills essential to creating a quality product. Admittedly, a few knowledgeable interviewers have requested custom-tailored designs for their systems. These managers value programmers who understand the importance of design.

6) Engineering and Programming have gotten a Divorce.

Engineers are always taught to design first and implement later. When you design a chip, you don't create it immediately. You draw it on a CAD System, test it, simulate it, and are trained to follow a process which begins with concept and design. If a chip is poorly designed, the host company will spend fruitless money creating the physical circuit. When an aeronautical engineer designs an airplane, does he just slap a set of wings on a piece of metal and throw it in the air to see if it can fly? No. He designs it on a CAD system,  simulates stress under different conditions, models the airplane as a system that must meet rigorous criteria, tests it, tests it, and tests it some more. The airplane designer needs to meet a set of strict standards in order to pass the spec. And what would happen if the aeronautical engineer did not design and test thoroughly? I don't want to think about that.

What about the software engineer? How analogous is programming to other engineering disciplines? Not much. There is too much temptation to rush to the implementation phase. Heck, why design anything when you can already start coding and see what happens? Right? Developers don't think ahead to the cost of troubleshooting and correcting software that hasn't been designed effectively. It's not as black and white as a bad yield of 1,000,000 defective processors, or a poorly crafted airplane. Because software is more intangible, it's easier to justify a shoddy job on development - after all, it can always be "cleaned up" later. "If the software isn't working right, I'll just fix it... just a couple lines of code..."

7) Engineering Talent has fallen by the wayside.

If it's hard enough to find a programmer, how the heck am I going to find a good software designer? With the lack of people going into IT these days (due in part to the Internet boom-bust in the late 90's), most managers will take what they can get. As with any commodity, software talent is a matter of supply and demand. Given today's woeful under-supply of IT talent, the price for a programmer/designer is high. Start ups and small businesses with tight finances are more likely to hire someone out of school. Even large companies want to keep their profit margins high by paying for less expensive talent. There is nothing inherently wrong with an economical approach, but these employers are not aware that schools are graduating programmers with no understanding of design. The reality is that good design technique is learned on the job, and so those who are skilled and proficient are invariably seasoned programmers with many years under their belts.

Let's ask the question another way. Would you want recently graduated engineer designing the airplane you fly on? No. You would want that engineer to work for several years under a mentor who would teach the ropes of designing a solid airplane How about the software engineer? Would you want someone with no experience to code the heart and soul of your business? Probably not unless they were working with a senior software designer. But with the lack of IT talent compounded with a lack of design talent, plus the aging and retiring of baby boomers, who made an impressive contribution to the software industry, the core products of many businesses are created by programmers with zero design experience Businesses don't understand that programming is like designing an airplane until it's too late.

Conclusion

How do we solve the problem of poorly trained software developers? How can we get the current pool of software developers to think like designers? First, universities and other centers of learning need to emphasize software design over pure theoretical programming. If I were a teacher in the software field, I would not introduce any computer language in the first semester. Design concepts would be the foundation of any computer course. Secondly, employers need to reframe job descriptions so that implementation-specific languages are not the only requirement.  If you are an employer, screen potential candidates for design.  Also, consider hiring someone whose expertise is design and architecture. They can work with an implementer after the design is finished. Software products should be from the brainchild of 90% design and 10% implementation rather than current, dismal 10% design and 90% implementation. The benefits of concentrating on design first range from better maintainability of existing products to easier reuse for spinning off additional products.  Whether it's airplanes, cars, molecules, clothing, or software, a focus on design over implementation will in the end determine the quality of your labors.


Login to add your contents and source code to this article
 About the author
 
Mike Gold
Michael Gold is President of Microgold Software Inc., makers of the WithClass UML Tool. His company is a Microsoft VBA Partner and Borland Partner. Mike is a Microsoft MVP and founding member of C# Corner. He has a BSEE and MEng EE from Cornell University and has consulted for Chase Manhattan Bank, JP Morgan, Merrill Lynch, and Charles Schwab. Currently he is a senior developer at Finisar Corp. He has been involved in several .NET book projects, and is currently working on a book for using .NET with embedded systems. He can be reached at mike@c-sharpcorner.com
Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Go.NET
Build custom interactive diagrams, network, workflow editors, flowcharts, or software design tools. Includes many predefined kinds of nodes, links, and basic shapes. Supports layers, scrolling, zooming, selection, drag-and-drop, clipboard, in-place editing, tooltips, grids, printing, overview window, palette. 100% implemented in C# as a managed .NET Control. Document/View/Tool architecture with many properties&events. Optional automatic layout.
Dundas Software
Dundas Chart for .NET is the most advanced .NET charting package available today.  With an extremely complete feature set, elegant architecture and easy implementation, Dundas Chart can quickly add advanced Charting functionality to enhance and transform ASP.NET and Windows Forms applications.  Whether you are implementing charting into internal projects, or building applications for clients, Dundas Chart offers advanced technology and advanced results to get the most out of data.
Clickatell's SMS Gateway
Clickatell's Developer Solutions allow you to SMS enable any website or application via a range of API's. Learn More about our API connections.
Free access to .NET Memory Management video
Everything you need to know about Garbage Collection, Temporary Objects, Fragmentation, Finalization and common causes of memory leaks in .NET. Watch the video here.
Microsoft Visual Studio 2010 Professional
Microsoft Visual Studio 2010 Professional will launch on April 12, but you can beat the rush and secure your copy today by pre-ordering at the affordable estimated retail price of $549 (US). Pre-order now.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
Developer-Ready ASP.NET 2.0 Web Hosting with 3 MONTHS FREE
Now supporting .NET 3.0 Framework with Windows Workflow Foundation, Windows Communication Foundation (WCF), Windows Presentation Foundation (WPF), windows CardSpace (WCS)! Providing more flexibility for Developers with Web Services Support and a User/Permission Manger. Also supporting MS SQL 2005/2000 with Real-Time Backups, FREE Automated Attach .MDF Tool, FREE SQL Restore and Shrink SQL DB Tools, and SQL
 
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
 
 Post a Feedback, Comment, or Question about this article
Subject:  
Comment:  
Become a Sponsor
 Comments
Microsoft and Google Hired them by Mahesh On January 24, 2008
Great article Mike. BTW they are getting paid big $$$ by these two companies.
Reply | Email | Delete | Modify | 
Re: Microsoft and Google Hired them by Mike On January 28, 2008
No wonder these two companies are so successful.  They realize the entire value of their organizations depends on have a good solid foundation in their software architecture. 
Reply | Email | Delete | Modify | 
Good Article by Brandon On January 24, 2008
Ill be the first to admit, good design usually doesnt take a position when I develop applications. I want to change that greatly, but the company I work for is always saying "Well, can we put this in? Can we do this? We need this" all the time during the development process so it makes it very hard to design it and stick to that design :(
Reply | Email | Delete | Modify | 
Re: Good Article by Mike On January 28, 2008
Feature creep is an unfortunate aspect of software departments, and very often the employer wants the feature in yesterday, leaving no time for an iterative design process.
Reply | Email | Delete | Modify | 
Great Article by Edward On January 25, 2008
I feel the frustration. When I was hired for my current job, all they cared about was the fact that I was familiar with MFC and C++. My supervisor, who's title is "software lead", has an associates degree in electrical engineering and a bachelors in business administration. Any questions I ask are always refered to someone else or he will email one of the people who originally worked on the code. How he obtained his current position is a mystery to me. When I started, my first question was "Where are the requirements and design documents?" The response, "Oh, we don't have any." "How about coding standards or design guides?" "No, we don't really have any". Yet somehow my company is ISO9000 certified. Go figure.
Reply | Email | Delete | Modify | 
Re: Great Article by Mike On January 28, 2008

I hear you,

I think a lot of companies are getting certified ISO9000 and seemingly don't deserve it, but the unfortunate aspect of ISO9000 is it just checks that you are following the processes you have in place rather than enforcing that your organization should have certain processes that need to be followed.

Reply | Email | Delete | Modify | 
The Jobs are out there by Sam On January 27, 2008
Unfortunately Mike, you missed one issue, the Bureau of Labor Statistics shows that the decline in PROGRAMMER jobs is -4% or so, and that puts that job in the top 30 jobs with the largest declines between now and the year 2016 The jobs that show the greatest demand are the Network Administrator, with around 48% increase between now and 2016. Computer Software Engineer, Applications with a 28% or so increase and a similar increase in computer software engineer, systems with similar increases. Database administrators and similar will see growths greater than 20%. For example, Accountants are seeing a 17% growth rate, well under similar jobs in the IT industry. From my work with K-12 students from time to time, we are leaving the training of the future workers in the hands of the clueless. Not that K-12 teachers are not good at their job, they have no clue as to the needs of society as they pound out their curriculum generated by school boards. It is critical that everyone who agrees with you find a one high school teacher and help them understand how to get into a career in IT. As usual great work Mike.
Reply | Email | Delete | Modify | 
Re: The Jobs are out there by Mike On January 28, 2008

Thanks Sam,

I think its great if you are working with kids K-12 in IT.  If interest for doing IT is driven in the early years, imagine how many more engineers we would have entering our colleges!

Reply | Email | Delete | Modify | 
Great Article by Scott On January 30, 2008

Mike: I read your article and gave it a good bit of thought as it is an interesting topic to me. I do know that colleges are finding fewer students interested in careers in engineering; that may have something to do with it as they may lower standards and ease graduation requirements to attract students (I have heard that that is the case). I also recall that I was once told that a university degree is a Learner’s permit; it indicates that a person has the ability to learn and the drive to see something through but it does not make a perfect practitioner out of someone. Even doctors are forced to extend their studies and to work under supervision in order to ensure that they have attained a level of proficiency prior to turning them loose on the public. That responsibility in other professions used to fall upon an employer. Still and all, I could not agree more; many the students I have had over the last few years have had come equipped with no notion of either design methods nor do they have any notion of how to work on a team.

When I ran the UI section for consumer electronics company, I had new hire students under me that could not work on a team, could not follow directions, could not work within an architectural model, and could not follow a coding standard. I had to teach them what their schools had omitted but I had to do so whilst working in a pretty high paced environment with no company support aimed at developing the employees. It was as you stated in the article, the company hired code pigs with no concept as to how to bring a project together. I did not get to do individual interviews (they held group interviews which were little more than hideous interrogations) and in some cases I was not permitted to interview them at all.

What I do seem to encounter these days is a lot of cut and paste wizards but it is a also lot different now; in 1980 with ANSI C, it was a matter of how inventive one could be with 41 key words and a lousy compiler. Of course employers used to make an investment in an employee. They used to train them and make them productive; it used to be that way with the aircraft companies I worked for; by the time I left the business it had become as bottom line oriented as many other private companies and they were extremely thrifty when it came to employee development and retention. Well, they would send you to an ADA class or symposium here and there but that was about it.

Still, the processes in place did hold everything together. Employees used to feel some loyalty to the company as well. I don't see much of that these days; not in either direction. Many companies invest little in employees and employees have little loyalty. If there is a cause and effect relationship there then I am not sure which is the cause; it is the chicken and the egg story.

I tend to think that much of what you've mentioned is not caused so much by a lack of engineering talent (in terms of ability if not training) but is rather a factor of the environments people work in; I think the talent is there but the talent is not necessarily driving the business. I have encountered very few places that have any interest in planning or upfront analysis as it is counterproductive to a competitive bid; the smaller the shop the worse the problem.

Lockheed Martin (at CMMI Level 5) would never agree to a project lacking sufficient budget for an upfront analysis but a small company will dive right into coding with very little analysis (if any; I have had to start coding on two or three paragraphs in a email but not because I wanted to, I just did not have a choice). The lack of any cohesive approach to tackling a software design issue is certainly an issue in my mind; some shops will adopt a methodology in name only without any clear plan as to how to implement or follow such a methodology. Downloading a copy of the SWEBOK does not cost you anything but implementing it does have a cost.

I have certainly encountered a number of places that will say they are, for example, Agile, but in reality it is just an excuse for the lack of a process and the disposal of adequate planning and analysis; the only Agile part you may see is iteration. In effect they hide behind the title. Iteration without direction tends to turn into an endless loop. Such shops are not really Agile as Agile does make provisions for planning and analysis; CMMI does carry a definition that seems to apply a lot better; they call it CMMI Level 1. If you Wiki CMMI Level 1, you will find this definition (I always thought the bit about projects being saved by individual heroics was funny - unfortunately I believe that this also characterizes far too many work environments to the letter):

At maturity level 1, processes are usually not documented and change based on the user or event. The organization does not have a stable environment and may not know or understand all of the components that make up the environment. As a result, success in these organizations depends on the institutional knowledge, the competence and heroics of the people in the organization, and the level of effort expended by the team. In spite of this chaotic environment, maturity level 1 organizations often produce products and services; however, they frequently exceed the budget and schedule of their projects. Due to the lack of formality, level 1 organizations, often over commit, abandon processes during a crisis, and are unable to repeat past successes. There is very little planning and executive buy-in for projects and process acceptance is limited. IT organizations at level 1 are often seen as a service instead of a partner.

Anyway, it was a great article and the sort that makes you think; you have a lot of good insights. The bit in section 4 about the interviews was comical to me; I tend to refer to such interviews as, "Trivial Pursuit - The .NET Edition". Of course when dealing with the framework and its 500,000 properties and methods, I am betting that almost anyone can sit down and poke around the MSDN library and devise a set of questions that few people could answer. Again, great article

Reply | Email | Delete | Modify | 
Re: Great Article by Mike On January 30, 2008
Awesome feedback Scott!  I've certainly learned quite a bit from reading through this commentary.  Thanks for sharing it with the readers.
Reply | Email | Delete | Modify | 
How to Measure Design Skills by jlehew On January 30, 2008
I'm one of the designers you're referring to that is hard to find and I agree, there are very few "Architects" in the programming field. When I interview for jobs I keep thinking that the technical questions I'm being asked are not important. They focus on items I can Google and get the answer in 2 minutes or I would know in 5 seconds with intellisense. I think this is due to the difficulty in measuring someone competence in design. I measure design competence when I'm interviewing with one simple technique. I ask the person to describe a significant project they were on and ask about the big picture. Then I pick out a few pieces of the story and ask more detailed questions. For instance if they talk about a 3rd party charting control called Rex, I'll say what did you like about Rex or what was the biggest challenge of working with Rex, or whatever. I keep drilling down and also asking things like "how did you know that?" "What did you see when that error occurred?" "How did you research that?" People that design are aware of how their pieces fit with others on a project and also have the ability to drill down to the lowest levels and can explain what they did and why they did it. But this is a non-standard interviewing technique. HR likes you to ask everyone the same questions. The other big thing I see is that very few software developers follow best practices. They almost always know it but they don't follow them. A good example is try..catch blocks. Everyone knows you're supposed to put error handling in your code, but I've seen large systems without a single try..catch block in them. New developers haven't learned that it takes less time to add error handling code then it does to track them down without it.  --John
Reply | Email | Delete | Modify | 
Re: How to Measure Design Skills by Mike On January 30, 2008
It's funny because developers often put design on their resumes (Object Oriented Design, etc.), but when I've actually asked them about these topics during an interview, many of them barely heard of the concepts involved.  I remember one developer that I interviewed who put UML on his resume, and when I flat out asked him about it, he didn't even know what it was.  Then he admitted, that his company had sent him to a one day course and he wasn't really paying attention.  The lesson here is that developers are aware that design looks good on the resume, but since they are so used to getting asked language and IDE oriented questions in an interview that they feel they can get away with it.
Reply | Email | Delete | Modify | 
Re: Re: How to Measure Design Skills by Roy On January 31, 2008
Well mike, i Couldn't agree more. I had seen people coming from campus recruitments and they don't know what all documents are necessary for analyzing and designing a software product. You need to spoon feed them and still they want to start coding as soon as possible to learn coding, they are just not interested in documentation. This is how it is being done here in India. And i must say that a good design and analysis's brings down nearly 40% of your coding and testing work(if not more). Even i had that mentality of avoiding documents until i had some experience preparing them on my own and i must admit that it helped a lot when i was coding(thanks to my manager Mr S-). And i guess what is hurting more is that in today's world you get ready made architectures(web service software factory, k2.net) and people are just concerned about coding.
Reply | Email | Delete | Modify | 
Training is available ! by Max On February 1, 2008
Good point Mike, however, training for sw design is available and has been around for a while. Check out Software Quality Engineering and the Better Software newsletter. www.sqe.com I have no affiliation with this group, but have gone to their conferences and read their material. I beleive there is a huge demand for better SW design and that companies that do not embrace it will be left behind with buggy applications, frustrated developers, and late projects. Plan - Do -Check - Act. Sounds familiar in engineering ?It works in SW engineering too. The programmer is just another sort of draftsman, not the designer.
Reply | Email | Delete | Modify | 
Training is available ! by Max On February 1, 2008
Good point Mike, however, training for sw design is available and has been around for a while. Check out Software Quality Engineering and the Better Software newsletter. www.sqe.com I have no affiliation with this group, but have gone to their conferences and read their material. I beleive there is a huge demand for better SW design and that companies that do not embrace it will be left behind with buggy applications, frustrated developers, and late projects. Plan - Do -Check - Act. Sounds familiar in engineering ?It works in SW engineering too. The programmer is just another sort of draftsman, not the designer.
Reply | Email | Delete | Modify | 
Where can I find a good mentor? by Ellison On September 14, 2008
Partly because of my background as an old time mainframe programmer, it’s inconceivable to me that anyone would write code before creating a design. With only punch cards to use for input, we didn’t have the luxury of experimenting and just coding to see what would happen. Turnaround was too slow. Now that I’m retired from that environment and trying to re-invent myself as a C# developer, I’m having trouble navigating through a world that not only is more complex and layered than mainframe or even client-server programming was, but where design is so completely de-emphasized in school and training materials when it should be emphasized more than ever. I’ve learned what all the pieces are, but not how they fit together to produce anything more useful than a class exercise. I’m dying to find a job where I can “work for several years under a mentor who would teach the ropes”. All I am is a junior coder, a widget, and if an assignment is beyond my experience it gets yanked away and assigned to someone else, so that I never learn how to do it. The emphasis is on grinding code out as quickly as possibly rather than increasing the value of your resource (the programmer), and planning for the long term. Right now I’m moving from one contract job to the next, trying to find a place where I can develop my skills. Do you have any advice for someone who is looking for this kind of environment?
Reply | Email | Delete | Modify | 

 Hosted by MaximumASP  |  Found a broken link?  |  Contact Us  |  Terms & conditions  |  Privacy Policy  |  Site Map  |  Suggest an Idea  |  Media Kit
Current Version: 5.2009.6.2
 © 2010  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.