Many people have asked, “Since you do not get paid for your software why do you write it and give it away for free? Well that is a legitimate question, here is the answer.
Start at the beginning.
I manage a key shop as a concession for a large chain department store. At the end of business on Saturday I would stay after to wrap up the week's paperwork. This would take about an hour but it would seem to take forever. Around 1978 commercials for the Apple ][ and Tandy TRS-80 were on the TV and I said to myself that having a computer to do this crap would greatly improve my life so I went out and bought a TRS-80, I taught myself to write programs and I computerized my paperwork.
My wife and most of our friends are teachers and they would suggest programs for me to write which is why there is educational software on my site for download.
So I began writing software just for fun, it became my hobby.
Meanwhile at work my host store over the years provided me with many different cash registers to use. My first one was purely mechanical and did not even plug in. It had two rows of buttons and to ring up a sale for $2.39 you would have to press the [$2], [.30] and [.09] buttons down at the same time. The maximum sale was $5.99. http://www.flickr.com/photos/dogwelder/20928188/
The great thing about this was when the electricity went out the key shop would be the only department in the store that was open (I had a hand clipper that would make car keys.) It would not add up items in the sale and at the end of the day the only sales figure that it would provide was total sales, I had to figure out how much of it was tax.
The next register was electro-mechanical meaning that there was an electrical motor that made the gears go around when you pressed the buttons, but it also had a crank for those times of no electricity. This register was about the size of Montana and the counter groaned when the register was placed on it. http://www.flickr.com/photos/20342303@N00/111206421/
However it would ring up sales to $9999.99 and add up the sale and provide the sales figures for up to 5 employees. At the end of the day it would still only provide a total sales figure and a sales figure for each employee.
Around 1978 the store got all new POS terminals so I got one of the old ones. This was my first POS computer register. Since my merchandise was not in the mainframe database it would not look up merchandise or prices but it would calculate the total sales and total tax at the end of the day. Big improvement.
Then around 1988 a technician dropped off a small PC with a cash drawer and printer attached to it. This was to be the new register for the department store chain's concessions and my department was one of those selected to test it. I was a beta tester.
It was wonderful. A stock table was kept on the local drive instead of the mainframe so I was able to add my merchandise to the stock table. Now I was able to enter a 1 to 6 digit stock number and the register would look up the item for a description and price to add to the sale. At the end of the day it would not only print my total sales but also the sales for each item I sold that day. Before this I had large paper sheets that I had to use to mark up everything I sold after every sale and then add them up at the end of the day. The software was written in QuickBASIC 4.5 which was the same language I wrote my software in. I was able to decipher the file format of the stock table and thereby port the merchandise information from the stock table directly into the software that I had written to do my weekly paperwork. Life was sweet indeed.
Then one horrible day in 1997 the host decided to improve my life by giving me a new register. This register had my stock table on the mainframe and would transmit all of the sales and merchandise information to the home office of the company I work for. Theoretically that meant that I no longer had to do any paperwork at all which was good because this register gives me NO INFORMATION AT ALL about what I sold during the day, not even total sales for the day. Gee, even my first register would do that.
My stock table can only be loaded from my home office whenever they think to do it. I have things that I have been selling for 10 years that are still not in the stock table. To ring up an item I have to enter a division number (which is always 53 so what is the point) and then a 5 digit stock number (the old register could use stock numbers as small as one digit.)
But the main problem is that I get NO INFORMATION at the end of the day. Since my company wants me to maintain sales proportions on particular types of merchandise I am back to using the large sheets of paper forms to track what I sell. To find my daily sales I have to go into the host store's main office to look up the monthly sales total for my shop and then subtract the previous day's monthly sales total to find the sales for that day. Talk about gobs of fun!
DHPOS is born, sort of.
After I used the new register for a while I came to the conclusion that I could puke a better POS system than what I was then forced to use. So I started in. As a template I used the previous PC based register software that I loved. Of course I had no access to the source code but I did know how it worked as far as the screens and inputs were concerned. So from memory (because I no longer had access to the actual program, that was gone) I started to write the program. I worked on it on and off for about 6 months and got about 75% of it to work. Then I got involved in other things.
Bored in 2000
OK, its summer vacation in 2000 and I have nothing to do. I come across the DHPOS program files that I had worked on about 3 years previously and decide to finish them. But now I want more.
Wal-mart has always depressed me, and I have never even been in one. I have heard the stories about WM coming into a community and just destroying its retail sector but I did not really understand it.
I had some friends that moved to a small town in Wisconsin and I would visit them to help them with small construction jobs on their house. For supplies we would drive into town and in the town there were a couple of really old hardware stores, think about 1880's. They were wonderful and I could spend hours, days, weeks, just wandering around in them, touching things, looking at things, talking to the owners. Then for a few years I would see my friends on their trips into Chicago. During this time Wal-mart opened just outside of their town.
One day I get a call from my friends, they have a project that I could help them with. On the way to their house I pass through their little town so I think to stop at one of the hardware stores to pick up a couple of things. I did not get them up in Chicago because I wanted an excuse to go to the old hardware store in their town.
I know you are all ahead of me. Both hardware stores that had been there for at least 100 years were closed. In fact it seemed that most of the town's entire retail strip was closed. Wal-mart was not only the cheapest place to buy anything in town it was the about only place to buy anything.
And I do not mean to single out Wal-mart. Most stores now seem to be chains.
But there are still a few mom & pops left and I want to help them. Getting a free POS system may not be the difference between staying in business and going belly up, but it may help.
So I started working again on the POS program but this time with the intention that it be a complete POS system for a stand alone store.
This meant that the POS program would have to have many more features than one that was designed for a concession in a host store. I did some research and came up with features for inventory, receiving, categories, vendors, and many more. So I reworked the program with all the new features and after about 10 months of work I released version 1.0 in June of 2001.
Then the guacamole hit the fan. I had designed the program to be able work for a retail key shop located in Illinois, after all that is what I know. It seemed to me that most other businesses would be able to enter their own merchandise to the stock table and plug in their local tax rates and then start ringing up sales. Boy, was I naive.
Error #1 was the fact that I uploaded the program on the internet and you know what, the internet goes everywhere.
Error #2 was that there are people all over the earth who are writing tax laws, they do not talk to each other, and they are all INSANE.
Error #3, was not realizing that there is all kinds of stuff that can be sold and some of it can be sold in fractions of a piece, like 3.562 kilograms. Or you can sell a whole lot, or very little. Or it can cost a whole lot, or very little.
Error #4, was not realizing that there is a whole lot of different POS hardware out there that folks will want to use and that it is made by lots of different companies and it all works differently.
A possible Error #5 was not to realize that you folks are not shy at all. It has been impressed on me that no one reading this has any compunction at all in telling me that I am retarded for not including a feature that must be in the POS program or all life on earth will end.
There are many classes of features that are asked for.
Some features that are asked for make no sense whatsoever. The request seems to be in English, they use English words, the sentences have verbs and nouns, and most of the words seem to be spelled correctly. However when I try to determine what is being asked for I have no idea. I usually ask for clarification but the reply I receive makes even less sense than the original request. At this point I just say that I am sorry, that it is me, not you, and toss it in the wastebasket.
Some requests I can understand but it is clear the no other life form on this planet (including bacteria) would have any desire for this feature. If this feature will require almost zero time to create, use almost zero code, not screw up anything already in the program, and I find it interesting, then I may do it but probably not.
Next are requests that will be really useful and can be used by many if not most users. These are the most difficult features to decide to add to the program. They have to go through POS triage. Add points if the feature will be used by most users. Subtract points if the feature will take a lot of time to write or use a lot of code. Add points if the feature will bring new users to DHPOS because the program will now be usable in their type of store. Add points if I think that adding the feature will be interesting or fun. The higher the feature scores the more likely that the feature will be added to my "think about it" pile.
The last type of requests is features that absolutely must be added to the program. Either everyone will use the new feature or, for large segments of the users, the program will be totally unusable without it.
Then there are bug fixes. These go in no matter what.
So over the last several years I have received hundreds if not thousands of requests for new features. I am no longer bored. There have been many upgrades and new versions of DHPOS over the last 4 years. A new version comes out about once or twice a month with new features, maybe a couple of more with bug fixes.
This is also form of social networking and it does not require me to join anything, like Facebook or Myspace. Every day I receive a dozen or so emails about the program from all over the earth. I do not blog but I do have this website to post my random ramblings. There is a chatroom for DHPOS where I hang out every night and sometimes others come there also to provide me with someone to talk to. DHPOS gives me something to do.
One purpose of the program is to help small or medium business to compete with large chain stores. But mostly I am doing this to have fun. I do this for a hobby although donations to the cause will help me do it better. The first version of this program was released in June 2001 and it has been continuously under development since then with hundreds of new versions and upgrades released.