Normally in the past I’ve posted updates about what we’re doing here at LandlordMax (as well as my other projects) every six months to a year. Well I’m now going to try to increase that frequency to every 2-3 months. I’m doing this because it forces me to look more frequently at our successes and failures in detail. I always do some checks each month, but by forcing myself to post about the more interesting metrics on a regular basis will force me to look deeper into these metrics. Hopefully finding some great nuggets of information along the way.
Firstly, the most exciting and good news is our traffic metrics at LandlordMax. Our traffic, as measured in by unique visitors, has increased by a whopping of 108% in the last 6 months!! That’s our biggest success as it is translating into more sales.
As well our revenue growth is continuing to be very positive, which is great to see. For those of you who are fairly new here, in early April I posted a graph of our sales revenues over the last few years. In that graph there was somewhat of a spike in 2008. I’m glad to report it wasn’t just a one-off spike for January and February, it’s a consistent growth in revenue. May is already looking like another very big month, possibly the biggest yet!
I decided to also push the data further and generate a moving average graph using a 12 month trailing period (which is why the first 12 months are missing from this graph). I have to admit I was surprised with the results, it’s much better than I expected! As you can see below, we’re definitely moving in the right direction. The real estate bust is not hampering our growth, so it’s not all bad news out there. It’s definitely not all doom and gloom for everyone as you can clearly see.
Some other interesting news, FollowSteph is still growing at a very good pace. In the last 6 months the traffic on this blog has grown by 46% which is great. Although I was hoping to more than double it every 6 months, I can’t complain with this growth rate. The good news is that the RSS feed subscription rate has grown much faster than that, it’s pretty doubled in the same amount of time.
As for the book Interview the Pros: What does it take to create a Successful Blog?, it’s still being edited by my publisher. These things take time, which I have to admit is excruiating for me. I like to have things moving, I’m not a big fan of waiting. But the good news is that the book already has it’s own official ISBN number assigned to it. And most of the book’s cover and back copy is ready to go. It’s going to be available in both as a soft and hard cover book. I’ll let you all know as soon as the editing phase is done, which hopefully will be sooner than later. As well I have to finish the website for the book pretty soon, so I can start to do some pre-marketing. I’ll let you all know when the website is available.
As for the ebook I wrote How to Generate Traffic to Your Website it’s done fairly well overall. I have to admit I was hoping for better results, but this topic seems to be saturated with lower quality ebooks. In other words a lot of people are suspicious of all books on this topic because of some bad experiences, so you really have to push hard to make the sale which isn’t really where I want to be (I don’t want to compete with the long spammy sales letters). However what’s been really interested is that ALL the reviews it’s gotten have been favorable! And each time a review came out there was definitely a spike in sales. But between reviews it’s pretty quiet. So I’m looking into what are my options for the future of this ebook…
Otherwise everything else is moving along very well. The biggest item is that we’re always working very hard on releasing the next major version of LandlordMax as soon as possible, which is coming together very nicely. Just extremely busy as usual.
Earlier this month there was a thread on Joel Spolsky’s BoS (Business of Software) discussion forum asking What would it cost to build this site. Of course it started innocently enough, with a simple statement:
We recently created a startup on which the website is an integral part. Customers rent our product for a specified time period. When you get right down to it, the required features of the website are no different than what would be required of a car rental web site.
Then came the big question:
My question is, what would a ballpark estimate of the cost be?? Again, the fully functional site would resemble a car rental company such as Hertz.com
This is a completely loaded question!!! There will of course be very large price fluctuations amongst the responses no matter who you ask, these requirements are too broad and open-ended. Sadly however I believe that none of them are near the “real” cost to build this website. I think the highest was around $150k if I remember correctly, with many saying that it could cost as little as a few thousand.
Honestly, to create a car rental service just like Hertz will cost a lot more than $150k. Thinking it will only cost a few thousand is insane. Sure you can say you will outsource it for a few thousand, but I can guarantee you what will come back won’t be what you expect. The price has to be reasonable. If it only cost a few thousand to successfully build this system, than all software, and I mean ALL software, would be outsourced. This isn’t the case. I have no doubt it cost Hertz a lot more.
It’s simple to over simplify how much effort is required to build a software application. So much so that the original poster chimes back in with:
There is just no way this would bet done under $10,000. As I said, the site is about 30 percent of what it needs to do. 5,000 lines of code, couple hundred manhours. The manhours are high as we constantly were changing things. But things are a bit more static now and it would be easier to write a detailed spec for he the remaining requirements.
Some additional “Major” components:
Security/Logins. Certain Admin people will be able to do everything. Lower levels will have limited capabilities.
Audit trails for all changes by personnel. If someone changes a record or changes a reservation it needs to be logged.
RealTime Inventory Management. If inventory is low at certain times then site needs to prevent reservations from taking place. Also ensure inventory was the right stuff when it is returned.
Again, think rental car website. I was thinking more along the lines of $50K to $150K.
Just reading these specs I can very quickly see this site greatly increasing in complexity and scope as the details are filled in. Never mind that the scale of users or data hasn’t even been taken into consideration. In any case, I personally don’t believe that this is possible for $150k, it way too optimistic. The vast majority of the posters are thinking of the simplest solution, but I can already see from this slightly “enhanced” description that it’s not going to be the simplest solution. The requirements are only going to grow, and grow fast they will, otherwise known as scope creep in the software industry.
But alas not everyone agrees. Further down someone comments:
I dunno ’bout 100K. My devs do quite a bit of these sites in the $20K to $50K range … but we don’t have a tight enough spec yet do we? Could (maybe) hit the 6 figures once the full spec is known. The folks suggesting a couple of grand, though, they’re smokin’ crack.
Even though this person agrees that building it for a few thousand is too cheap, he still suggests a price that’s way too low. I have no doubt it cost Hertz much much more. I agree that a simple car rental system could be built for around $100k, but that’s a SIMPLE AND MINIMALISTIC car rental system and NOT a replication of a full blown car system as is suggested. Audit trails, realtime inventory management linked to reservation system, reservation system, scheduling, etc. And these are just listed as “SOME” additional “MAJOR” components. This is not a simplistic system. It will grow in scale very quickly. Just look at some of the questions and issues that came up when we decided to add “simple” email to LandlordMax. And that’s just simple email!
So what’s going to happen. The person will eventually settle on someone who says they can build it for around what they think is reasonable. The delivered system either will not work at all, it will be severely delayed, or it will be severeled scaled back in terms of features and modules. Not only that, but assuming something is delivered, I doubt that it could scale up in terms of traffic load. At least not at that price, scalability takes skill and experience, not to mention effort.
And I haven’t even talked about bug fixing! What do you think happens when a software project can’t possibly be delivered within it’s deadline? Depending on how ethical your company, they might just deliver it in an unstable state where “fixes” will be added to the cost of the project after delivery. For example some software consulting firms are know to do this, deliver a project “on time” only to have the “support” costs be higher than the initial project costs. This way they can be the lowest bidder but yet still charge the real cost of implementing the software. And don’t think it doesn’t happen, it’s much more prevalent than you might think.
Software takes time and effort to build. It’s not that simple yet people continue to grossly underestimate the cost of development and wonder why things it’s late, why it’s buggy, why it just doesn’t work. The answer is simple, extremely simple, many many software projects grossly underestimate the amount of effort required. Although many people want to believe it’s more complex than that, it’s really just as plain and simple as that.
About a year and a half ago I was getting really frustrated with the levels of spam my personal emails were receiving so I wrote a blog post asking what others were doing to reduce their email spam. Someone suggested SpamBayes, a free open source solution, which worked great for a while but then I had some issues with it. This eventually lead me to InBoxer, which is basically a commercial version of SpamBayes.
Over the last year or so it’s been amazing! It uses Bayesian spam filtering, so it took a bit to get it fully going. But once up and running things were great. Unfortunately, last week for some strange reason the database corrupted itself. Who knows why but it was frustrating. My greatest fear was that as I was launching my new EBook I’d be in the middle of training the Bayesian spam filter. I couldn’t ask for worse timing!!! In the middle of promoting the ebook I’d have to look at every single email as the spam filters wouldn’t be trained enough yet.
The good news though is that because of the volume of emails I get I was able to train the spam filter to a good enough level before the ebook launch. It has slowed me down a bit, but not nearly as much as I expected. And it’s reminded me of the appreciation I originally had for InBoxer when I first got it. For $40 it’s well worth it!
As some of you know we use HelpSpot from UserScape as our technical support system. We’ve been using it for some time and it’s a great product. Today we performed a much needed upgrade as we were behind one major upgrade and at least a few minor updates. That being said, I know Ian, the founder of UserScape, has been very busy increasing its capabilities, adding many new great features.
We’ve been wanting to upgrade for a while, the only issue we feared was that we had significantly customized the templates to our website’s look and feel and it might cost us some effort. Right now we’re extremely busy and will continue to get busier until tax season. Our busiest time is actually from early fall to the end of tax season. We however decided to go ahead with it because our discussion forum is getting hit with more and more spam and we could therefore use the new captcha feature in HelpSpot to try to reduce it. There are many other great features, it’s just that this is the one that interested us the most right now.
Well let me tell you how incredible easy it is to upgrade HelpSpot! They have a page which lists all the changes to the template files you need to make. I’ve never seen clearer instructions. Not only did he highlight the changes, but he also included some of the template code above and below some of the examples. This really helped in cases where we weren’t a hundred percent sure because of the heavier customization we had done. I’ve personally gone over many technical documents which were suppose to be “simple and clear instructions” but were completely useless. This one clearly explained how to upgrade the custom templates.
The upgrade was so easy and simple that I can’t give it proper justice. Based on some of my other experiences I expected it to take some effort, especially since we significantly customized our integration with HelpSpot. It took me all of 15 minutes! Yes, that’s right! In 15 minutes I was able to upgrade all our template files as well as the full system. Everything worked right out of the gate the first time. Even the templates. That’s amazing! Congrats to you Ian and your team.
The only negative thing I can say about this upgrade is that I didn’t do it sooner. Not only is HelpSpot a great product for customer service, but upgrading is a also incredibly quick and easy. Even with heavy customization!
Before I begin, let me just say that this article was inspired by Andy Brice’s article The software awards scam. If you haven’t already read it, you definitely should. While I’m talking about Andy’s blog (Successful Software), let me just quickly add that I’ve been following it for some time and it’s very impressive. He has many really good articles, of which I’ve linked several across multiple posts here on this blog.
Getting back to the article, for those of you who aren’t familiar with software awards, many shareware directories (sites that are basically lists of software applications) sometimes give out software awards. What are software awards? The concept is that the better your software is the better the award you get. Maybe it’s a 4/5 stars, maybe 5/5 stars. Tucows (one of larger download sites) is famous for it’s cow awards (1-5 cows per software). Basically they exist to evaluate the software they list to let you know which ones are good and which aren’t.
Now if you think about it, how can some of these sites properly evaluate all the different types of software applications? They can’t possibly. What features make for a good property management software application? What features and usability make for a great mp3 player? What about a speaker testing software application? The list goes on. It’s possible but not on the budget many of these sites have. Especially when you consider that most are one person shops.
Even Tucows rating is very inaccurate. When LandlordMax was initially launched we paid for a Tucows expedited review (or whatever it was called) to get a detailed review report. We scored an average review. Not because of the features we offered or the usability, but because we didn’t provide some arbitrary features. These include:
- Flash-style or some form of professional visual intensive tutorial that aids in rapid learning of the program’s basic operation. (2 points). This is a nicety and doesn’t really tell you how effective the software is.
- Learning curve: “Does your application package offer quick launch, desktop or additional shortcuts?”. In no way does this describe the quality of the application.
- Repair function in the uninstall. How many applications really do have a repair feature that actually works?
- Functionality: “This is the Reviewer’s overall opinion of the functionality of your application. This criterion is rated in terms of functionality, speed, and resources.” Completely subjective. For example Photoshop sure takes a lot more resources than NotePad, therefore NotePad must be a much better application.
- Does it offer tips on startup? If it does, would that make the application any better? Would it help you play mp3′s with better sound quality? Would it help you balance your check book?
- “Linking customer support information into the application can gain you one to four points instantly, depending on what type of customer support you provide.” That’s for a whopping 9% of your total score! All I can say is wow. How can providing an embedded link to your customer service in the software make it better or worse, and especially by almost 9%
- File size. This is part of the “Program Enhancement” section. An amazing 3 points here. “If a competitor is offering the same exact features as your application and it’s half the size, it will receive more points that your application.” How can you accurately figure this out without a lot of effort, and even then… Unless you truly understand the benefits of Photoshop, how can you compare to the Windows Paint program?
- “Author home page: 2 points = The site contains contact information, brief program information, and online help and documentation.” Again, I agree that it’s great to have but it still doesn’t really tell me how good or bad the software is.
- “Cost vs. Value: With respect to the price you’ve set for your application, the reviewer’s ask themselves a question depending on what license type you fit under: (3 points)”. I’m sorry, but for property management and real estate software, unless you’re directly involved in the field you can’t possibly answer this question with any real accuracy. I’m sure the same is true in many niche markets.
- And the list goes on…
Overall, as you can easily see, their evaluation criteria clearly doesn’t measure the quality of a software application. It does measure something, and it’s should be consistent. Well even here I beg to differ. When we ran LandlordMax a second time through the Tucows rating service we got a significantly different score. Either way it’s pretty easy to game this system. If you provide a software that has an amazing installer, lots of documentation (the quality is indifferent), that’s small in size, and so on. you will get a good score on Tucows. The quality of the application (features, easy of use, etc.) is only a secondary concern. And it’s easy to understand why, there’s just no way they can accurately rate all the software applications submitted to them on an ongoing basis. Just reviewing LandlordMax requires at a very minimum some understanding of the property management and real estate domains.
And even with this poor rating scheme, it’s still only a rating scheme. They try to abide by it and do offer something. As long as you’re aware of what they really measure, they mostly do what they claim (giving them the benefit of the doubt here even as I had a somewhat contradictory experience with LandlordMax). When it comes to other shareware sites, unfortunately most do fall short. Especially with one person operations. There’s now way for them to review every piece of software submitted. It’s not possible.
And this is where Andy’s article really sheds some light into this industry. It’s something many of us suspected but didn’t know for sure. At least not until now that is. Andy took the time to write a dummy application (he actually just changed a text file to an exe by changing the file extension name from .txt to .exe) and submitted it to 1033 shareware sites. Many gladly accepted his software. Even better, many gave him 5-star reviews with nice shinny award graphics. Of the 1033 sites he submitted it to, 218 sites listed it and 394 are pending. Of the 218 sites, “approximately 7% of the sites that listed the software emailed me that it had won an award (I don’t know how many have displayed it with an award, without informing me)”.
Although I personally had a very strong suspicion it was a sham, I didn’t know to what degree (or for sure it was). We initially started to display the awards here at LandlordMax but quickly stopped once we started to get the feeling that they weren’t necessarily based on the quality of our application. We have some, but nowhere near as many as many as we could.
Although we stopped adding new “awards” we haven’t removed the older ones. Why not? This is where the reality of business and ethics step in. If we remove them and our competitors leave theirs on, then we haven’t won any awards in comparison. This might seem trivial but those awards can turn into significant differentiators, and hence real revenue dollars. We did receive them in good faith and have displayed them in good faith, well at least until it was recently confirmed otherwise. Now that we know we are faced with the dilemma of whether or not to remove them.
They’re still technically legitimate, someone did give them to us. No we probably didn’t earn them if we believe Andy’s report, but unfortunately I know Andy is absolutely right (numbers don’t lie). If we remove them we will probably lose some revenue from our less web-savvy customers. They will see our competitors showing their many awards and we won’t have any to match because of principles. Again, you have to look at it from the non web-savvy customer’s perspective, not you guys. They don’t know that most of these awards are a sham. Unfortunately we now know that the odds are very good that most of our awards are not “real”. The other side is that principles don’t always put food on our plates.
In this case I personally believe that the right thing to do is remove the awards page. In the long run our customers will appreciate our stance. They will appreciate our honesty. And therefore we will take down our awards page. Actually we might simply convert it to a “Reviews” type of page, similar to what Andy’s done with his website. I don’t know when this will happen since we’re already more than busy enough with our current workload (and this is a lower priority task after all), but we will make the change at some point.
Since we released LandlordMax with full Windows Vista support, we started to notice a certain level of error reports coming with messages stating that the software couldn’t write data to database because the database folder was read-only. Obviously, if the database folder is set to read-only, it can’t write, but the big question is why are any database folders being set to read only? Was it specific to Vista?
At first it was only a few read-only errors so it was harder to nail down. But it didn’t take us long to isolate it to Windows Vista. Although we support Windows Vista, only a small percentage of our customers use it. I believe the current market share is somewhere in the the single digits percentage wise. But as time passes and we add more and more Vista customers, not to mention Vista growing their market share. It’s a growing issue for us and all other software vendors as you’ll soon see if you aren’t already experiencing this issue.
After a lot of investigation we discovered that the “read-only Vista issue” is very prevalent. It’s frustrating a lot of users! To give you an example of just how big an issue this is with Vista, I just did a Google Search and found these threads here, here, here, here, here, here, here, and here within seconds. A lot of people are complaining, it’s affecting a lot of software. But worse, it’s not just affecting the software applications but also the users data folders. For example a lot of people are also complaining that they can’t even edit their pictures.
Delving further into the issue, what’s happening is that Microsoft is trying to add extra security to prevent “Malware” from getting onto your computer. Whether or not this is the right approach is an entirely different discussion, but the downside is that it’s definitely causing a lot of frustration to their users! As I’ve already said a lot of people are complaining. Software vendors are getting hit with a lot of extra “support” costs to deal with this issue. After all, if the software doesn’t work, it’s probably the software vendor. Not in this case, but you can’t blame the customer. I initially had the exact same reaction. Windows Vista is still too new that most people haven’t yet figured out this is a Windows Vista issue.
On top of this, something we’re just starting to experience, sometimes if you change the file properties from read-only to read/write (ie uncheck the read-only file attribute), it comes back as read-only!!! What? I uncheck the checkbox, close the folder properties dialog window, and re-open it only to find the read-only checkbox selected. And yes I’m in Admistrator mode. I myself am confused and I’m nowhere near a novice user. I can only imagine the storm that’s going on as most people would have no idea what to do.
Up until recently all our customers could resolve this issue by just changing the folder permissions (at least as far as I know). Now this doesn’t always work. There’s no indication of what to do anywhere within Windows Vista. It changes your settings without you wanting to. I’m personally at a loss and will be contacting Microsoft on Monday to see what’s going on.
I have no doubt that they will have to revisit their decision on this aspect as they gain market share and it becomes more obvious what’s happening within the community at large. I can only imagine the scale of the storm that’s already brewing…
In the last two days I’ve created and launched a brand new website aimed at Java developers called WhichJar.com. The site is now live even though the database is pretty empty (I’ve only added a couple dozen Jars so far). I’m working with someone to fill it up with lots of data very soon.
What does WhichJar.com do? For those of you who program in Java, often you run into what I call “Runtime Jar Hell”. Basically what this means is that you set up a project and everything compiles, but suddenly when you try to run it (your J2EE app, Swing app, etc.), you’ll get class not found exceptions. What’s happening is that one of the Jars you added to your project also requires other Jars for it to run (they are only required for runtime, not compile time). It’s very easy to miss these, and all you get back from the runtime engine is the name of the class it can’t find. If you then try to Google it, often all you’ll get is the API, from which you then need to do some sleuthing to actually find the right jar. This is extremely annoying and boring!
One of the newer tools out there that’s supposed to help minimize this is Maven, but that’s also got some issues. And not everyone uses it. So for those of you who get caught in Runtime Jar Hell, I’ve created WhichJar.com. All you do is enter in the fully qualified class name and it will tell you which Jar it belongs to, where to find it (the website and download URL), the version, release date, etc. Instead of spending a lot of time trying to find it online from the API (which is not always obvious), it’s all right there for you in an instant! Click here to see an example result page.
Again, as I’ve said before, the database is pretty empty right now but that’s going to change with time. We’re adding about 100 new Jars a week and I’ve hired an outside source to generate me a much fuller and larger list for the very near future. So hopefully within a month or so it will be full of data and extremely useful.
So please go ahead and try it. It’s very handy and it can save you a lot of time!
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!
If you’re a software developers, absolutely!!! No doubt about it!
Before I go on, let me just take a step back to explain what a code profiler is to those that aren’t familiar with the term since a lot of you here also aren’t software developers. And surprisingly, a lot of software developers have no idea what a code profiler is!
A code profiler is a software application that helps you find performance bottlenecks, pin down memory leaks and resolve threading issues in your software application. So in other words, it’s a tool that helps you find where your own software needs the most improvement.
You would think that with today’s amazingly fast machines you wouldn’t need to worry so much about performance or memory (threading is something you always have to worry about). Yes, that’s partially true, but not always! For LandlordMax, as the database becomes progressively larger, so does the importance of running a code profiler. As some of you may have noticed, we’ve really been pushing performance enhancements recently (for example: here and here), and there’s a reason why. When we initially ran our tests, we ran them with fairly large databases, but we’d only test one section at a time. Lately we’ve been really pushing the envelop, creating databases that are larger than any of our customers will ever have, and we’ve noticed some performance issues with these massive databases, as well as some memory issues.
So then the question becomes, why not just optimize everything? Because that’s incredibly time consuming and very expensive. But more importantly, it’s often a waste of time and money. Most of the improvements you’ll do won’t make any noticeable difference. For example, if a screen refreshes in 10ms versus 20ms, no one will notice, it’s too fast to be perceptible, even if it’s a doubling in speed! However the cost of this improvement may be significant, hence driving up the cost of the software! No one wants this, and there’s no real benefit to anyone in this case.
So what we’re left with is focusing on the main performance bottlenecks. How do we do this? Most people will think that you just look at code, it should be obvious. It’s not! Often where you think there’s a bottleneck is just plain wrong. This is one of the hardest things to do!
So where does this leave us? How do we do this? We could integrate within our application a bunch of timers, memory readouts, etc. that would continually post information out to the screen. I’d suggest against this because this is very time consuming, error prone, has the high probability of introducing unncessary bugs, and adds a lot of extra code to your application.
A better solution is to use a code profiling application. As LandlordMax is Java based, I can only talk about the Java code profiling application. There’s 4 main software solutions, all ranging greatly in price, how they tackle the problem of profiling, what features they offer, etc. They are: JProfiler, YourKit, OptimizeIt, and JProbe.
After some analysis, I narrowed our list of options down to either JProfiler or YourKit. I simply couldn’t justify the cost of OptimizeIt, and JProbe seemed still stuck back about a decade in terms of GUI (it just wasn’t friendly to work with at all).
I did personally contact both of the companies I was interested in evaluating (JProfiler and YourKit) and told them I was going to write a review here on FollowSteph.com about this topic. Both were enthusiastic about it, and each was willing to provide me with a free license to their application (thank you!) so that I could really try out their software packages. It’s great to see this kind of enthusiasm! It’s also great to see companies that really believe in their products!
That being said, after some experimenting, I’m going to say that I prefer JProfiler. YourKit was nice, but I found JProfiler’s interface much more intuitive, it provided me the information I needed in a very organized and obvious manner. This made finding the bottlenecks and memory issues much faster and easier! Therefore in my opinion, although both tools are powerful, but I recommend JProfiler as the better alternative.
To give you a few examples of some of the phenomenal improvements we got with LandlordMax, before we started using JProfiler, we ran a rent roll report that generated 521 pages of rents due (that’s a big database!) in less than 14 minutes. That seemed reasonable to us when you consider the size of the report. This same report now runs on my computer in 12 seconds!!! Yes you read that right, in 12 seconds! When we ran it with JProfiler, the performance bottleneck jumped right out at us. It was not at all where we thought it was, we had been focusing on the wrong area of code. Had we not used JProfiler for this, we could have spent many more hours, possibly days, trying to improve the performance and it would have only been minor, maybe we would have shredded one minute from the total time, nothing like what we achieved.
Also, remember that the time cost to fix this was extremely small, once we saw it in the “CPU Views” section, it was a no-brainer. Solving it wasn’t obvious, but locating the source of the issue was! Much like locating the leak in a pipe can be brutal, but once you know where it is, solving it isn’t nearly as difficult. With JProfiler we were able to find it in seconds, with just one pass of the report.
Although I’ve been mostly mentioning performance bottlenecks, memory leaks (or extraneous usage) can and also does happen. While running JProfiler we also found that we used more memory than necessary in many places. We immediately saw that our “instance” count was extremely high for Vector Objects (a Java library object that stores a list of other objects). Why was our instance count so high? By quickly drilling down JProfiler’s Call Tree, we immediately noticed the issue.
What was happening is that for each Model Object we created (a chunk of programming code that represents either a real world object or a concept), we were pre-creating several empty Vectors (lists). I know that without a context this doesn’t make much sense, so let’s give it a context. So for example, when we created a new Building Object, we would pre-create an empty Vector (list) of units, of accounting entries, and every other item that might be in the tabbed panels. There’s nothing wrong with that. When we were in the list view (where you would only see the list of buildings without the details), we only populated the basic building information so that it could be drawn in the table, not the full data (the list of accounting entries, etc.). We didn’t populate these lists (accounting entries, etc.) for every building because you might never view most of the buildings every time. Why take the performance and memory hit to pre-populate all the data if you probably will only use a small portion of it. Therefore we’d only populate the lists (accounting entries, etc.) for a building when that building was selected. This way, only when we actually look at the details of a building do we put information in our Vector Objects (accounting entries, etc.).
So how can there be a memory leak here? Well there isn’t one really. But what happens is that when we created a new Building we’d also create several empty lists (accounting entries, etc.) by creating a new Vector Object with no items in it. Still don’t see where the memory leak is? To be honest in retrospect it’s really obvious, but at the time I hadn’t really thought of it. The memory leak is that each of those empty Vectors Objects take memory. Each Vector Object has to be created (instantiated and allocated). Although the list contains nothing, the Vector Object does take up space. If you only have a few hundred buildings, it’s almost unoticeable. But now imagine that you have thousands of buildings, each with about a dozen empty Vector Objects! What about if you run a rent roll report like the one above with 521 pages of Objects each containing a dozen or so empty Vector Objects (lists)!
I wasn’t even looking for a memory issue in this area of the code, but by just running JProfiler while performing some random tasks quickly brought this to my attention. Of course, I had I run LandlordMax with a database of only a few hundred buildings I probably wouldn’t have noticed anything. You see in Object Oriented Languages such as Java, almost everything is an Object, there’s lots of Objects. Each Screen is an Object itself composed of many other Objects (Button Objects, Label Objects, etc.). There are Objects everywhere. But in this case because the database was much larger, the Object count quickly got out of proportion and it became very obvious when looking at the metrics within JProfiler.
So to fix this little issue, all we had to do is go from created empty Vectors (lists) to using lazy instantiation. What that means is that we don’t even create an empty Vector, all we basically do is say this is where the list will go in memory. We don’t actually put a list there, not even an empty one. In Java, we assign it the value of “null”. Without getting too technical, variables generally point to the Object in memory, they don’t store the actual Object (pass by reference rather than pass by value). So when we put “null”, we don’t need to worry about allocating that Vector Object right now, we can deal with it later if need be (or never if we don’t need to). if you want more details this article explains it in a lot more detail. Anyways, doing this greatly reduced the amount of memory we used everywhere. Had I not run a code profiler like JProfiler, I don’t think I would have noticed this. It’s not a show stopper, but the less memory your software uses the better, and generally the faster it is. It didn’t need to create and destroy all these empty Vector object instances for nothing.
Another great benefit we quickly got with JProfiler is that it showed us our data entry screens needed some performance boosts. Up until now, we generally focused on the list views, as those are the ones that contain the biggest amount of data. But JProfiler quickly brought to our attention that the combo boxes can be performance issues. For example, when I go to create a new accounting entry where the database contains over 2000 tenants, 2000 buildings, 2000 vendors, etc., each of these respective combo boxes need to be redrawn (in case any data updates were made). Each combo box requires a database call. Each combo box requires some Objects to be created and destroyed as they are updated. This quickly added up and became really apparent with a large database just by looking at the screens within JProfiler.
Because of this, we’ve now added some caching to LandlordMax which will be available in the next major release. As I mentioned earlier in this article, we could have cached everything, but because of JProfiler we focused on only caching the combo boxes that had performance and memory bottlenecks (which ended up only being 5 combo boxes). Talk about a time saver! I can’t imagine having created caching for everything! By analyzing the metrics, we found that 99% of the performance bottlenecks could be attributed to only 5 combo boxes, which is a lot less than hundreds of potential combo boxes, labels, prefilled data entry fields, etc.
As a quick side note, those of you who aren’t familiar, caching is a way of storing information in memory so that it doesn’t have to be retrieved from the database each time (and also a way of re-using the same Object instances rather than re-creating new ones each time). Because of this, if no changes occur between screens (for example no tenants are added, removed, or modified), the combo box is virtually instantaneously drawn and consumes no extra memory. If a change do occur (a tenant’s name is modified, etc.), we now just update the cached tenant list so that it still doesn’t require a full database call or the creation of new objects. If you have thousands of tenants, buildings, units, vendors, etc., this can quickly add up.
Before I finish this article, I just wanted to point out JProfiler’s “Hot Spot” functionality which is available for memory and performance analysis. This is basically a feature within the software that tries to actively point out to you where the bottlenecks are, so that you don’t have to look any further. Think of it as a summary of where you should look next, where you should look to enhance your software. It’s a nice little feature. Now that I think about it, it’s almost like it generates a “to do” list for you on where you should focus your time and money to enhance performance.
So have I convinced you that you (at least you software developers and software company owners) that you should run a code profiler for your software application if you haven’t already done so? I hope so! These were only some of the highlights we got from using JProfiler, there were others (I didn’t even mention any of it’s thread analyzing capabilities!). As you can tell, I really benefited from using JProfiler, so I definitely recommend them, especially if you’re coding in Java. The value in terms of time, cost, and benefits is definitely worth it!
We all know it’s important to backup our computer data but rarely do we actually do it. Well let me tell you from personal experience from this weekend, hard drive failures do happen! And was I ever glad that my backups were almost completely up to date. I lost a little bit of information (about 1-2 days worth of work), which is considered very good for a catastropic computer failure.
What happened is that over the weekend my most important drive, the one containing all my data files (I dedicated one hard drive only for data to simplify the backup process) started acting up. At first it started to do some random clicking sounds. It didn’t sound too good, but ok, there was nothing I could really do about it. Then suddenly the drive disappeared from “My Computer”. Not good! Then on reboot it came back. Ok… At this point I decided to double-check all of my backups. Almost everything had been backed up to about 1-2 weeks ago. Not too bad, but I decided to manually run a backup just in case. Lo and behold, last night my critical hard drive completely crashed for good! 250GB of data could have been completely lost had I not been proactive!
Which brings us to today’s posting. Having gone through the experience of a computer failure for the umpteenth time, I’m now getting pretty good on how to protect myself and get back up and running quickly. So without further ado, here are the 4 steps you need to do to protect yourself from computer failures.
1. Create a disk image of your C: drive. Nobody wants to go through the process of re-installing Windows/Linux/Mac OS again, updating the OS with all the latest security patches, re-installing all the software, etc. This can easily cost you many days of wasted time. Luckily for us there are software packages to create disk images of your hard drives.
For those of you who don’t know what a disk image is, it’s basically a complete copy of your hard drive in it’s exact state. This way, if for some reason your computer crashes (for example because of a virus) and you need to do a complete re-install, you can just “restore” your last disk image in a matter of minutes and you’re ready to go. No need to re-install everything, it’s an exact duplicate of your hard drive (hence the name disk image).
Now, as I was saying, there are software packages to do this. The two main competitors are Norton Ghost and Acronis True Image. I used to personally use Norton Ghost but I’ve changed since the last version update (version 10). I’ve found that it really slowed down my computer and it would hog up a lot of unnecessary resources. I now use Acronis True Image. If you’re interested in comparing the two, here’s a really great head to head review of Acronis Versus Ghost.
2. Create backups of specific folders and data files. Why not just use a disk image? You can, it’s just that I also like to make specific backups, I’m a little on the paranoid side from experience. For example, if you only have a disk image, what happens if that file is corrupt (although unlikely it can happen)? By backing up specific folders, I spread the risk. My best example is with my pictures. I take a lot of digital pictures, and I mean a lot. So what I do is create a disk image of the hard drive and I create a backup for each month. This way should something catastrophic happen to one my backups, I won’t lose everything since it’s isolated to that backup (I’d only lose the pictures for that month rather than all of my pictures). I also do this with all extremely important data, such as my LandlordMax and FollowSteph files and folders. I’d rather lose a part than the whole. For this I use a software called Genie-Soft Backup. It’s the best software package I found and it encrypts all of my backups on the fly.
3. Use an external backup hard drive. I strongly recommend buying an extra external hard drive to only use for backups (you don’t want it on all the time, this negates its purpose). Again, this hard drive is only to be used to periodically backup all your important data. This way, should you have a failure (hardware or software), you’re sure to have a local backup. In the old days, I would use CD’s, and even DVD’s, but the amount of data that needs to be backed up now just makes this impractical. I would need in the order of 2-3 dozen DVD’s and 100′s of CD’s to backup my data. This would take a lot amount of time and the number of points of failure substantially increase. It’s just not practical anymore. If you consider that the price of a backup external hard drive can be had for as little as $100, it’s just not worth using CD’s and DVD’s for backup anymore.
The other benefit of an external hard drive is that should something happen, you can quickly restore your data. Try restoring everything from CD or DVD. I hope you have a lot of patience. With an external hard drive, the data transfer can be done relatively quickly.
4. Remotely backup all your data. I can’t say this enough, backup your data to an external source outside of your home or business. It’s critical! This is your last defense. This protects your data from your property burning down (for the same reason you buy fire insurance, in the unlikely event?). This protects you from flooding and a number of natural disasters. How many times have we heard “I’ve seen it happen to others, but I never imagined it would happen to me”. Not only that, should your computer have a horrible malfunction, say a power surge, then you’ll be protected from this as well. This also protects you from the odd time that you’re external hard drive will also fail. Make no mistakes about it, the external hard drive is a hard drive, so it too will eventually fail (it should fail very very rarely as you should only be using it for backups).
Fortunately services that offer remote backups aren’t too expensive. Often the costs of losing the data far outweigh the cost of preventing the loss. What would happen if you lost all your digital pictures? I know I now have about 5 years worth of pictures. I can’t imagine losing all my kids pictures! Think of all the people affected by hurricane Katrina. Only those who use a remote backup service were probably able to save their pictures and data. What about my company LandlordMax? Can you imagine if a company has no remote backup of their data? I could easily see a company going bankrupt over it. The data is often many many times more valuable than the cost of the hardware on which it’s stored.
For this we currently use BQ Internet which charges which charges $20/100GB of space. We picked them because the price was good and this is their sole business. I have to admit we’ve had some network issues where the connection would get slow (or we’d entirely lose the connection) in the wee hours of the morning when everyone else is also backing up their data. But other than that it’s been good so far for us (we just now backup our data at an alternative time). The other service we looked at is Gnax.net Backup Service, which charges $0.50/GB a month. They seem to be a higher end service and the reviews look good. Either way, both are good options depending on your needs.
All in all, doing these 4 simple steps will protect you from 99.9999% of all computer failures. The odds of having all 4 steps fail at the very same time are extremely low. If I had to increase the odds even more, I could only suggest adding other alternative remote backup services. Other than that, the odds that your computer fails, your backups are corrupt, your external hard drive fails, and the remote service fails, all at the same time, are extremely low.
Backups are a necessity. I was again reminded this weekend of this by having my most critical hard drive fail on me. It can and will happen. Am I ever glad I followed these steps!!!
|« PREVIOUS PAGE||NEXT PAGE »|