Monday, 22 of December of 2014

In a difficult economy, find an edge in software development.

Do you have a small software company ?

Maybe you are “lone wolf” (individual) developer trying to make your mark with an exciting new software idea.

As a software developer one needs to find an “edge” to give you some advantage over all the other developers trying to do the same thing you are. So what is the key to being a productive software developer in this difficult economy ?

No matter what one may think, quality software takes time to develop. You can’t rush it, by looking for some “fast” development system which looks good on the surface, but fails to give you the control you need to build an application exactly the way you want. You need to have full control over your application. What I mean is this. You can use a bunch of components from a dozen different companies and try to “glue” them together to get that perfect interface, but that can create problems which are not always apparent. I am not against using programming tools, components, DLL’s, etc. What is important is that each tool you use must provide you with the following:

(1) Must be stable and reliable to a fault

Don’t just start buying components from a variety of vendors. Find companies which develop tools which have a track record of being reliable. No software is perfect, but you will find that some tools tend to work flawlessly, while others tend be a bit buggy. A tale tell sign that a tool may be a questionable choice is when the vendor keeps posting bugs fixes or updates every few weeks. IMO thats a little scary. Don’t they do inhouse bug testing themselves ?

You will have enough problems in tracking down bugs in the code you write. You don’t need to waste a lot of time tracking down bugs in the tools/components you use as well. As an experienced API programmer myself, I know there are a lot of pitfalls in developing software for Windows. Don’t underestimate this problem! You are better off using a few tools (or components) which you have absolute confidence in, than a lot of tools where some of them may be questionable.

(2) High level or Low level (or somewhere in between) ?

High level components are great, as long as they give you exactly what you want. Yet, to differentiate your software from everyone elses one needs to be able to create an application to ones own specifications rather than to the specifications of the components you use. What I mean is that if you plug in a high level component that does not allow the customization you want, then you will be “fudging it” rather than creating a unique user interface. High level components should also have plenty of low level customizations available. Also not everything needs to be a high level component. Sometimes it is better to have a low level engine which allows you to “build it yourself” so to speak. If you want your software to stand out, it needs to be different, it needs to be unique. A tool which gives you low level control of the user interface, but making it easier to build, gives you more choices on how to build your interface.

(3) Beware of “eye candy”

Recently I was checking out a “Skin” engine for use when writing Windows applications. On the surface it looked great, with all sorts of choices, but in reality I found it a total waste of time and a poor choice. This skin engine was ActiveX based (unlike a favorite skin engine amoung Powerbasic programmers called WinLift which is DLL based) and one quicky could see it was bloated and poorly designed.  It took too long for the skin engine to skin a window and it flickered terribly when it did (you actually saw the original unskinned window before it was skinned). The controls onced skinned were not a responsive as the normal controls were either.

The point is that potential users of that tool could easily be seduced by the “eye candy” and not consider the ramifications of using that skin engine. I should also point out that skinning an application may make it look fancier, but it does not in any way improve the application. Customization of a user interface should in some way enhance it, rather than simply be eye candy.

(4) Do what others are not doing!

If you want your software to stand out (be better), then do something no one else is doing. In the software industry there is a tendency to copy everyone else, rather than be creative. Microsoft adds ribbons to its software, so everyone else wants to add ribbons to their software. The question one should really ask is, will ribbons really make my software easier to use and more productive for the end user. If the answer is no, then why copy Microsoft  and use ribbons ?

If you want a better UI for your software, then start getting use to writing some code. Don’t always depend upon third party tools to solve your problems. Learn to start building some things yourself. To illustrate: In the cabinet industry the quality of mass produced cabinets has fallen drastically over the years. Today everything is made of particle board and that just does not last. While it is true that most people aren’t skilled enough to build a cabinet from scratch, particularly building the doors, for moment imagine if you could purchase just the doors already made, but build the rest of the cabinet yourself. Thats exactly what I did! I found a place where I could purchase well built cabinet doors (solid hardwood) for a low cost and then I purchased real plywood and pine and built my own cabinets. I built a set of cabinets for about $400 which would have cost possibly a couple thousand dollars new and my cabinets will last a life time. Its all solid wood and “solid as a rock”.

When it comes to developing software, one can do something similiar. Use programming tools/components which handle things which would be nearly impossible for you to do yourself, but then build everything else which you are skilled enough to do. Rather than always use high level components, look for tools which can provide you with as many “building blocks” as possible so you can “build it yourself”, but in half the time.

Its not just a matter of getting a software product “out the door” as quick as possible, but it is a matter of building a software product which really does solve a problem, which is really useful to the end user and which is “solid as a rock”.

This is exactly what I designed EZGUI 4.0 Professional for!

The idea was to build a GUI engine which is “solid as a rock” (reliable) , which provides you with an amazing number of “building blocks” so you can “build it yourself”, but in half the time.  I am amazed at the variety of user interfaces my customers have created. The customers which get the most out of the product are the ones who push the limits of its “building blocks” to build unique applications unlike anyone else. To such customers they see the potential of EZGUI and what you can build with as “unlimited”. My customers also don’t have to depend upon dozens of unrelated third party components when they build applications. They build most of it themselves using EZGUI and then add just a few, maybe just one (or even one) third party component to their applications. The most common third party component they use is a third party Grid control, which would be hard to build yourself. Some integrate direct API calls in key areas. They key is that they have most of the building blocks they need in EZGUI to do most of what they want and the ‘sky is the limit”.

I designed EZGUI in such a way that it should provide an advantage to even the “lone wolf” developer so he/she can develop apps quicker and with a richer user interface than what a team of developers might do with other tools. EZGUI is not perfect, but in each generation it continues to grow in its feature set and power. There are some exciting new things coming in the next version of EZGUI, but thats another story.