It’s 12 minutes after midnight, and Table Diff has been released.
I am really excited about Table Diff. I hope it will make the life easier to some people out there. The starting price is € 49, as I want this product to be accessible to small companies and freelancers too.
I plan to make weekly releases with bug fixes (hopefully few) and improvements. In the first few months I might do bi-weekly releases, to push as many fixes as possible to the user base.
Back to work now.
One of the things I am trying to achieve as I develop Table Diff is speeding up the development process. In particular, there are a few things that take time to do:
- For each deployment, a zip version must be created and uploaded to the server.
- For each deployment, an installer must be created and uploaded to the server.
- For each deployment, a database located on the server must be updated, so that the Table Diff Updater knows what’s the latest version available.
- For each deployment, a specific directory structure must be created on the server, to ensure previous versions are not overwritten.
- And much more…
These steps not only are required for deploying a new build, but they are often required when I need to test Table Diff itself. Manually performing these steps every time I need to test the installer, the updater or simply want to deploy Table Diff is out of the discussion, also because doing all of this manually can easily lead to errors.
In order to improve the process, I have added some scripts to be executed at every successful build. The scripts will create the required zip file and update the installer script and create the Table Diff Setup file. This was easily achieved within Visual Studio.
Next, I developed a little program which I called “Table Diff Deployer”, which is in charge of preparing the directory structure on the server, uploading the various files and updating the database. I am really happy with the improvements done. From now on, I can focus on improving Table Diff rather than copying files around!
Operational effectiveness should not be confused with strategy. If we try to distinguish our company from our competitors by exclusively improving operational effectiveness, we will end up joining a rat race that no company can win.
Selling our products for less is not a strategy. If all of our competitors do the same,we will end up working harder and earning very little. So litte that our business will become unsustainable.
Instead of joining the rat race to winning the “can work harder for no profit” trophy, focus on adding value to your products. Your strategy should identify things that your competitors are not offering and that your customers will want. And, your strategy should identify, develop and exploit core competencies within your company.
I am currently working on Volpet Software’s strategy. The competition out there is pretty though, specially for those that are just trying to copy what the big ones are doing.
Following are the foundation of the current strategy:
- Further develop the core competencies;
- Exploit the core competencies by delivering unique core products;
- No outsourcing of any core competency;
- Focus on solving specific use-cases (e.g. the software developer who want to synchronize development and production databases);
The reason why I want to cultivate core competencies is that those will bring multiple opportunities in the future. Each core competency will lead to one or multiple products and services.
Honda is a living example of this theory. At Honda they cultivated their core competency in designing and manufacturing engines and now are exploiting this core competency by manufacturing all sort of products, from cars to motorcycles to quads and …trimmers! Go and look it up!
Following are two related readings:
- Michael E. Porter, What Is Strategy?, 1996
- C. K. Prahalad and Gary Hamel, The Core Competence of the Corporation, 1990
Socializing, specially through a computer, is not easy. I find much easier building relationships by meeting in person, possibly over a coffee, rather than e-mailing or twitting or similar. I also find that socializing “in person” is much more entartaining, and definitely more productive. However, I cannot ignore the power of blogs, twitter and similars. Therefore, today I decided to spend a bit of time organizing how I will be making the most of this new trend. I need a strategy!
The first problem that needs to be solved is where to post what. Some people mix everything together. Personal with business, for example. I feel that’s not the best approach, as people interested in one will rarely be interested in the other. For example, I don’t think your customers will care if you go cycling this week-end.
The solution to this problem is simple for me. I will attemt to blog and twitter only about business-related or it-related issues. I will attemp to minimize the amount of posts that can be categorized as “personal”. One of the reasons for this decision is that I do not have much time available for this, and I really need to make the most of the few minutes I can dedicate to this every day.
An alternative solution would have been creating a personal blog, where personal stuff could go. However, that would not work with me – as there is no real need and I really don’t have time for it.
So, my strategy is:
- Publish stuff only through this blog and Twitter;
- Try to publish something on Twitter every day;
- Try to publish something interesting on this blog at least 3 times a week;
Then, my Google Reader is packed with feeds, and I really cannot keep up with them. Is too much stuff to read. Most of it is really really good, but it’s just too much. Therefore, tonight I will clean it up and make sure only the top cannot-live-without stuff will stay.
Finally, for what concerns blog posts, I will try to contribute to the “body of knowledge”, try to publish information that is useful to people involved in this specific business and in the IT business in general.
I’m quite new at this, but hopefully I’ll find my way!
I haven’t managed to complete testing Table Diff yet, as I have been busy with my part-time Masters degree. I will need to push the release data to January 2010. Table Diff is more or less ready, but I really don’t want to risk releasing something that is not 100% tested. Data is important, and I want to make sure Table Diff takes good care of it.
In the meantime, I am making a list of improvements that can be done after the first release. A lot of it has to do with performance improvements. I would like to take maximum advantage of multi-core processors.
This week I received an e-mail from a potential customer. This is quite exciting, considering that Table Diff has not been published yet, and that I haven’t done any marketing yet. I am looking forward to release Table Diff and hopefully make the day easier to the database administrator or developer who wishes to synchronize two database tables.
There has obviously been a gap of four week-ends in the documentation of progress
Unfortunately I am more of a programmer than a writer, and it’s very difficult for me to stop coding and start writing…
Anyhow, tonight I forced myself to sit down and spend a bit of time to summarize what I have been doing during the past 4 weeks, what’s left to be done and to discuss if there are any news.
During the past four weeks I spent most of the time working on Table Diff, making sure it does what it says on the box. There were a few things that I was worried about, including:
- Automatic updates;
- Error handling and reporting;
For what concerns automatic updates, at the very beginning of this project I thought the application would not need such a feature. The application would not need to check if a new version was available. However, this decision put a lot of pressure on me in trying to make sure no bugs could be found in the first version. Obviously, I soon realized that it would be easier and safer to include a “check for updates” feature rather than going crazy tring to find out even the tiniest bugs.
So, now the application silently checks if a newer version is available. If so, it asks the user if he wants to update. Table Diff is pretty light (approximately 5 MB at the moment), therefore the update should be quite fast (I guess most people will download and install the update in less than a minute).
The “check for updates” functionality also makes me feel a bit safer. If someone finds a major bug, I can just release a new version with a fix to that bug, and hopefully most people will not be affected by the bug. I now feel that ALL desktop application should have this feature. It’s so useful!
Next, I worried about error handling. I want to know what problems the users are encountering, so I can fix them. However, people do not always have time to spend to send you detailed error reports indicating the scenario in which a specific bug can be reproduced. So, I decided to put a good bit of effort in devoloping an error-handling mechanism that will catch the most important details about an error (e.g. the stack trace) and will ask the user if he would like to notify Volpet Software about it. This is currently under development, but I guess it will be ready soon
Today I completed working on the Volpet Software logo. I have done it myself. I really did not feel like spending 500 Euro and risking not being happy with the work. If the company will go well, then I will definitely get someone to improve it. However, for the time being, it does the trick. Designing this logo took around 3 or 4 hours. Hopefully by tomorrow night I will have the Table Diff logo ready as well. The idea at the moment is to have a box with two tables in it, two arrows indicating data flowing between the two tables, and the text “Table Diff” on the right of the box. Simple enough, but it might prove challanging for me.
For the design of the logo I am using the Gimp. It’s the only graphics editing program I can handle, and Photoshop is way too expensive (again!) for what I need to do.
The big news: I plan to release the first version of Table Diff on Sunday the 1st of November (2009!)
It’s a very tight schedule, but I will try. I profoundly believe in Parkinson’s law “work expands so as to fill the time available for its completion”. I feel that having a tight deadline allows me improving productivity and allows me to focus on what’s important. There’s no time for stuff that’s not important!
To improve productivity, I have also started doing something that I’ve never seen anybody else do. Whenever I start a new task (e.g. fix bug #123), I write down on a piece of paper the exact time in which I start, and then when I finish I write down the total number of minutes (or hours) it took to finish. This challanges me to do what I need to do as fast as possible, without getting distracted with other things. It’s very easy to get distracted when you start googling for things. So.. this seems to help out. Give it a try
I am planning to discuss Table Diff in my dissertation (yes, I am doing a masters). I am currently evaluating if I could discuss the algorithms side of it. It would be interesting to make a performance (e.g. speed or memory utilization) comparison between the leading products and see which one is the best. Then make Table Diff the best one, and discuss in the dissertation how I achieved that. Obviously it’s an ambitius project, but heck, I guess I could give it a try
Now, what’s next?
- Complete error handling solution;
- Design the Table Diff logo;
- Complete the setup program using Inno Setup;
- Develop a simple form to collect the user email address when he downloads the trial, so that I can ask him for feedback later on;
- Do some performance fixes;
Ohh, I forgot to mention that this week I tested the comparison algorithm against two tables with 2,000,000 records each, and worked like a charm. It took under 10 seconds to compare the two tables. I was quite happy with the results. The tables had only 4 columns each, but I guess that the performance is already acceptable.
Good night, and stay tuned! I’ll try to post more regularly!
It’s Monday night, just after the third week-end since I started writing about this project. I am very happy with the progress done considering the time available. The website is nearly complete. I have created all pages, including a screenshot-based walkthrough. The only bits that are missing are the YouTube movies which will show how to use Table Diff. Now that the website is 90% completed, I decided to dedicate myself to the development of the application. Once the application will be 100% ready, I will create the YouTube videos and we will be ready for selling!
So, here is what I have been up this week:
- Created all the remaining pages in the site;
- Completed working on the home page;
- Created a screenshot-based walkthrough;
Then, I’ve done something cool. I have created Google Alerts for keywords such as “Compare Tables”. This is pretty cool because now everytime someone is posting something to StackOverflow.com containing “Compare Tables” (or similar keywords on similar websites) I will get notified. Once I am notified, I can read the post and evaluate if the user could be interested in buying Table Diff. If so, I can tell him that I have developed such an application and that he can try it free of charge for 30 days. Sounds good eh?
It’s a bit like Google AdWords, but without spending money.
In Google AdWords, your advertisement is shown on Google when someone searches for something. With Google Alerts (free) you can set to be notified when someone writes something. Obviously, it takes a bit of work – but I it’s definitely worth it. It will also allow me to understand similar problems that users are trying to solve. For example someone might be looking for “Compare Tables in different database management systems”, and I could find a new niche. Or something like that.
This Saturday I went to BizCamp, in Dublin. I really enjoyed some of the sessions. I was impressed by the tips on branding for start-up from Gerard Tannam. One of the concepts that I liked the most was the fact that we ultimately are in the “Business of People” rather than simply in the “IT Business”. What that means is that we constantly interact with people, and it is how we interact with them and the relation we establish with them that distinguishes us from a competitor.
People are extremely powerful. If you’re good to a customer, there are great possibilities that this customer will talk very well about you to his collegues and friends and reccomand you. It happens all the time. If we admire someone, we want him to be well. So, if a customer really admires you, he will do his best to make sure you will do well. I know exactly what this means. For example, I always loved Quake 3 from ID Software. I thought John Carmack and the guys at ID Software were (and still are) just the best. Their games really rocked. And, I remember perfectly how I have always tried to convince my friends to buy original copies of Quake 3 or any ID software game, and not to download pirated copies from the Internet. My explanation for this was: they really deserve the money! And you should be proud of having one of these original CDs!
I guess the same applies in all businesses. The guys at Apple are very good at this. People will buy and convince you to buy anything that has an Apple logo on it.
Anyhow, this session renforced my idea that we should be happy to help our existing customers, and to try our best to fullfill their requests (e.g. feature requests). That’s our way to make sure they are happy with us and also to make sure we develop a unique product!
This is the end of the second week-end since I have started documenting the progress with Table Diff and Volpet Software. This week everything went extremely smooth. One of the main tasks was finding a payment processor and develop whatever was needed to support the payment process.
Luckily enough, I found out that e-junkie exists. It’s basically a very easy-to-use middle layer between you (the developer) and the various payment processors. I feel the main advantage of this middle layer is that you can offer to your customers different payments methods (e.g. PayPal and Authorize.NET) and only have to integrate with one system (e-junkie) rather than integrating with all the systems supported (e.g. PayPal and Authorize.NET).
So, everything is configured now! I have already done some tests using Ania’s (my fiance) credit card and it looks like everything is working fine. I have some “ADD TO BASKET” buttons provided by e-junkie on my website. I click on it, and the e-junkie shopping cart is opened. I click the buy with paypal button and enter credit card details. Make the payment. E-junkie is notified by PayPal that everything went okay. E-junkie queries a web-service exposed by my lovely dedicated server and gets a License Key that depends on to the name of the customer. E-junkie sends the license key together with payment information to the customer, and then notifies me that everything went well and that we’ve got a new customer.
Currently I am only supporting PayPal payments, but I am looking forward to enable Authorize.NET as soon as I will have a business bank account. Hopefully Google Checkout will also be available for Ireland soon. It’s currently available only for the USA and UK.
I have done 90% of the work on the “Buy Table Diff” page, which also provides links for downloading the app. I wrote some code for validating the license key, and it’s working fine.
So.. what’s next?
- Do the remaining 10% of the work on the “Buy Table Diff” page;
- Develop the screenshot-based walk-through;
- Record an introductory movie clip of the app;
I also want to read a bit about improving UI for windows applications. I am thinking that maybe it would be a good idea to get away from the usual Windows Forms colours, and try to move towards a web user interface. Don’t want (and can’t!) spend too much time on this though. It’s not something crucial.
I am a bit worried regarding the testing for this application. It will take a lot of time. I need to test it on different operating systems and against different editions and versions of SQL Server. It will be hard work. And I am sure issues will come up. I am doing some research to find out if it’s possible to put together:
- Unit testing for my code;
- Continuous integration;
- Automated testing (e.g. databases are automatically created, application is automatically installed, databases are compared, application is uninstalled, databases are deleted and encountered issues are reported);
I am not sure I will have the bandwidth to put such a system in place though. I will need to investigate more.
Last night I mentioned the word “dependencies”, and here is a nice example: I am entering products in E-junkie, the selected payment processor for Volpet, and I just realized that I still have not decided the final price for the volume licenses.
So, I had to create my first Spreadsheet in Google Apps for Volpet!
I decided the initial price must be € 49, and that the discount should not be greater than 45%.
I have set the initial price to € 49 for a number of reasons:
- I want the price to be competitive, but still high enough to pay the bills;
- I feel that 49 Euro (or approximatively 70 US Dollars) is an expense that the avarage freelance developer or small company can afford;
- The application is new, and I am sure that issues will come up. There are too many scenarios to be covered (e.g. different operating systems, different versions and editions of SQL Server, different data types). Don’t want to sell something that might not perfect for lots of money.
- There’s always time to bring the price up. But if I start with € 99 or € 149 and then bring the price down, existing customers will be quite disappointed. You don’t want that!
Google Spreadsheet worked well, so now I can come back to E-junkie and enter the prices! Cool!
Would be nice to get a nice order for 80 licenses. Humm… € 2149! That would keep me coding for a while!
The week-end is approaching, therefore I had to work a bit on the to-do list. The most tricky bit now is identify dependencies between tasks. So, here’s what’s next:
- Understand which payment processors we should use (I know I will be using PayPal, but maybe 2checkout as well? not sure if it’s only for US businesses – need to investigate )
- Create the “Buy” page, which lists the various prices, offers and alternatives;
- Integrate with the various payment processors;
And that’s for what concerns payments. Then I need to:
- Work on the download page;
- Prepare an initial introductory video in YouTube (I’m think it could make sense creating a YouTube channel which features tutorials and similar content);
- Prepare a screenshot-based walk-through (for the guys with slow connections);
Hmm… okay, that will keep me busy for a while.