Software Design & Engineering
Internet business development
mobile applications
Alan Partis
320 Ridgecreek Drive
Lexington, SC    29072
(803) 692-1101


Password Rules are Stupid
Common rules actually weaken security.

Best Practice ... Not!
This is one reason why "old" code can be touchy.

Wow! That was fast!
Making the right choices in your code can have huge payoffs in speed.

Ctors in Chains
Shrink your C++ code even more by chaining your constructors together.

Virtual Classes
Virtual base classes: what are they good for?!

Practice Makes Pretty Good
Become a master software engineer by practicing like a ninja warrior.

You Should Get Out More
Maintainability is the key to software success.

Why You Need Me
Seven reasons why I think you need me to work for you.

I Create Wealth
Or, why this is such a great business to be in.

Standards in Software
Software engineering standards are a necessary and good thing.

What is a Content Management System?
$10.5 billion will be spent on them this year (2003) alone, but what are they?

Top 10 Benefits of a Content Management System
So what good are they?

Do You Need a Blowfish?
What is a Blowfish? Does size matter? Is it right for me? Get your questions answered here.

Why Not Windows?
Don't just take my word for it ...

10 Attributes of a Professional Software Engineer
A truly professional software engineer stands out from the crowd. Here's what makes them different.

How to Score a Startup
Examine all these points of startup companies and see how they add up.

10 Attributes of a Professional Software Engineer

March, 2002

The level of professionalism in the software engineering field has suffered greatly over the past 5 to 8 years and today appears to be reaching a new low. The consequences of this dive are larger project cost overruns, more missed deadlines, lost revenue and greater opportunity costs, lower staff morale, and poorer quality software in general. Unfortunately, little is being done to change the status quo except to continue to hire more young and underqualified programmers with low salaries while the experienced 'mentors' continue to leave the industry in frustration.

By some accounts, as many as 80% of all software projects either fail to reach completion, are shelved upon completion, or quickly withdrawn and replaced with yet another 'latest and greatest' release only to continue a tradition of missed opportunities, unmet expectations, and monetary losses that helped kill our once booming economy. The software development business is in a poor state, but with a little pride and commitment by the movers and shakers, we can regain the momentum.

With this in mind, I offer the following attributes. A truly professional software engineer ...

  1. ... understands the real requirements of their project and keeps focused on those requirements.

    Few serious software projects succeed without first defining the boundaries and limits of the environment in which this project will run and the needs of the users who will use it. In the absence of this foundation, many poor decisions will be made by the development team resulting in improper priorities and ill-fitting solutions. Open, honest, and frequent communication with the User is essential to collect this valuable information early on in the project cycle.

  2. ... understands who the 'client' is.

    The 'client' for a given software project is not always the obvious person or group. In a work for hire scenario, the client is clearly the person who is writing the checks. For software projects to be used in-house in a large organization, the client is the group, or manager, who will be using the finished product. In a software development company whose products and/services are sold to the public, the client is the executive staff or management of the company.

    It is important to recognize who the client is so as to maintain the proper perspective of the project's priorities.

  3. ... maintains open, frequent, and "straight up" communications with the 'client'.

    The most logical approach to software product development is to contract the development out to a commercial software group much like an inventor finds a fabricator to manufacture his product. Ironically, with software this approach fails with great regularity due to poor communications between the client and the development team. Professional software engineers have the experience and knowledge to ask the right questions and ascertain project requirements, provide quality and timely feedback, and provide advice and consultation as needed to keep the project on track.

  4. ... produces a design for all but the simplest projects.

    The Princeton SIP Team said it best: "A program that has not been specified cannot be incorrect, it can only be surprising."

  5. ... produces, and follows, a plan to implement that design.

    Without a plan it's too easy to allow tremendously damaging scope creep, lose direction, and eliminate any possibility for meaningful testing.

  6. ... chooses the best tools for the job, not according to what's popular today, but by the given project requirements.

    Oftentimes, the underlying technology used to implement a given project is chosen for wrong reasons. Teams will choose a new technology just for the chance to learn it, not because it's the best tool for the job. Other times tools are chosen just because it's the popular technology of the day. Both of these criteria are common, but damaging to the potential success of the project. Technology cannot be chosen without a thorough review of the project requirements -- if the end user does not require platform independence, then it's unlikely to be a good choice to use a platform independent solution.

  7. ... maintains high standards of professionalism and doesn't accept low standards from those around them.

  8. ... maintains the discipline to consistently uphold development coding and testing standards.

    Development and testing standards are put into place for software development to save time and money in the long run. They lead to many fewer bugs that are generally easier to track and resolve. They also get testing started earlier in the cycle thereby shortening the overall development and testing cycle.

  9. ... fully and properly tests code to ensure the highest levels of reliability and maintainability in delivered code.

    Programmer unit testing is paramount in ensuring that individual pieces of a software project work as advertised. Not only does unit testing result in automated self-testing code, but often produces highly useful testing and diagnostic tools that can be used by later testing to find and correct less obvious bugs.

  10. ... understands that maintenance is the most expensive phase of any software project and follows standards that help reduce this cost through good documentation and comments in code.

Knowing these differences can go a long way toward bringing success to your next project.

"Thundernet" is a trademark of Thundernet Development Group, Inc.
a Florida corporation.
Copyright © Thundernet Development Group, Inc..
All rights reserved.