Today I just took a look at the number of unique visitors my company’s (LandlordMax) website got over the past year, and I just noticed that it’s now tripled in traffic in just one year! Well we’ve actually only increased by 2.953x over 1 year, but that’s close enough to 3x. Very exciting! It really shows that interest in LandlordMax is growing, and growing fast!
Today I just received the following great testimonial. Thank you very much for the positive feedback Briana!
“Thank you very much for all of your help. Please rest assured that your product will be highly touted by myself, my staff, and the owners of my property. Thank you again.”
It’s official, version 3.11 of LandlordMax has just been released within the last few minutes!!!
Although we wanted to launch LandlordMax version 3.11 late tonight, I’ve decided to push it back another day. We’re almost there, we just found one last very minor bug that I’d like to clean up before we go live (I’m a perfectionist at heart when it comes to LandlordMax). In the meantime, here’s a sneak peak of the release notes (minus one main feature).
It’s just as well that we delayed it one day because while I was finishing up creating the last of the Release Notes tonight, I couldn’t come up with a good way to represent some of the very major speed improvements we’ve done in this version. The database I was playing with to create this particular animated tutorial consists of:
- 30,394 Accounting Entries (483 pages worth of entries)
- 921 Scheduled Accounting Entries
- 2,293 Tenants
- 2,414 Units
- 247 Buildings
- 75 Vendors
- 14,282 Invoices
- 2,182 Scheduled Invoices
- 13,950 Receipts
- 2,182 Scheduled Receipts
- 19,149 Workorders
All this was running on my desktop that’s almost three years old now (it runs on a basic P4, 2.4Gz Intel processor). To view the Accounting Entries Workarea which includes displaying 30,394 entries (I didn’t apply any filtering) and process the 921 Scheduled Accounting Entries (to see if any Suggested Accounting Entries are due), it took about 4 seconds! And that’s while I was running a video and audio recorder capturing everything going on on my screen!!! Without the recorders, the time significantly drops.
So all this to say, we’re extremely close to releasing LandlordMax version 3.11. I suspect it will be tomorrow night in the wee hours of the night. You always want to release your software when it affects the least amount of people, when you have the least amount of traffic to your website, which is generally late at night when everyone’s sleeping.
In any case, as I mentioned above, if you’re interested in getting a sneak peak, you can see a preview of the release notes for LandlordMax version 3.11 here.
Let me know what you think.
Most people probably think it’s not that important, as long as it just works and installs your software for you. However the reality is that this is far from true. Your installer is the first impression people have of your software, and you only get one chance! If it doesn’t work, if it’s hard to do, it will cause a negative perception of your software before they even have a chance to try it! I don’t know how many of you are familiar with Zune, but this software is getting a horrible reputation online because of how difficult it is to install. Just look at the size of this review, it doesn’t really talk about the software, it’s all about how horrible the installation process is! So why start with a negative against yourself when there’s no need.
Not only is it your first impression, but just as importantly it’s not part of your core product. So in other words, not only is it important to do right, you also don’t want to spend too much time on it (it’s used only once) and it’s not your core competency. Talk about contradicting priorities!
Therefore, that being said, I strongly suggest you look at a software solution that will build your installer for you. Some of them are great, others not so great. Not only that, but they also range in price from free to very expensive, as well as in complexity, and what you can do with them. Before I start to go into details, just to give you a disclaimer, we at LandlordMax now use Install4J which I strongly personally recommend.
Getting back to the discussion, I’ve personally used 4 different installer packages in my career, including 3 with LandlordMax alone (there is some overlap). The first installer I ever played with was a custom built installer for the company I was working for at the time. Yes this solution worked, and it had by far the most customization, but it was also the most expensive to maintain and support. It’s really a second application for the company. They eventually moved to InstallShield, which at the time was one of the better solutions (this was many years ago). It worked, it definitely simplified the installer process. Now although I said it simplified it, it wasn’t the end all be all solution by far. If I remember right (this is a long time ago), every wizard screen had some code behind it in InstallShield’s own proprietary language. And at that time if you clicked on the back button, it didn’t remember the state you were in, which resulted in some very crazy scripting code.
Moving on to today and LandlordMax and skipping several other installation experiences, we initially started with InstallAnywhere. One of our requirements was that the installer we used also install a JVM with the local application. I don’t remember why I picked InstallAnywhere, this is about 4 years ago, but that’s the solution I chose. After a couple of years, we also started to use NSIS (Nullsoft Scriptable Install System) for our patches, which created much smaller installers (the patch installers just overwrote some files in the application directory versus a full install). I used NullSoft for the patches because it was a much quicker and simpler installation than InstallAnywhere.
At several points, we even looked at using NSIS to fully install LandlordMax, but let me tell you this is a complex endeavour! Although NSIS is a great little installer, it’s all script based. That means you need to learn another programing language. Not only that, but you need to become proficient in it do anything beyond the basics. Yes, we could learn it, copy snippets, etc., but from that point on we’d have to keep maintaining it. Someone would always have to be familiar with the language. This might seem like a small factor, but let’s say the “Installer person” quits? We have to find someone with that skill or train another person. Very expensive! Especially having gone through something similar with my first installer experience, I’m not willing to go that route again.
Since I wrote about JProfiler here on my blog, the people who make this amazing software contacted me to tell me about their installer solution called Install4J. After a few emails with them, I decided to give it a test run, and boy am I glad I did!!! They’ve created an amazing installer that’s in the same league as their code profiler! Within 1 hour I had created a brand new and fully functional installer for LandlordMax, including time to read a couple of advance features in the user manual! That’s amazing! Not only that, but if you consider the human resource costs of learning an installer like NSIS and the cost of Install4J, Install4J wins hands down!
I did mention that we were using InstallAnywhere as well. After trying Install4J, we decided to convert entirely over to Install4J and stop using InstallAnywhere. It was a good product for us at the time, but it’s now time to move on to a great product like Install4J. This is why in the upcoming version of LandlordMax later this month you’ll see a new look and feel to our installer. We’re now using Install4J for all our installers.
Why did we convert over? For several reasons. First, it was just too easy to learn and use. To do the same things I did in InstallAnywhere in Install4J takes me a fraction of the time. And I’m not the only one who thinks this way, the following thread on JoelOnSoftware has other people expressing their sentiments on the unnecessary complexity of InstallShield (same family of products as InstallAnywhere).
It’s not just the complexity of creating an installer, it’s also the ability to perform tasks. Everything seemed intuitive within Install4J. To give you another example, let’s say you want to install an application local JVM with your installer, you don’t need to go download it from their website (never mind finding it on the website which always take me a while) and put it in the right file location for the software to pick it up, they have it built right into their software. You just select the JVM version, and if it’s not there, you just press the “Download JVM” button right below which lets you pick it from a list. It then automatically downloads it, installs it, and you’re ready to go. No need to do anything more.
Another feature I really liked about Install4J is it’s ability to compress the installer itself. With InstallAnywhere last installer had grown to over 35MB in size. With Install4J, our new installer is going to be about 15MB, and this is with a bigger install on top of that. That’s more than a 50% drop in download size! This might not seem too significant, but remember that if you have thousands of people downloading your software, it sure can make a large reduction in your bandwidth usage.
Something else I really appreciated, which I have to admit I’m not as familiar with in InstallAnywhere, is the ability for it to use files relative to the project file. Why is this important? Because I can use the Install4J installer script directly within an Ant task! I build my main Jars, pick up my other Jars and resources, and away I go, all from within the same Ant script. I can now check the installer script right into CVS, and any other developer who has a license to Install4J can create their own test installers! WOW! Yes you generally don’t need to do this, but when it comes to testing an install environment versus your local environment, there’s no faster way to get the latest install than just generating it yourself within your IDE at will!
Another thing to realize with Install4J is that it’s not limited to just Java applications. Actually I’d say it’s amazing for Java applications, but you can use it to install any type of software. They have hooks for pretty much all types of installs. It’s just that for us, we also need the ability to install an application local JVM, which greatly limits us in terms of which installer solutions we can use. If it wasn’t for this limitation, I would still use Install4J, it does everything you need your installer to do and more. For example it has the different install modes (silent, graphical, etc.), multi-platform support, multi-language support, etc.
As an additional little tidbit of information which really excites us, from what I understand the fine people at Install4J are looking at potentially extending their API to allow hooks into your own software application for auto-updates in an upcoming version! What this means is that you’ll be able to use their knowledge and technology to allow your customers to click on an “Update” button directly within your software which will update it, without the need to download and install a patch. This is great! Yes, we could build it ourselves, and we actually did look into it. From our calculations, it would take at least 2-4 weeks, so let’s say 20 days * $1000/day (this includes salary, benefits, etc. i.e. all the costs for one developer), then our costs is about $20,000. If we can outsource this technology, assuming the highest price point, we come out ahead by more than an order of magnitude! And not only that, this is their field of expertise, their core competency, and they will maintain and update the feature for us. We could instead spend those resources building other highly valued features that are unique to LandlordMax.
Therefore, as you’ve seen, your choice of how you build your installer is important. First, it’s your first impression, so make it a good one! You only get one chance! As well, since your goal is to minimize your costs in this area, you should look at purchasing a solution rather than building a custom one. If I had to calculate the costs of a custom solution, well any of the installers available today on the market would probably be cheaper. Even NSIS, which has many copy/paste scripts available is still fairly expensive in developer time. After having used several alternatives, I’m strongly recommend you check out Install4J. This is the one we’re going to be using from now on, it’s the best one I’ve ever worked with!
I just don’t get spammers… What are they thinking? Today I received over 2000+ spams of virtually the same email to the same email address box! The only thing they did to change the spam emails was change the sender the information once in a while. What are the odds that if I don’t open an email entitled “Extra!!!” from “see bucky” after 10-20 exact same emails that I’ll open it from “nydia avrom”, or from “benoite lizbeth”, and so on. For over 2000+ spam emails in one day (less than 10 hours actually)!
I just don’t get it. What are they thinking? What a waste of my time and their time. First they waste a lot of bandwidth, cpu cycles, etc., but they also force me to sift through a barrage of this garbage. Why? How can it possible be effective? After seeing 100 or so, it was pretty obvious what was going on.
I can’t wait until someone finds a good solution to this problem. SpamBayes, an open source software that was suggested to me in a previous article is really helping, but I’ll tell you, I’m opening up more and more to the idea of a small toll on emails. Even something as simple as 1 cent per email would be worth it. For most people, that’s under $10/year, which is worth it. That’s also cheaper than buying software to deal with this issue, not counting the time lost! And for spammers who send millions of emails, that’s a real good economic dissentive!
Home Prices Plunge by Most in 35 Years
Huge news for the real estate market!
Google Hardware circa 1999
Every company has to start somewhere! However going from this to virtually owning the internet in 5 years is incredible!
10 Reasons You Should Never Get a Job
Makes some very good and compelling points! I couldn’t agree more.
Speed Still Matters
Talks about how important speed and performance are when it comes to computers and peoples perceptions
How rich are you?
Enter in your yearly income and see where you rank in the world in terms of how rich you are
Why Poor Countries Are Poor
Although I generally avoid articles with politics in them, this one is very good.
The Build Server: Your Project’s Heart Monitor
Jeff really shows the importance of having a build server.
Yesterday I just the follow great testimonial from Becky Rivera. Thank you for the great compliment! You can expect to see it on our LandlordMax Testimonial and Success Stories page very shortly.
“Thank you so much for your prompt response and accomadating service!!!!! I’ve read the testimonials on your website and I can see why your clients are so pleased with your software and service. This response made my day and I really appreciate you solving my problem so quickly.
THANK YOU, THANK YOU, THANK YOU!!!”
A common question with software companies is when to release the next version of their software. Should it be as soon as enough new features and benefits are available that people will be interested in? Should it be when there’s enough value that virtually everyone will want to purchase an upgrade rather than only a percentage? Should it be every month? Should it be once every year, two years, etc.? This is a very hard question to answer and every software company handles it differently.
Not only does every company handle it differently, but sometimes different releases of the same product/project are handled differently! And this happens to be the case with this latest version of LandlordMax. Normally I only like to release a major version of LandlordMax when we’ve added enough new features that it will excite a large percentage of our customers! If it’s only a few features, we sometimes will just release that as a patch, but I generally like to push features to major releases.
This particular upcoming release will be different than usual in that it’s only been a short time since the last release. Although version 2.12 states that it was released in December, it was actually released in April. That means it’s been just 6 months, which is very quick for a new major release. Is it too soon is the better question! And this is where I’m facing a very big delimna which I’ve finally resolved over the last few weeks.
I’m sure you’re wondering why it was a difficult choice, and I’m going to explain why right now. In the upcoming version we’ve added several features that have a major impact on how people perform their daily tasks. One of these features is the “Late” button shown in this animated tutorial. Although this is just a simple button, the amount of effort it will save some of our customers is significant. Another small feature that has large implications is that when you now create a new lease, a scheduled accounting entry will also automatically be created for you. The more tenants (ie. leases) you have, the more beneficial this quickly becomes. For some of our larger customers with hundreds of tenants, this is a huge benefit!
On top of this we’ve added many other features. I don’t want to divulge everything yet, but another major new feature is the ability to create, store, and print receipts. This is a whole new section that many people requested. We’ve also added date formatting, some preference settings, etc.
As well, we’ve done a lot of very significant performance enhancements. Between version 2.12b and version 2.12c we initially did some amazing performance enhancements, as much as an order of magnitude faster for many screens (that’s 10x faster performance!). Well in this version we did another order of magnitude in performance for most data and list screens! We ran a test database with over 2000 tenants, over 2000 units, over 5000 workorders, over 5000 receipts and invoices, over 50,000 accounting entries, and all the related data. I can assure you that the larger your database, the more significant the performance enhancements! Some screens have improvements where the display is virtually instantenous for larger tables (under 1/2 second)! We’ve improved the speed of the UI (User Interface) and the database calls (which I’ll probably write about the later very shortly). All in all, there are some very significant performance enhancements in this upcoming version!
Now you’re probably still asking yourself where’s the dilemma? The dilemma is that we wanted to add two other new and very powerful features for this upcoming version. The problem is that neither of these features is going to be ready for at least 2 more months. So do we wait 2 months for these two features or do we go ahead and release now with all the great features and benefits we’ve already implemented?
You still don’t get the dilemma? The dilemma is that if we release now, we might now also want to release the other two great features in 2 months. Releasing major versions too often will annoy your customers! Nobody wants to be upgrading every other day. So if we release now, then when do we release the two other major features? In case you’re wondering, these are very highly requested features, so I believe they will have a significant impact on sales and customer happiness.
So we can postpone the release for 2-3 months, which means we lose revenue (opportunity cost) as with every new version, every new features, we increase our sales. If we release in 2-3 months, I personally believe that these two new features will generate additional significant sales by themselves! So we want those in sooner than later too. So if we release now, do we push those features to the next major release to avoid having too many upgrades and annoy our customers or do we release them in 2 months? Which do we do?
As well, each release has technical support costs. Although our upgrades are fairly easy to do, all you need to do is re-install the software overtop the old one (the database is automatically converted for you), many of our customers still require technical support. What you have to understand is that many of our customers aren’t all technically literate (we do offer the easiest property management software after all!), which means it will convert to some extra technical support costs for us. This adds to the equation in that more releases is more expensive.
So just to recap as this is fairly complex, here are our three choices:
1. Release today missing two major features. Re-release again in 2-3 months as another major upgrade (knowing that people don’t like too many new major releases, and that there will be additional technical support costs).
2. Release today missing two major features. Push the 2 major features into the next major release several months away, even possibly as long as a year (and lose the additional sales for that time).
3. Release in 2-3 months and withold all the great features we’ve already built. This also means we’ll lose additional sales during 2-3 months.
As an extra factor, September to April is our busiest time (they’re multiples of the rest of the year). So these 2-3 months are right in the middle of where we make most of our yearly revenue! This means that 2-3 months is actually like 6 months for most businesses!
Which would you choose? I personally opted for option 1. I’m willing to absorb the extra support costs that come with each upgrade because I think the additional revenue during our busy season will outweigh them. I also believe that we shouldn’t hold back our current features for these two other features, no matter how great they are! I don’t care if they’re pure gold, we already have so many highly requested features that I’d like to get them out there now rather than later. The other two features are important enough to me that I don’t want to wait until another major version, I’d rather release them as another upgrade in 2-3 months. They’re big enough to warrant an upgrade rather than a patch, but I’m not willing to wait for the next major release.
Which option would you take with these assumptions?
National debt of the United-States
Another graph of the debt, but this time it also includes the total debt (and lists which president were in office), as well as being adjusted for inflation.
Matching design sketches to the desired level of design feedback
The evolution of designing a computer screen from the initial picture to the final polished product.
Stop Rolling Your Own CSV Parser!
A phenomenal example of how a simple common programming concept can quickly escalate into a massive endeavour!
What I’ve learned from failure
Great article showing many of the ways companies and projects fail. Lots of great lessons here that are very applicable.
The Parable of the Two Programmers
This is all too common…
The market always amazes me. All it takes to create a market for a product is for someone to figure out how to market and sell it and find at least one interested buyer.