Author Archives: admin

CodeGuard’s Craftsmanship: Bringing Attention to Detail, Even to Our Fun & Games

Twitter Facebook

At CodeGuard, we work hard – and smart – week in and week out. We work hard to give our customers complete peace of mind, knowing that their websites & databases are safe and successfully backed up every single day!

CodeGuard also has a culture which rewards this hard work by celebrating big wins. Every Friday afternoon, we wind down the week with happy hour, where you’ll find bean bags flying through the air as we square off in conrhole! And more recently, you’ll also find us playing PS4, which the development team earned after achieving 100% backup reliability (up from 99.99%) for the past 32 days…and counting! This increase may seem tiny, and it is a very small difference, but we pride ourselves on being the most reliable backup product in the industry!

Back to cornhole…out with the old and in with the new!

IMG_1610

In the picture above, you can see our old trusty set (left), which has seen many epic cornhole battles. You can also see our new set, which looks a little different :). The new set was hand-crafted and made from materials of the highest quality!

SEE BELOW FOR THE INSIDE SCOOP AND SOME OF THE STEPS ON HOW CODEGUARD’S NEW CORNHOLE SET WAS MADE

Step 1 – Search online to get the dimensions, list of tools & materials required, and the building instructions (I used this site as a guide).

Tip: If possible, find a friend who has a workshop with all the right tools as it will make your project much easier! I recommend getting very high quality wood (not standard plywood) for the playing surface. This will really make the set look great after staining it.

Step 2 – Build a functional set. I’ll skip a lot of these steps as you can reference the link above. Plan for a whole day here to do it right!

Tip: MEASURE TWICE, CUT ONCE! Use clear wood filler for nail holes (you’ll see why in the next step). I went the extra mile here by using wood plugs to cover the screw holes, routing all surface edges, and adding extra support to the frame.

2015-11-29 19.00.25

Step 3 – Now it’s time to stain! This part is fun because it starts to look good really fast…until you realize that you should have used clear wood filler! You can see the patches of discoloration. Don’t make this mistake!

2015-11-30 21.42.28

Step 4 – Decide if you’re committed to doing this the right way. If you are, let the stain dry, and then get out the sandpaper because you’ve got to get rid of that wood filler that’s cramping your style.

2015-12-04 21.15.19

Step 5 – Wipe off all of the dust and start staining. After a few coats, I could now see the rich, consistent color I had been aiming for.

2015-12-04 21.15.19

Step 6 – Get your logo printed on thick paper (I went to Office Depot). Use painter’s tape to cover the area under the logo.

2015-12-09 19.51.52

Step 7 – Get out your razor blade and cut the areas you want painted (in this case, with black paint).

2015-12-09 20.33.06

Step 8 – Paint the exposed area. I used regular paint.

Tip: I recommend spray paint because it should peel easier. I had to retrace everything so that the remaining tape wouldn’t cause the paint to peel up with it!

2015-12-10 06.28.53

Step 9 – After peeling off all the tape, hold your breath when you uncover that all of the tape destroyed your beautiful staining work! Convince yourself that everything will be ok…or that you wanted a two-toned set this whole time anyways :(.

2015-12-10 18.21.25

Step 10 – Re-apply stain, step back, and realize that you are getting close! Now get off your butt and apply three coats of poly! Do this over three days so that it can fully dry each night.

2015-12-17 06.29.34

Step 11 – Go put the finished cornhole set in front of your boss’ desk with bows on it! Considering adding a note from Santa :).

2015-12-17 07.20.28

Step 12 – Wait until Friday afternoon, crack your favorite beer, and let those bags fly!

Merry Christmas, Happy New Year, and Happy Cornholing!

-Chris Markel

 

Carve Your Own Awesome CodeGuard Pumpkin

Twitter Facebook

pumpkin_new

Halloween is one of my favorite times of year. Carving pumpkins has become one aspect that I really look forward to. I used to just carve the typical triangle eyes, triangle nose, and scary mouth jack-o’-lantern, but one year I bought a pumpkin carving kit with a bunch of templates, and I fell in love with creative pumpkin carving. I’ve created my own templates so that I’m not limited to the simple spooky bat or Princess Elsa from Frozen (which I also did do this year because my 2-year-old daughter is OBSESSED!). This year, I wanted to show my CodeGuard pride and create a CodeGuard-themed pumpkin carving. I was getting a little bored of the regular carved pumpkins, so I wanted to try my hand at the more advanced technique of shaving off the skin to create a shaded glow effect. Maybe next year, I’ll try to tackle our “Hero” mascot (pictured below), but this year, I needed something simpler for my first shot at this, so I chose our shield logo.

hero

Before I began my pumpkin carving endeavor, I had to have the right tools for the job. I went to Target and found a great pumpkin carving tool kit. It has a scraper to get all the seeds out and thin out the sides of the pumpkin, a large saw and a small detailing saw, and a skin peeler.

 

You will also need to create or download a stencil for your carving. There are a ton of great free stencils available online, or you can use Photoshop or some other program to create a stencil of your own. I just grabbed an image of the CodeGuard logo, made it as big as I could to fit it on a sheet of paper and printed it out. If you are creating your own stencil, this sounds like common sense, but it’s harder than you might think, make sure that all of the parts of the inside of the image that will not be cut out can connect to the outside of the pumpkin, or it will just fall right out.

 

With the right set of tools and stencil in hand, I set to work. The first step is to carve the top of the pumpkin off. I usually draw a circle around the stem big enough to fit your hand through comfortably. I always draw a notch in the circle towards the back of the pumpkin so that you know which direction the top goes back on more easily. Then I cut it out. Be sure to cut it at an angle so the top doesn’t fall back inside the pumpkin.


Then use the scraper to scoop out the seeds and other nasty stuff from the inside. Also,  you’ll want to shave down the inner side wall of the pumpkin where you’re going to be doing your carving. Make sure to shave it down nice and thin so the light will glow through the parts where you peel off the skin. This is the one mistake I learned from. I didn’t shave it down far enough, so my glow wasn’t as pronounced as I wish it had been.

 

Next, you will need to transfer your stencil to the pumpkin. Tape the piece of paper to the pumpkin. You will need to make some folds to make sure the paper is flush against the side of the pumpkin. With one of the knives, or a thumb tack, or anything with a sharp pointy end, poke holes through the paper and into the pumpkin’s skin along the lines where you will be cutting or shaving your design. This is the most tedious process. You need to make sure the paper doesn’t move during this process or your design will be warped. For longer lines, I don’t usually poke as many dots, but around curves I poke a lot of them.


After this, it’s pretty much just connect the dots. Keep the paper stencil handy so you can reference it to see what is being cut out or shaved or remaining in tact. You will probably want to work on the parts where you’re shaving off the peel first because the pumpkin is more sturdy for this part. The peeler that comes with the set referenced earlier has two parts, one is a small notch to peel smaller sections, and the larger part works like a potato peeler for bigger areas. I only used the smaller part because I wasn’t comfortable enough using the big part for this project.

 

Next start cutting out the parts you’re removing. Use the bigger knife for longer straight cuts and the detailer knife for the sharper curves and smaller sections. Once all the pieces are removed, it’s a good idea to go through and cut around the edges of your holes at an inward angle to remove the side of the holes. This will allow more light to pass through the holes.

 

All that’s left is putting a candle or tealight inside the pumpkin. I use electronic tealights because this won’t heat up the top of your pumpkin with the candle flame. Now put the top back on the pumpkin, place the pumpkin outside for everyone to see, and wait for the compliments to start pouring in.
Me&pumpkin

Thank you for taking the time to read this blog post. If you have any pictures of your pumpkin carvings that you’d like to brag abou, please email them to us at support@codeguard.com.

-Doug

CodeGuard Outperforms Dropmysite by 1670% (on average) in Performance and Pricing

Twitter Facebook

We are often asked how well our services perform relative to competitors. The biggest competitor for end customers is “do nothing”. Imagine how many drivers had auto insurance before it was made compulsory by their respective states! So relative to doing nothing, we work infinitely better!

For end website owners – businesses, bloggers, non-profits – depending on the framework used to construct their website, there are many options, assuming that they are doing something. If a customer has a WordPress site, there are many, many, many plugins that they can use to back their site up. If the customer chooses Drupal, there are modules they may rely upon. CodeGuard’s SFTP/MySQL direct/SSH product line has strengths and weaknesses when compared with content management system (CMS) specific solutions. We can explore those specific comparisons later.

What about website hosting companies that offer 3rd-party website backup services? Do they sell plugins across relatively generic hosting plans? We haven’t seen any that do this. What we have seen is that hosting companies like to sell services like ours that are essentially platform-agnostic, since they access file content on servers via FTP/SFTP and either directly or over SSH to MySQL databases.

Until recently, we had not encountered a major competitor in the United States in the website hosting market, and did not know how our service performed compared to others. GoDaddy announced a website backup partnership with Singaporean email, mobile, and website backup company Dropmysite (DMS). So we thought it made sense to see how well their product worked relative to ours.

Advertised Feature Comparison

To start, it will be helpful to take a look at the features that DMS advertises and how those compare to CodeGuard. Here is a chart that illustrates the features of both.

FeatureComparison

The two services don’t look altogether that different when comparing features. Sure, there are more X’s next to CodeGuard, but the big categories seem to be fulfilled by both services: daily backups, automatic restore, downloadable zips, etc. If we were comparing two restaurants, what we could say at this point is that both have menus that advertise what appear to be similar dishes. Immediately the question then becomes – how good are those dishes? Anyone can print a menu. Preparing delicious food is tougher.

Quantitative and Qualitative Testing

We decided to perform quantitative and qualitative tests. The quantitative tests would involve testing the amount of time for backups, restores, and processing of zip files to complete, as well as testing each system for special case handling (e.g. symlinks). Qualitative testing would involve examining the user interfaces, and comparing how effective the interfaces were in either preventing known issues (e.g. CMS-driven sites without database backups) or assisting customers once they had issues (e.g. credential change causing backups to fail).

Across the six performance tests, CodeGuard performed better than DMS on five of the six. The average performance margin of victory was 1,491%.

Overall

The figure above shows the results of the six tests, broken out in various units to make it easier to digest. Under “Initial Backup Results”, one set of tests was completed for each website type: a small WordPress site, a larger WordPress site, and 2GB blog with a number of photos. The “Restore Results” were two tests involving restoring a single file and all content for the 2GB Photo Blog. The “Zip Results” shows the amount of time to complete the zip request for the Photo Blog.

Here is a graphical representation of the results for the Initial Backup testing.

InitialBackup2

Here is a graph of the results of the restore tests.

RestoreTimes2

And lastly, the zip completion results.

ZipResults2

If the results of these six tests are taken in aggregate, this is the output.

Margin of Victory

Of the 6 tests, CodeGuard performed better in 5 out of 6, with an average margin of performance difference of 1,491%. DMS performed better in the single file restore, likely because they are not storing backups in git repositories, thus making it easier to access small numbers of files.

Results2

Is CodeGuard 1500% better than DMS? There are about 40+ other ways we will compare the two products, but the most important set of tests are the ones we could not conduct. CodeGuard might be infinitely better than DMS. If a customer needs a file and a backup service doesn’t have that file, it doesn’t matter how fast backups are, restores are, or zips are processed. To perform valid tests on reliability across the entire DMS storage system would require more access than we have.

 

In-Depth Usage Comparison

The user experience, restore functionality, and architecture will be evaluated. Within the user experience, we will examine not how easy to navigate each web interface is, but evaluate critical functionality or the lack thereof, that inexperienced customers need to successfully use a website backup service.

CodeGuard’s product has grown since launching in May 2011 at TechCrunch Disrupt, where we won the Audience Choice Award. Many companies have a support arm that interacts with customers who have difficulty or questions about their products or services. At CodeGuard, we call that function “Product Development Feedback”, and not “Support”. We view the word “support” as a reminder that your product is built so poorly that customers actually need further assistance to use it. For enterprise products, this does not hold true. But for many SaaS products, it does.

At CodeGuard, Product Development Feedback (PDF) is part of what fuels our ongoing improvements and enhancements to our product. We have been improving our product in this fashion for over four years now, and the list of differences we are about to expound upon were quite literally not built in a day.

 

User Experience

1. No On-demand Backups

Perhaps you just finished important work on your website and do not want to wait until your scheduled back-up time because you don’t want to risk it. Or you want to backup before upgrading a CMS or plugin. DMS does not have an on demand backup feature, while CodeGuard does.

Screen Shot 2015-11-05 at 3.18.25 PM

2. No Credential Change Protection

An important aspect of user experience is protecting customers from themselves. Customers don’t spend every waking hour in your software-as-a-service (SaaS) tool, and you should realize that there might be operations they can perform that actually harm their sites. Protocols, hostnames, root folder paths, and credentials can be changed within DMS without any warning as to the ramifications with restores. Do customers want to learn at the point when they are performing a restore that a folder they were backing up before is unaccessible for that very restore? We don’t think so. Furthermore, we were able to verify that changing the backup protocol from SFTP to FTP caused a restore of the initial backup to fail. #FAIL

Screen Shot 2015-11-05 at 3.19.16 PM

3. No File-level Exclusions

While excluding directories is helpful, oftentimes customers want to exclude particular files. Perhaps they have a few large files and don’t want to back them up, but desire the rest of the content in that folder to be backed up. CodeGuard allows you to include or exclude individual files within the directory selection structure. DMS does not allow for individual file inclusion or exclusion.

4. No Directory Symlink Handling

Linked directories are just skipped during the backup process with no warning or indication that their contents are not protected. What are symlinks? The simple explanation is that they are tool used by many hosting providers to give customers easy access to content areas outside of their home directories or to make navigating to deeply-nested directory structures more convenient.

Screen Shot 2015-11-05 at 3.23.47 PM

5. No File and Database Association

To make restoration of a particular website easier, CodeGuard allows file backups and databases to be associated with each other. Within the user interface, under a single URL, content for both the files and databases can be found. This may not seem significant, but when time is of the essence and a restore needs to be performed, it is one less thing to worry about.

In addition to associating files and databases, CodeGuard provides recommendations via automated detection of your particular CMS, so that you can be sure you are associating the right file structure and database. This prevents the following headache scenario: “I need to restore my blog! Wait, which database belongs to this website?! Was it “mywpsite_mysql1415” or “mywpsite_mysql1451”?’

SummaryPage

6. No Changed File List

CodeGuard ChangeAlerts include information about files added, modified, and deleted, every time we perform a daily backup with changed content. DMS provides an email notification when a new backup is taken, but there is no list of the actual changed files, just a number, which is not helpful when customers want to know the details of what is happening with their site: “Was I hacked? Was htaccess modified?” Was there some unintentional or malicious tampering?

ChangeAlert

CodeGuard provides these notifications via email and our ChangeAlert iOS app. DMS does not appear to have neither actionable ChangeAlert-type notifications nor any apps for iOS or Android for website management.

ChangeAlert_ap

 

Restore Functionality

7. No Combined Database + File Restore

By working directly with customers and closely monitoring restore feedback, we’ve developed a system that helps novice and first-time users through the restore process for their website. Guiding customers through an *entire* restore of both their website and database while providing recommendations around which versions to use reduces website downtime and frustration.

CG_restore

8. No Test Restore

A backup service is only as good as their ability to restore. Wouldn’t it be nice to be able to test the efficacy of the restore process without potentially disrupting your live website? CodeGuard lets you perform a test restore at your leisure to confirm that the permissions on your website are setup properly, as well as to doublecheck credentials, passwords, etc, are all correct. 

testrestore

9. No Pre-restore Backup

Before CodeGuard completes a full-site restore, we backup the content on the live server. Our pre-restore backups allow customers to return to the state immediately before their restore. When customers are performing restores, they often aren’t sure exactly which prior version to restore. 

Without either an automatic pre-restore backup or a manual on-demand backup, there could be a significant amount of content that would be destroyed and irretrievable if a restore (which removes the content) was initiated.

10. No Restore Feedback

CodeGuard asks for feedback after every restore. We want to know when we met the customer’s expectations and when we did not so that we can improve the experience, underlying systems, documentation or anything in between. Even if our internal tracking for a restore says that it completed properly, if the customer provides feedback that it didn’t restore to their expectation, we can assist them, and investigate the underlying issues. 

The idea of website setup completeness came directly form restore feedback. Customers weren’t aware that they needed to backup databases for their CMS-driven sites. After investigating why customers were reporting restores weren’t successful, we found that we needed to proactively prompt them to add databases – far ahead of when they would need to perform a restore.

Restore_Confirmation2

And once the restore has been completed, the feedback from the post-restore survey populates a 50 inch monitor in the CodeGuard network operations office.

Restore_Feedback

11. Request Zip Slow

It takes ~10x longer for DMS to provide a zip file that can be downloaded than CodeGuard (DMS: 20 minutes, CG: 2.25 minutes) Note: This is just the time to produce the zip and make it available for download. This does not include the transfer time required to download the file from the service. Our custom tools allow us to access customer data and process it quickly. 

12. Full Restore Slow

Restore is the reason backup exists. Backup in and of itself is meaningless if you cannot access the contents. And when it is time to restore, it should be easy and fast. No one cares if Batman is in shape until a disaster strikes. When that disaster strikes, you better believe Gotham will be hoping that not only will Batman show up promptly and take care of things, but that Batman has maintained a stringent workout regiment during the off-period.

batman

Image courtesy of http://www.comicvine.com/images/1300-4810718

Backup is not altogether different. There are intense crises when something has gone awry, and the product must deliver at that moment. And then there is the lull after the disaster, when the service must perform at the same level, but without customer accountability as to the performance. What I mean is that anyone can tell if a restore performed properly – after the restore finishes, refresh the website and see if it is working.

But how can you tell if the daily backups are working properly? That is a much more challenging problem to solve. Download the zip for each day and compare the contents to the live server? Who has time for that? The reason I bring up the importance of the daily backups is that for the restore to work at all, the right data has to have been backed up in the first place, and then properly stored. The slickest interface in the world and the easiest-to-use service loses all value if the actual data needed isn’t there. Let’s assume that the data is there and a restore is attempted.

In many cases, particularly for customers who are used to managing their website through the CMS interface, a restore is a daunting proposition. CodeGuard’s restore wizard guides customers through the restore process and provides suggestions to ensure that they can get the restore started quickly. 

In our testing, for a full restore where only one file has changed, CodeGuard was 6,266% faster than DMSCodeGuard completed the operation in 24 minutes, including taking the pre-restore backup. DMS took nearly 26 hours.

 

Architecture

13. No Differential Restore

The full power of differential backup is felt when a restore is needed. We are able to bring simplicity to a complicated situation through our technology, which intelligently and efficiently discerns what content needs to be replaced on the live server. While DMS uses a form of differential backup, unfortunately, the restores do not leverage the metadata to perform intelligent comparison-based restores. Their restores simply push all of the prior content, which is one of the reasons we are 6,000%+ faster when conducting restores.

14. No Evidence of Custom Quadpipes Tool

CodeGuard has developed a number of advanced tools to ensure that our system is secure, reliable, efficient and performant.

The reason our backups are so much faster than DMS is that we transfer data via simultaneous connections, and do so with code written in Go. We call it “Quadpipes” and it has dynamic download capabilities across multiple connections and sessions. This means that we can increase or decrease the number of connections we make to a particular host based on their performance, availability and capacity.

15. No Evidence of Custom S3GOF3R Tool

Part of the reason our restores are so fast is that we use s3gof3r, which was written in-house and then shared with the world. It is used by MariaDB, Basho, Heroku and who knows how many others! It is a streaming S3 client and possibly the fastest in the world. We are not aware of one that is faster.

16. No Evidence of Custom Zipper Tool

The reason our zips are so fast is probably “Zipper”, which is a parallelized zip download creation tool we built. A straightforward approach would be to download a backup, extract the contents, archive the files and then upload the archive to a place where it can be accessed. That process requires moving and copying content several times, which generates a lot of slow I/O operations on the server and, ultimately a delay in delivery for the end-customer.

Zipper leverages the speed of s3gof3r and the parallelized nature of the git-archive tool to produce a zip from a bare git repository without the need to move and copy the content several times. The result is that we’re able to retrieve the repository, produce the zip and place it in an area that a customer can access with minimal delay.

17. No Evidence of Monitoring Systems

CodeGuard has built several monitoring systems to ensure that our backup and restore systems are working at 99.99+% levels of reliability every day. When operating at the scale that CodeGuard does (~8.5M backups per month), we need automation to ensure that no customers or issues are going unnoticed. 

We track our daily backup success rate across all product lines as well as our daily restore success rate across all product lines. Perhaps DMS also has monitoring systems but we weren’t able to find any information to indicate this was the case.

18. No Evidence of Redundancy

DMS advertises a single IP that is used for connectivity. This indicates a lack of redundancy in their infrastructure. If something goes wrong whether it’s the fault of DMS, their host or the datacenter that their host uses, it’s likely that customers will be missing backups.

While CodeGuard utilizes load balancers for web requests to our user interface and a virtual private cloud (VPC) for our outbound connections, we still have multiple IP addresses from which we make connections. Providing all of these IPs to customers allows us to change infrastructure, distribute load, route around localized failures and perform routine maintenance on different aspects of our systems in a way that is completely transparent to our customers. While we do rely heavily on cloud infrastructure, this approach helps to ensure that we’re able to maintain our high levels of reliability.

19. Primitive Initial Backup Server Requests

To gain insight into how DMS constructed their solution, we backed up the same six files with DMS and CodeGuard. We utilized log files to record the specific server requests and these are the results: 80 requests for DMS and 191 requests for CodeGuard. Fewer requests isn’t better in this case – CodeGuard is doing some additional work to detect content management systems and additional configuration to ease future restores. All of that and the initial backup times for CodeGuard are still faster than DMS.

CodeGuard’s server requests for the initial backup process contains five major steps:

  1. Setup through Web UI
  2. Start of Backup Process Login & FTP Setup
  3. Listing
  4. Download
  5. Testing for CMS Versions & Configuration

The process for DMS has the same first four steps, though they are accomplished in a different fashion. Most notably, “MLSD” is the listing command relied upon by DMS. CodeGuard experimented with MLSD in our prototype architecture in 2011 but has been using “LIST -a” since then, as it is more widely supported and produces more predictable results.

Ultimately, the server requests being made aren’t that different. The performance gains CodeGuard has over DMS must occur after the server requests are made. Here are the 191 requests for CodeGuard.

CodeGuard Initial Backup Server Requests

20. Primitive Restore Server Requests

The server requests for the initial backup are not that different – but what about the restore? CodeGuard has a 6,000% performance difference in the speed of restores – perhaps some reasons for that performance disparity will become evident by examining the server logs.

CG_Restore Commands

The 45 requests in CodeGuard’s restore process can be broken into seven major steps:

  1. Start of Pre-restore Backup Process: Login & FTP Setup
  2. Listing
  3. Connectivity Test
  4. Ensure root directory path exists and is accessible
  5. Start of Restore Process: Login & FTP Setup
  6. Listing
  7. Upload needed files

The process for DMS is different. It contains two major steps:

  1. Login & FTP Setup
  2. Upload files and change modification time to prior values

DMS_Restore_Log

The DMS restore has only two major steps and the core of the process is the second step – uploading all website files. Does the website being restored have 10,000 files? That’s not an unreasonable size for a moderate WordPress blog. Well, DropMySite will upload all 10,000 of those files during a restore whether they were missing, changed or identical. Whether the goal of the restore was to repair one configuration file or revert changes to a botched theme, the customer will be spending a few hours waiting for DMS to overwrite perfectly good files.

The CodeGuard restore process has several additional steps which provide a safe and speedy restore. Before overwriting, deleting or modifying any website content, CodeGuard first takes a backup of the current state of the website. In the event that the customer selected the wrong date to restore to or the restore is interrupted by a hosting issue, they can always revert to a point in time immediately before the restore. DMS does not provide this functionality nor do they allow on demand backups for customers to initiate this themselves. This leaves the customer exposed with a gap of hours, days or weeks since their last backup.

The core CodeGuard restore process leverages the power of differential backups, but in reverse. After performing a new backup, CodeGuard will analyze the website, see what *needs* to be restored and modify the running website content to match. This extra analysis often yields a very small subset of changes that need to be made to restore the website to the desired state. For our hypothetical 10,000 file WordPress site, this may mean that only 1, 100 or 1,000+ files need to be uploaded. Any of those cases would complete much faster than uploading 10,000.

Is the DMS approach simpler? Yes, but just like a go kart is more simple than a Ferrari, one is going to get you where you need to go a lot faster and be a lot safer going down the highway.

 

Other

21. No Evidence of Intellectual Property

We are not aware of any intellectual property possessed by Dropmysite Pte Ltd. CodeGuard filed a patent in 2011 and was awarded the patent on June 30, 2015, USPTO 9,069,885. The patent is titled “Systems and Methods for Automated Retrieval, Monitoring, and Storage of Online Content”.  Here is a brief description of the patent:

Systems and methods for automated retrieval, monitoring, and storage of online digital content, wherein such content includes source code and files for hosting websites, audio files, video files, data files, system files, image files, or any other content that is typically stored in third party servers. A content retrieval system hosted on a physical server or a cloud continuously monitors user data hosted on a third party server for changes to the data.

The method involves creation of an index list that is updated periodically to keep track of changes to the metadata associated with the user’s content. Such an approach saves time and valuable resources to individuals and/or organizations enabling them to perform periodic monitoring of their data, and enabling rollback to a previous version of their data whenever needed. The system additionally monitors user content for malicious attacks and hacks, and provides notification alerts relating to the same.

22. Unfocused Product Strategy

CodeGuard offers website backup services. DMS offers website backup, email backup, and phone backup, via its dropmysite, dropmyemail, and dropmymobile brands. Strategically, we have focused all of our resources on delivering the most efficient and effective website backup service in the world. DMS is simultaneously deploying a website backup service, email backup service, and a backup service for Android devices.

23. Incorporated in Singapore

CodeGuard is a Delaware C-corp, subject to the laws of the United States. The Delaware General Corporation Law is one of the most advanced and flexible corporation statutes in the United States. We are unsure of how enforcement of statutes works with Singaporean-domiciled companies.

According to the Singapore website http://www.singaporelaw.sg/sglaw, “The legal system in Singapore has received numerous international accolades for its efficiency and integrity. As a consequence of this, there is now wide recognition of Singapore as a leading legal hub in Asia.”

 

Support

Earlier I explained how CodeGuard views support and actually calls it Product Development Feedback, but when we work with large hosting providers, we have to be malleable and acknowledge that many companies use the term “support” and have entire “support” departments. For this next portion, then, we will intentionally forget what I stated before, and whole-heartedly adopt the word “support”. Let’s see what we can glean in comparing CodeGuard’s support with that offered by DMS.

24. No Evidence of 30-minute Average for Initial Ticket Response

CodeGuard utilizes Zendesk for all customer support interactions, and through Zendesk, we are able to easily track key metrics, such as new tickets per week/day, open tickets, time to resolution, etc. One of the key metrics we track is the time to first response. On average, CodeGuard responds to tickets submitted between 9am-5pm EST within 30 minutes. Tickets submitted outside of that window take longer, but we do have an escalation path for customers in dire need.

Without privileged access to DMS support metrics, assuming they are being tracked, we have to use external proxy information to try to ascertain what ticket response times may be. Two data points does not necessarily make any type of trend. Here are two recent tweets that do not have responses as of Nov 6th, 2015, and one of the tweets says a response was not received for months.

DMS_Support1

Screen Shot 2015-11-06 at 10.01.12 AM

25. No Evidence of 24×7 Support

CodeGuard offers 24×7 support for our customers via hosting partners. This is not an easy task and requires us to work with 3rd party agencies to route after-hours calls. We work with VoiceNation so that our customers can call anytime – night or day, and speak with a live person. Depending on the nature of the call, VoiceNation can call our on-duty engineer and get immediate assistance for the customer.

We do not know exactly how DMS handles support. A call made at 10:00AM EST to the number listed on their website was not answered. The only number we could find is +65 6779 5131, though on the website there appears to be an office in the United States.

DMS Contact

During normal business hours in the United States, phone calls to CodeGuard are answered within three rings. Since we use Grasshopper for our phone system, it may actually be a few more rings for the customer or prospect calling us. Calls to our support line have a dedicated person responsible for answering them each day. Calls to the sales line might be answered or may go to voicemail. Since we can’t do all things at once, right now we are more concerned about delivering for our existing customers than gaining a few new ones.

 

Pricing

Let’s take a look at the prices for CodeGuard compared to DMS. Since we don’t have access to the pricing offered to hosting providers, we can use the pricing on their website as of November 5th, 2015.

DMS_Plans

Clicking on the the last plan name, “100GB”, you can obtain pricing for larger storage plans, up to 1,000 GB. Here is a chart with each of the plans along with the price and price per GB.

DMS_Pricing_Chart

To make this easier to digest, here is the graphical output of the monthly price per GB.

DMS_PPG

Starting with the cheapest plan which provides for 10GB, the monthly price per GB is $.25. The price per GB steadily decreases until it reaches its nadir at $.11. Let’s take a look at CodeGuard’s pricing.

CodeGuard_PricingA VERY important clarification needs to be made immediately before any useful analysis can take place. On CodeGuard’s pricing table above, the storage amounts are COMPRESSED storage on our servers, not UNCOMPRESSED. Our plans have storage allotted based upon its COMPRESSED size. On the DMS pricing page, the storage numbers they use are for UNCOMPRESSED storage. It doesn’t really matter whether we use a compressed or uncompressed number, we just have to be consistent.

In the testing that was done, we found that the 2.25GB Photo Blog site was 200MB within the CodeGuard system and 2.25GB within DMS. 2.25GB/200MB = 11.25, and for the purposes of comparison we will use this ratio to convert between the COMPRESSED storage size and UNCOMPRESSED. But what if that is the wrong ratio? It is likely that this is not the right ratio, but we are being conservative since the site possesses a large numbers of photos, which are hard to compress, versus a large number of text files, which are much easier to compress. So it is likely that the ratio is even higher.

For the four major plans, Ninja, Ronin, Samurai, and Shogun, the price per GB of UNCOMPRESSED storage can be seen in the following graph.

CodeGuard_PPG

OK – so what does the pricing look like when CodeGuard’s plans have been adjusted to UNCOMPRESSED storage? Here is the prior chart, with CodeGuard’s plans now added at the bottom.

Full_pricing_chart

Even with this data set, it is slightly challenging to compare pricing, although for plans that are utilized at their maximum storage allotment, CodeGuard’s pricing is much lower than DMS. To produce as close to a true apples to apples comparison, we will compare the four CodeGuard plans and their closest DMS equivalent. With the 11.25 Uncompressed/Compressed ratio, the four CodeGuard plans end up with uncompressed storage allotments of 56, 563, 1406, and 5625 GBs. CG_plan_conversion

The largest plan you can purchase through DMS’s website is 1000 GB, so unfortunately, we cannot compare the Samurai and Shogun plans, as uncompressed Samurai offers over 1,400GB and that number is greater with Shogun. Ninja and Ronin, though, have comparable equivalent plans of 60GB and 600GB of storage. The prices per GB/month for the DMS 60 and 600 plans are $.21 and $.12. CodeGuard’s equivalent pricing is $.09 and $.07, which is more favorable by 134% and 80%.

26. DMS is More Expensive

6_60Comp

In the graph above, the top black line is the pricing for DMS for the 60GB plan and for the 600GB plan, compared to the equivalent CodeGuard pricing. DMS is clearly more expensive for the equivalent plans.

 

Summary: CodeGuard Outperforms

According to the tests we conducted, CodeGuard outperformed DMS in every area but one. The restore time was 63X faster. Not 2% faster. Not a few minutes faster. 6,000% faster.

The initial backups averaged 1,210% faster than DMS.

The zip was 800% faster.

And CodeGuard is cheaper. Anywhere from 80-134% cheaper.

Overall_CG_DMS

Faster. Cheaper. More fully-featured, and built to last by world-class engineers. Hopefully, this blog post is sufficient to answer the question: “How is DMS different from CodeGuard?”. Below is a summary of the information for quick review.

33 Ways

 

Two Years of Go at CodeGuard

Twitter Facebook

At CodeGuard, we’ve been using Go to build the premier website backup product for just over two years. Our first Go code entered production on August 14, 2013 with the open source s3gof3r tool that transfers our backup data in and out of S3. 30 times faster than the ruby code it replaced, it made an immediate impact on our backup process efficiency, enabling us to serve our customers with larger sites rapidly.

Since that initial deployment, Go has increased as a percentage of our production code ever since. As we’ve scaled our architecture to run more than a quarter million website backups per day, we’ve had to build new systems and re-architect old systems. In this post we’ll look at some of the systems we’ve built using Go and how Go has helped us to scale while also increasing the reliability of our product.

Small Services

Key to scaling our product architecture to handle hundreds of thousands of backups per day has been building small services, both for new product features and as part of breaking features out of the monolithic legacy architecture. As other companies have documented, Go is well-suited for these kinds of services.

The common experience with building these small services is that they are easily deployed, efficient, and — most importantly — reliable. Let’s look at why Go services tend to have these properties.

Deployment

CodeGuard is an engineering-driven startup and engineering resources are usually the limiting factor in product development to drive growth. Efficient use of engineers’ time directly drives ROI and revenue growth. We also deploy frequently to our production systems. When we build a new service, the cost of deployment is a critical factor in the development and ongoing cost of that service. Deployment cost is driven by both the cost of building or setting up deployment tooling as well as by the time and complexity of deploying new code to staging or production environments. We always use tooling to automate deployment. With Go, deployment automation is far simpler than for many other technologies:

  • static binaries: a Go service is deployed as a single statically-linked binary. This means that it has no dependencies on other software, simplifying the deployment process.
  • easy cross-compilation: a statically-linked binary is great but it must be built specifically for the architecture of the server where it will run. A binary built for OSX, for instance, will not run on a 64-bit linux. CodeGuard engineers use Apple OSX for development but all code is deployed and run in AWS on linux servers. To cross-compile a Go binary for linux on OSX, the command is as simple as: `env GOOS=linux GOARCH=amd64 go build`

From Serial to Parallel

CodeGuard is a website backup company and in the process of completing millions of backups per month, we move petabytes of data between customer servers, our servers, and Amazon S3. To operate cost-effectively and quickly these backup systems must be efficient. Thanks to the architecture of Go and it’s optimized standard library, it is far more efficient than most dynamically-typed languages such as ruby or python. The memory model and runtime also ensures efficient memory usage. Compared to a similar dynamically-typed, interpreted language memory usage can often be an order of magnitude less.

The most important way that Go makes code more efficient, though, is through concurrency. With the imminent death of Moore’s law and the stalling of CPU clock speed increases a decade ago, concurrency is critical to efficient use of modern servers. To understand how Go addresses this paradigm shift in computing, see Dave Cheney’s excellent article “Performance without the Event Loop”. At CodeGuard, using Go allows us to use concurrency to parallelize formerly serial processes. If two steps in a process are not directly dependent on one another, they can be run at the same time so that the time to complete them is the maximum of the run two run times rather than the sum. If a network operation can be parallelized by sending or receiving chunks of a file at the same time, Go makes that easy. To illustrate the power of concurrency to increase speed and efficiency, let’s take a closer look at a Go service that CodeGuard recently deployed.

Website Listing Service

CodeGuard website backups are incremental, which just means that on each backup only the changes from the previous backup are detected and downloaded from customer websites. This reduces load on customer servers as well as backup size. In order to detect the changes, all website files must be inspected and compared to the previous backup. Since CodeGuard connects to customer sites over SFTP and ftp, this comparison is done by listing the files and directories on each website. The vast majority of CodeGuard’s customer sites are backed up via SFTP, since it is more secure and reliable than ftp, so the listing service currently supports only SFTP currently.

Serial Listing

Previously, listing was entirely serial. Only one directory listing was requested at a time. It was parsed on receipt and then any directories in that listing were placed on a queue to be listed. This process continued until the queue was empty. This meant that listing speed, beyond listing only one directory at a time, was also limited by the round trip speed of the connection plus the time to parse the listing data.

Concurrent Listing

To improve the speed and efficiency of listing, the clear solution is to request multiple listings concurrently. This process is similar to the serial listing process, but instead of requesting only one listing at a time, a listing is immediately requested whenever a directory is found in a listing.

SFTP runs on top of SSH and SSH connections have a real cost, both on the client side and the remote server side and it is unacceptable for listings to cause high load on customer servers. It is impractical to open an ssh connection for every directory encountered. Many customers also have limitations on the number of SSH connections they can open, either enforced by their hosting provider or to reduce load. To mitigate this, the listing requests are multiplexed over multiple SFTP sessions running on ssh sessions. In addition, SFTP allows for multiple concurrent requests per SFTP session. Multiple SFTP sessions are created for each underlying SSH connection and multiple requests are then made on each sftp session. This allows a large increase in concurrency without a correspondingly large increase in server loads.

In addition to multiple concurrent listings per website, multiple sites are listed concurrently, allowing CodeGuard to maximize our server utilization while still minimizing load on customer servers.

Performance

Concurrency is nice, but what how much of a performance improvement does it give us over a serial process? Under ideal conditions (low latency, reliable connections), the serial process had a peak performance of 5 directory listings per second. The new listing service, in contrast, averages approximately 75 directories per second. For some large sites, where more connections are opened, performance can exceed 400 directories per second. In addition to this 15x average speed increase, the processing efficiency of Go allows more websites to be listed per server and runs on smaller servers than previously used. This translates into significant backup speed improvements while also lowering costs to serve our customers.

The Future of Go at CodeGuard

Using Go has been instrumental in scaling the CodeGuard infrastructure to millions of monthly backups and has allowed us to serve our customers better through increased performance, reliability, and efficiency that allows us to provide an affordable website backup product. It will be certainly be a part of our engineering-driven, customer-focused approach to making the best website backup service even better.

~Randall McPherson

CodeGuard goes to HostingCon 2015 in San Diego (Pt. 3 of 3) – Phase 3: RESULTS

Twitter Facebook

I hope everyone enjoyed my last post “CodeGuard goes to HostingCon 2015 in San Diego (Pt. 2 of 3) – Phase 2: EXECUTION.” I apologize for the delay in sharing the results with you, but now that the numbers are in, you can see how we did!

 

It’s no secret that results are what matters most. The real secret is how you plan and execute to achieve the results that you desire. Fortunately for you, we’ve already shared our secret sauce :).  As your trusted source, key eye-witness and major contributor, I am happy to share CodeGuard’s results from HostingCon 2015.

The Dinner – was well-attended with the private dining room nearly maxed out with 32 attendees. A few of the companies represented were as follows: Symantec, Intel Security, NameCheap, HostDuplex, MailChannels, UK2Group and Verisign.

Dinner with Help.com

The actual Trade Show, spanning over two days, was the big event, which went extremely well. If you read the prior post about executing, you’ll understand how we leveraged the t-shirts, cookies, contest entrants, putting game, & demos to drive partnership discussions. Our results funnel is shared below:

Funnel_CodeGuard_Blog_HCon_2015_ppt

I’ve been transparent with all of the details up until now but will wait until a later blog post to reveal the total number of strategic partnerships we established at HostingCon 2015.

See below: Jacob from H4Y Technologies (left) and Chris from CodeGuard (right) after a recently minted partnership.

HCon_Jacob @H4Y & Chris

The winner of the Amazon Echo: Chris Henning of FindMyHost. His partner in crime, Richard Guzzo, was sinking puts one handed by the end of day two, so it only made sense that one of these guys walked away with a prize.

2015 HCon_Amazon Echo Winner_Chad Henning

The winner of the MacBook: Antonio Munoz of Fullx Hosting, who is also now partnered with CodeGuard.

HostingCon_MacBook Winner_Antonio

Quick recap of how we had a successful tradeshow:

  • Hustle / Hard Work → reaching out to 500 – 1,000 people/companies the week before the show
  • Planning → details matter…down to the last one!
  • Engaging Booth → booth grandma’s with warm cookies, putt-putt for sweet giveaways (MacBook & Amazon Echo)
  • Killer Product → CodeGuard
  • TGTPU Value Proposition (Too Good To Pass Up) → CodeGuard’s Partners benefit from the following Measurable Success Metrics:
    • Increased Revenue
    • Increased Customer Satisfaction
    • Decreased Support Time / Costs

Thank you for listening! Now Go Forth and Exhibit!

Chris