Solo712
Registered User.
- Local time
- Yesterday, 23:41
- Joined
- Oct 19, 2012
- Messages
- 837
Hi everyone,
In my experience as a freelance software developer, the biggest obstacle in running the business has been to get paid for my products, even from people who expressed satisfaction with what I delivered to them. In the eighties I eventually gave up and got a “regular job” in IT. At the end of my freelance career then I was left with cca $40k in uncollected invoices. Some of the characters I dealt with were downright brutal. They would pay me the up-front fee and maybe one or two stages but found thousand reasons why not to send the final cheque which as a rule represented 30-50% of the contract. It always seemed at the end of job when payment issues bubbled up. One client, a financial advisor, told me he was not going to pay me because he discovered an error, and he did not trust me to fix it; and at any rate that before any more dealings with me he would have to have the source code.
Barely after a week, at Cumpuserve, then the PC maniacs’ gathering place in Montreal, I was told by a friend that he was contacted by a character from Phillips Square who asked him if he knew how to decompile a program and then to do modifications on it, among other things, to remove my name as author from the splash screen. So, I created a time “bomb” which would terminate the program at a date in the future, and after it wiped out his data. My buddy then delivered the “improved” product – with one or two of the mods requested – the others he said he could not get into. My client jumped on it and in two months’ time ended up with a screen message : “No data, sorry !”. When I ran into his colleague downtown some time after this he told me the character went bonkers because he was relying on this program extensively and used it as a showpiece to impress his clients. He had since commissioned a new programmer to redo the program. He asked me if I knew what happened. I told him I had no idea.
After I started to do custom Access apps in 2012, the situation repeated itself. Now, I have to have a signed agreement in place before I proceed. Still, on two occasions I ended in the Small Claims Court. I am happy to report that I won both cases, (the second one was settled out of court). In the first trial, the deciding factor was that the client admitted in an email to me he wanted to keep the product and offered to settle for a lesser amount. The judge said that this indicated to him that he wanted to have the program but at a price point different than the one he agreed to pay me. That in his view made all other points in the defense moot.
These experiences convinced me that a more focused approach was needed. My agreements now have a clause that explicitly states that the application is licensed – not more than that. It does not say how the licensing operates – it is inserted simply to affirm my rights of authorship, which is not in any way abridged by the agreement. If a customer desires a source code, it is a different agreement (which has a non-compete clause) and that adds a bit to the price.
So, now my products have a licensing module. Each program would come with a license in the form of an I/O file that holds an encrypted string. The host program then decrypts the string and creates a license mirror in an Access table which allows license check after the initial install but no mods of the license string itself. There are three types of licenses, temporary renewable, temporary non-renewable, and permanent. This arrangement has the advantage of easy (and safe) transport of licensing module, where a small I/O file can be emailed instead of the whole front-end where the license (and management module in the library).
To give you an idea, I am attaching a License key generator (slightly modified from what I use), a (proprietary) encrypter module and a small manual how to use the two units and how to decode the strings the Generator creates. I would like you to evaluate the setup and send me your comments. Send also your stories, if you have come across anything like I described above. Best to all in the New Year.
Jiri
In my experience as a freelance software developer, the biggest obstacle in running the business has been to get paid for my products, even from people who expressed satisfaction with what I delivered to them. In the eighties I eventually gave up and got a “regular job” in IT. At the end of my freelance career then I was left with cca $40k in uncollected invoices. Some of the characters I dealt with were downright brutal. They would pay me the up-front fee and maybe one or two stages but found thousand reasons why not to send the final cheque which as a rule represented 30-50% of the contract. It always seemed at the end of job when payment issues bubbled up. One client, a financial advisor, told me he was not going to pay me because he discovered an error, and he did not trust me to fix it; and at any rate that before any more dealings with me he would have to have the source code.
Barely after a week, at Cumpuserve, then the PC maniacs’ gathering place in Montreal, I was told by a friend that he was contacted by a character from Phillips Square who asked him if he knew how to decompile a program and then to do modifications on it, among other things, to remove my name as author from the splash screen. So, I created a time “bomb” which would terminate the program at a date in the future, and after it wiped out his data. My buddy then delivered the “improved” product – with one or two of the mods requested – the others he said he could not get into. My client jumped on it and in two months’ time ended up with a screen message : “No data, sorry !”. When I ran into his colleague downtown some time after this he told me the character went bonkers because he was relying on this program extensively and used it as a showpiece to impress his clients. He had since commissioned a new programmer to redo the program. He asked me if I knew what happened. I told him I had no idea.
After I started to do custom Access apps in 2012, the situation repeated itself. Now, I have to have a signed agreement in place before I proceed. Still, on two occasions I ended in the Small Claims Court. I am happy to report that I won both cases, (the second one was settled out of court). In the first trial, the deciding factor was that the client admitted in an email to me he wanted to keep the product and offered to settle for a lesser amount. The judge said that this indicated to him that he wanted to have the program but at a price point different than the one he agreed to pay me. That in his view made all other points in the defense moot.
These experiences convinced me that a more focused approach was needed. My agreements now have a clause that explicitly states that the application is licensed – not more than that. It does not say how the licensing operates – it is inserted simply to affirm my rights of authorship, which is not in any way abridged by the agreement. If a customer desires a source code, it is a different agreement (which has a non-compete clause) and that adds a bit to the price.
So, now my products have a licensing module. Each program would come with a license in the form of an I/O file that holds an encrypted string. The host program then decrypts the string and creates a license mirror in an Access table which allows license check after the initial install but no mods of the license string itself. There are three types of licenses, temporary renewable, temporary non-renewable, and permanent. This arrangement has the advantage of easy (and safe) transport of licensing module, where a small I/O file can be emailed instead of the whole front-end where the license (and management module in the library).
To give you an idea, I am attaching a License key generator (slightly modified from what I use), a (proprietary) encrypter module and a small manual how to use the two units and how to decode the strings the Generator creates. I would like you to evaluate the setup and send me your comments. Send also your stories, if you have come across anything like I described above. Best to all in the New Year.
Jiri