Should You Use a Code Profiler?
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!
Permalink to this article Discussions (10)
LandlordMax Customer Testimonial
Last week we received not one but two great customer testimonials for LandlordMax which I’d like to share. I’ve already posted the first one earlier, so here’s the second great customer testimonial we received in one week:
“Thank you very much. I am really enjoying the use of your program and now I love your support.”
John D. White, Jr.
Broker/Owner
Texas Commercial Realty
Permalink to this article Discussions (0)
LandlordMax Customer Testimonial
Although LandlordMax is best known as the “Easiest Property Management Software”, easiest being our main differentiator, we also have a great reputation for customer service which I’m very proud of. A few days ago we received the following comment about our customer service:
“I would like to thank you for your exceptional service and prompt attention to my request.”
Stephen Lobue
Realtor/Property Manager
Kingdom Realty Group
Thank you Stephen for the great feedback! We’ll be adding it our Success Stories / Testimonials page very shorlty.
Permalink to this article Discussions (1)
How Much Effort is There in Each Software Update?
Software releases generally come in two flavors, updates and upgrades. Updates are small changes where the version number barely changes and mostly consists of bug fixes, enhancements (perhaps performance), and possibly some new small features. Upgrades are generally considered major releases and often the first number of the version changes. These include major enhancements and lots of new features. Now everyone knows a lot of work goes into major new upgrades, there’s no doubt when you look at the list of new features. But what about updates? How much effort is involved in releasing updates? More than most people realize!
I just took a look at all the updates we released for LandlordMax Property Management Software version 2.12, which is now at version 2.12e, and it was quite lengthy as you can clearly see from this list of new features and fixes for each update. What’s the best metric to show how much effort was involved? That’s very debatable. One could argue LOC (Lines of Code) but that’s very skewed.
To give you a quick idea of why that’s skewed, let’s take a look at some of the huge performance enhancements we did for version 2.12c. Between version 2.12b and version 2.12c, as you can see from the graph below, we added about 250 new lines of code. Very few. But if you look at the effort, it took us many man hours to accomplish, probably more than all the other updates combined! So why so few lines of code? Because we removed as much if not more software code than we added. On top of this, a lot of the time we made modifications to existing code (for example optimizing the database queries), where we didn’t add or remove any code but just changed it. Version 2.12c was by far the update that required the most effort but this isn’t accurately reflected in the lines of code…
I can already see the next question, what about just measuring the total amount of time taken to implement each new update rather than using lines of code as a metric? That would be great except that we don’t really keep track here at LandlordMax of what we do in that kind of detail. I don’t know myself if I’ve spent two hours on this, then three hours on that. I know the total amount of time I spend working on LandlordMax, but I don’t know exactly on what. And to be honest, I don’t want to subject myself to this level of time tracking (even daily tracking) just to have metrics, it’s a waste of time and money. I’d rather spend that time adding more features to the software. I’m not billing a client, I’m trying to produce a software product, therefore the details of where the time is spent is not as important as building a quality product. With that being said, I do have a good idea of how much time each update took, a good guess-estimate. And I can tell you that version 2.12c was the largest by far.
In any case, I can only use the best metric I have in hand since I don’t have enough details to graph the time spent per update. Although this is not entirely accurate it’s the best I can do. That being said, it’s interesting to note that between the initial release of version 2.12 and the final release of version 2.12 (version 2.12e), we’ve added over 2000 lines of code. Assuming 40 lines per page, that’s 50 pages of new code. And remember, that’s not counting how much code has been modified, how much code has been replaced, etc.
So to answer the original question, how much effort is there in each software update? A lot! Based on the previous releases using only the lines of code as a metric, I can assure you that if we based it on time it would be a much larger percentage, we’ve added 10% as much code as a brand new full version upgrade release to the updates!
Permalink to this article Discussions (7)
What's the Difference Between a Major Software Release and a Software Update?
As far as I’m concerned, an update should only consist of bug fixes or improvements in the software (performance, etc.), it should not include any new features. Major and minor software releases include the same fixes as updates, but they also include new features and functionality. This is what and ideal world would be for me, but the reality is not quite so black and white as you’ll soon see from my examples using my company LandlordMax Property Management Software.
Just a quick addendum for those of you who aren’t as familiar with LandlordMax Property Management Software, the way we do release versions is Year.Month. Year being how many years since the first version, and month being the month of the year. So if we were to release this month, it would be version 3.09, next month version 3.10, and so on. We do this because we offer one year of free upgrades to all releases of LandlordMax with each purchase, major and minor.
So why isn’t it so black and white? Sometimes it’s nice to add a quick little feature to an update to help our customers. We just can’t wait until the next major release, we want to offer it now! Maybe many of our customers requested it and we’d like to oblige them rather than make them wait for a full release, of even a minor release. For example, one feature we added to an update of version 2.12 (version 2.12a) was the ability to sort building units in a way that made much more sense to our customers.
Initially we had the units sorted alphanumerically, but this didn’t make sense to our customers. For example you’d get:
10a
10b
11c
1a
22a
2a
3b
Whereas what you really wanted was:
1a
2a
3b
10a
10b
11c
22a
You’ll notice that 2a is before 10a, which if you do an alphanumeric sort this is not the case. A small modification but it had a lot of implications to our users. This really helped them in searching for units because it makes more sense if you think about it from their perspective!
The biggest “enhancement” we did though was to greatly improve the performance of LandlordMax. Now should this be considered an update or a new release? This is debatable, and we went the view that this was an enhancement, hence an update (I’ve seen many software vendors use this as an excuse to launch a new release). But let me tell you this was no small feat, it involved many man hours!
Why didn’t we just release it as another minor update, say from version 2.12 to version 3.03, or something like that? Because if we did that, everyone who purchased the software that was eligible up to version 3.02 would not be able to receive this update. Was it significant enough for them to purchase an upgrade? Not likely, not unless they had a substantially large database. Was it worth it for them to upgrade? Yes, especially if they had larger databases. So it was worth an update but I doubt many would have paid for an upgrade, it wasn’t enough to validate the expense. But we wanted to release it sooner than later since it significantly affected our larger customers (we have many larger customers), and all our new potential customers trying out the software for the first time. Hence in this case we opted for an update.
This week we were faced with another situation. I was talking to one of our potential customers on the phone and he brought up a very good point. He had a 150 unit building, and was looking to add two more 150 unit buildings within the next few months. His issue was that he had to enter in all the tenant lease information AND all the scheduled accounting entries for those leases. Now I don’t know about you, but I could sure appreciate his argument of not wanting to enter in the same 450 similar pieces of information twice! He did suggest that he could have one of his clerks do it, but that would take time away from their other tasks, and I completely agree. This lead to the discussion of having the software automatically generate the scheduled accounting entry for each new lease when it’s initially saved for the first time. This is a great feature, one that we had planned on implementing before but that had been pushed back due to resource limitations. We only have so many resources and we try our best to implement the most sought after features and requests. In any case, I completely agreed with this gentleman, this is a feature that should be in the software sooner than later. After hearing his plight, I decided we could no longer wait for this feature, we needed to add it now rather than later.
Now here’s the dilemma, we’re also nearing another update release of version 2.12, version 2.12f. This update is mainly another performance update on the data entry screens. What we’ve done is cached all the combo box (drop down menu) items to avoid a lot of unnecessary database calls. If you have a database like the sample database I’m creating for the showcase video, this can result in a lot of extra processing that’s not really necessary. For example the tenant combobox can be easily cached, especially if you consider how often the tenant list changes versus how often we render that combobox (almost every data entry screen). This provided a significant performance increase to data screens with large databases (in my test case, this was 2659 tenants that didn’t need to be extracted from the database each time! We’ve done the same with all the major comboboxes and it made a noticeable change. The improvement went from 2-3 seconds to a virtually instantaneous display of all the data entry screens, with the exception of when there is an update to be made. If you’ve studied Graphical User Inteface (GUI) disciplines, you know that anything above 2 seconds agitates the users and makes them think the software is not responding. A significant improvement!
As I was saying, the dilemma is that if we’re about to release an update anyways in the near future, should we just tack on this new lease feature? It’s easy to say yes, but you have to remember that each new feature does cost us money to implement. And if we add that one feature, why not another one that’s really beneficial. For example we could also add the ability to convert suggested accounting entries that are late as accounting entries with no amount paid and no date paid (this is beneficial because if after a certain number of days your tenants haven’t paid you, you want to quickly take all the suggested accounting entries and mark them as unpaid. If you have a lot of these, it can take quite some time to manually edit the amounts and dates one by one)? What about adding a few new reports? This could be considered a minor upgrade. The dilemma is that, assuming we release next month, it will have been 10 months since our last release (not counting updates). Is a few new features in a year enough to warrant an upgrade? Will enough people whose license have expired purchase an upgrade? I don’t know, but I’d prefer to really make a convincing argument for an upgrade by giving them much more value than the cost of the upgrade! That’s just me.
So what are we to do? Do we give away more new feature for free as an update? Do we release a minor release after 10 months with only a few new features and performance enhancements? Will it be worth it for enough customers to purchase the upgrade and benefit from it? I don’t think either of these options is really any good… So the answer is I don’t know.
What we did decide though is that we’ll release a major update rather than a minor update very soon. Rather than just working on the 2.12 branch and adding the features there, we’ll release all the new features we’ve already implemented and tested for version 3.xx. We’d of course like to get all the new features we planned for that release, but instead what we’ll do is cut it a bit short and release it with everything we’ve already implemented (which is no small list). We’re going to do this because I believe there’s enough new value already implemented that most of our existing customers whose license is going to expire with the new major release will find more than enough value in it to buy the upgrade. By the way, just as a quick plug, remember that upgrades are discounted at 50% of the current price. Anyways, I know if it was me I’d prefer to have all the new features we’ve already implemented as part of a major upgrade, and there’s some great new features and benefits in there! If everything goes according to plan, we’re hoping to have the next major release available something in October as version 3.10! I’m not promising anything, but that’s what we’re currently anticipating.
Permalink to this article Discussions (0)
"How Many Units Can It Handle?"
Since the beginning of the summer we’ve been continually revising our website (LandlordMax Property Management Software) with several goals in mind. One of these goals is to proactively answer our pre-sales questions, and so far we’ve been doing a good job at it because the number of repetitive pre-sales support questions have reduced in number. That is to say, the ones we had a tendency of receiving over and over are now being answered directly by the copy on the website.
The current common question we’re in the process of dealing with is: “How many units can the software handle?”, or some version of this. The first and simplest thing we did on the website is adjust the copy on the front page to include “store 1000’s of units”. Even though the database engine can store a lot more, in the millions, we decided to use a much lower number that our customers would perceive as reasonable. The second and probably the most powerful is that we’re in the process of creating a showcase flash animation link directly on the front page to replace the screenshot currently there. This animation/tutorial will use a database that larger than what 99% of our clients currently use, the largest database I’ve seen so far from a customer was 652 units. I’m sure there’s larger that we don’t know about, but it gives a good idea to the vast majority of our customers that the support can support a large database when one of this size doesn’t even cause it to flinch!
In any case, the database we’ve created to showcase LandlordMax has 2797 units! In terms of buildings, it’s got 211 (several multi-unit buildings, including some buildings with about 200 units). The database also includes 2659 tenants with 2535 leases (some tenants are potentials, etc.). As you can imagine, this is a lot of data for most real estate investors or property management companies. Although we could add a substantial amount more data to it, I believe this is significant enough to showcase the software.
Even though I’ll be answering this in more detail on LandlordMax, here’s some of the performance results we’ve seen with this particular database. The time to display the list of buildings, units, tenants is under 1 second (this includes time for the database and the software to render them). By the way, for those of you who think Java is slow, here’s a clear example that performance is based on the quality of the code and not the language!
I also ran some further tests with our most performance intensive report, the Rent Roll, and the results were very good. Before I give the actual numbers, let me explain a little why the Rent Roll report is so performance intensive. First, unlike other property management software applications, we give you the ability to run the Rent Roll report between any start and end date. This might not seem like such a big deal, but now imagine what happens if you put no start and end date? It will then generate a report listing every single rent ever due from all your leases!!! That’s a lot of data! In addition to finding when every single rent is due, it will also cross reference this data with the rest of the data to show the tenants name, their residing building, and in which unit they’re in, if it’s applicable. That means it’s combining information from 4 tables for each rent due. Also remember that this is for each rent due, not each lease, so if it’s a year lease this will include 12 seperate monthly rental amounts due. Finally it then computes the total amount of all these rents due for the whole period. Now that you have some idea of what’s involved in tabulating this particular report, the results included 33,290 rents due, or 521 pages of printed data! How long do you think this should take to generate? The report is generated in under 12 seconds on my computer!
Anyways, going back to the main point, the moral of the story is that you should continually update your company’s website copy to answer the most frequently asked questions from your customers. Not only does this reduce your pre-sales/support costs, but more importantly it will increase your sales conversion ratios.
Permalink to this article Discussions (0)
LandlordMax Great Customer Feedback
As many of you probably noticed, we launched an updated version of LandlordMax Property Management Software, version 2.12d, this week. I apologize for not having written about it in more detail yet, this week is incredibly busy for me not just because of this release, but also because I’ll be a keynote speaker at an instructional seminar covering website promotion and traffic generation this weekend.
In any case, this update was the result of some issues one of our customers faced that was our fault. The quick version, until I have time to write a more detailed explanation, was that since version 2.12 the software missed a validation check in the Tenant’s Workarea (in all other Workareas this validation check remained intact) that should have prevented you from assigning two tenants to the same unit/building. It turns out that the software was no longer doing this validation check, which caused other issues in the software. This has been resolved in version 2.12d.
We worked very closely with Sharif Booz on this issue to fix it for him as fast as possible (within 2 business days I believe), and to prevent it from happening to any of our other customers. I just received the following email from him today which he has graciously allowed me to publish here and on the LandlordMax success stories / testimonial page (which will be updated within a few days):
“Thank you very much for first class service”
Yours sincerely,
Sharif Booz
Thank you Sharif for the great comment!
Permalink to this article Discussions (0)
Update: LandlordMax Traffic Doubles As a Result of the Free Real Estate Analyzer
A few weeks ago we released a free online real estate analyzer on my company’s website (LandlordMax) in the hopes that it would increase the traffic to our website, and hence create more interest in our main product. The idea is that if you offer something of value for free, you will generate significant traffic from it.
We initially doubled the traffic to our website, which was great! Since then, as I promised to update you all, we’ve continued to get at least double our previous traffic each day from before we released it, sometimes much more! This increase in traffic has been maintained, and is actually still growing as its gaining more exposure. At this point, we’re barely promoting it anymore if at all, we’re letting the viral aspect take over, which is great. This might turn out to be our best marketing investment yet!
If you have a website and you want to increase your traffic significantly, offer something of high value for free and people will come.
Permalink to this article Discussions (1)
Here’s a Quick Way to Get the Most Value Out of Your Press Releases
A few weeks ago we released a major press release about our new free Real Estate Property Analyzer on LandlordMax, and I said I would post an update about it since we decided to go a very different route. Normally we would only use PRWeb as our distributor, which is very affordable. This time however we decided to go mainstream and we used a major news wire service called PR News Wire. Both are very good and very different. Unfortunately for us, I learned a very hard lesson which I already knew but completely forgot this time, which is to test the press release in a smaller and cheaper distribution first rather than releasing it nationally right away. This is an absolute must, especially if you’re going to use a major service!
Let me expand a little and give you some context. As I said earlier, normally we release our press releases through PRWeb, which can be free to virtually any price you want (of course I’ve never seen one go for more than a thousand dollars on any day) depending on the placement you want. We often use the $80 option as this gives us some pretty good coverage and traffic and it’s very affordable. So far, our press releases have all been successes, all with over 100’000’s reads directly from PRWeb alone, and lots of reprints from the feeds, in the thousands. So I’m fairly confident in my ability to write press releases. I’d never really had an unsuccessful press release before, so I didn’t anticipate one this time.
Therefore on this iteration, I went directly to PRNewsWire without testing the press release first, and I went with the bigger coverage (being picked up by the major publications). In my head I wanted to go this route because I figured “old news is no news”. That is, if it wasn’t new, no one would be interested in publishing it. And this was my mistake that I hope you learn from because I know I did!
I opted for a very expensive high distribution press release without testing it in a smaller distribution first. I went with the “US1 Financial Services” where I should have gone with something like “New York”, which costs about 30% of the price. I could also have used PRWeb to test the success of the release since it’s even cheaper, about 15% the price. Had I done this I would have quickly learned that this particular press release wasn’t as successful as normal. By the way I think the cause was the headline, I have to admit I did have some doubts about it when I released it. Anways, it did get attention, just not on the scale I’m familiar with.
So the tip of the day on how to get the most value out of your press release is:
When doing a press release, ALWAYS ALWAYS release to a smaller distribution first before doing a full scale distribution. By doing this you’ll be able to commit your hard earned income to only the most successful press releases you write.
Additionally, as an extra update on the original article as to its success I’ve posted my report graph from PR News Wire below. By the looks of the graph, I’m highly confident that this press release will result in a positive ROI (Return On Investment). However had I just tested it first on a smaller scale first, I know I could have easily increased the ROI.

As an extra little addendum, from what I understand from talking to their representatives, this is what you should expect from a normal press release. Of course some news items have much larger pick ups, such as the latest news on celebreties, the war in the middle east, gas prices, etc., but in terms of a smaller company with a new offering (even if it’s free), this is what they told me you should expect. However after running the same press release through PRWeb a week later and achieving only about 20% of my normal results, it makes me think that I could have done much better… Hence the tip of the day!
Permalink to this article Discussions (0)
LandlordMax Version 2.12c Feedback
It’s just been one day since we’ve released LandlordMax version 2.12c and we’ve already received some feedback on the performance enhancements:
“The new fixes or upgrades are great. The items in the software are moving extremely fast. It’s great.”
– Ken Sheppard
Thank you Ken for the excellent feedback! It’s really good to hear that my last entry’s performance improvement claims for LandlordMax are validated.
Permalink to this article Discussions (0)
« PREVIOUS PAGE | NEXT PAGE » |