We belong to a timeshare organization called Interval International. Yes, we were suckered into this relationship about 10 years ago. However, we do the math every year and it still pencils out for us to use a timeshare company to schedule most of our vacations. We get about 3 to 4 weeks of vacations a year out of Interval for the timeshares we deposit.
This sounds great, but it is really difficult to find a place we want to go that is within our flying radius and will hold a family of 7. Let me walk you through what we have to do to find a good vacation timeshare.
- Login to their website (their mobile app is horrible and not useful)
- Browse to their Vacation Exchanges
- Chose a date range and location of choice
- Provide the number of people traveling
- Select the property we own that we want to exchange for this vacation
- Review the properties available and confirm that the dates shared are the dates that will work for us.
Writing these steps down and reviewing them in this format doesn’t seem hard, but the above steps takes us about 5-8 minutes to do because their website is so slow. To compound the issue, timeshares change their availability at least hourly! My wife and I did these steps above a couple times a day to start looking for vacations. This is exhausting, a waste of time and reduces your self-worth to a monkey banging out a series of keystrokes hoping it leads to a different result every hour (resulting in insanity).
Finally, the engineer in me took over and decided to solve this problem. The first blocker I ran into was that I was a CTO for many years… and I am now a retired and wanna-be developer. I know all the right words, design patterns, architecture solutions and technology but it would take me weeks to write one line of code! So a managed service by AWS comes to the rescue!
Let me review my implementation of how I made the Anti-Insanity Vacation Helper. The first thing I did was spin up an AWS account and locked it down based on my best security practices. Then I started creating a Cloudwatch Synthetics Canary to “monitor” the Interval page that showed me which vacation properties were available. To help me create the code (remember I’ve been a CTO for a long time) I used the Cloudwatch Synthetics Recorder. The recorder created the code in NodeJS and Puppeteer and in theory would now automate what a user would do in the browser. Instead of the 6 conceptual steps listed above it came to roughly 60 actual mouse clicks and keyboard entries that someone has to do to view vacation property availability! Cloudwatch Synthetics allowed me to easily take a screenshot per step and save those screenshots of the browser in S3. To get to this point, it took me about 2 hours late on a Friday night. However, due to the old technology that Interval uses, I had to tweak several of the automated steps to get them to work properly (finally going to bed around 11pm). Finally, I now have a screenshot in S3 of the available properties that I am interested in based on a provided date range and location.
But that only helped me half of the way. Now I have to login to AWS and view the screenshot every hour to see what’s available. So long story short… (is this considered short?) I raised an S3 Object Creation event that triggered a Lambda function to send an email using SES, of the screenshot to my email address. See the final architecture below.
Now, every hour I get an email with a screenshot of vacation properties available. Yay!!! That lasted about 2 days until I realized I could refactor my solution to be a lot more elegant. A few improvements I made included:
- Only sent an email if the html page showed that there were available vacation properties. This cut down the emails from 24 a day, to about 2 a day.
- I removed the hard coded date ranges, locations and number of travelers and added them as Environmental Parameters. This allowed me to copy the Canary, create several more searches with a different set of parameters per search. Now I have 4 different searches setup (Hawaii, California, Idaho and Oregon) with different date ranges all sending me an email every hour a timeshare property is available.
- I have updated the Lambda function to parse the Canary details to provide more context about the screenshot in the email. After all, my wife was getting the emails too and she couldn’t figure out what the screenshot was trying to show her sometimes without the context of the search parameters.
So, a CTO did something and I actually got my hands dirty again! I am hoping to do this a lot more in the future, so stay tuned! If you want help implementing a solution like this and you don’t enjoy logging into archaic websites often for repetitive tasks, send me a private message on LinkedIn and lets start saving you hours a day by automating your vacation search!