Holiday API™

Holidays are hard. We make them easy.

Under 10 Employees
Founders Code
Solo Founder
APIs
Calendar
Events
Programming
SaaS
Utilities

We're on a mission to rid the world of databases and spreadsheets full of stale holiday data. Our algorithmic approach allows us to provide accurate, up-to-date holiday info that can be added to your app in minutes.

July 31, 2020 July / Final Retrospective

Hey y’all, so it’s been well over a year since I started posting these retrospective posts.

When I started out this experiment of running my side hustle “in the open”, I wanted to commit to at least a full year of monthly updates about my business, our mistakes, successes and how it was affecting my well-being as a husband, father and full-time software engineer.

Now that the year was up, it was time to reflect on things and evaluate whether or not I would be continuing these updates. I ask myself the usual questions like “how does this improve my life” and “if I stopped doing this tomorrow, how will I feel?”

Simply put, while I do think that writing and journaling is extremely important in both business and in life, I don’t find that posting these retrospectives to Indie Hackers to be very beneficial, outside of the benefits of simply journaling in private.

It’s been a fun experiment, but I think the negatives outweigh the positives in terms of being this open, at least at the scale that I’m at with my business.

The thing is, I never came to Indie Hackers to try to sell anybody anything. I wanted to share my journey, hopefully help others and potentially make some new friends and even learn a thing or two along the way.

I’ve made some new local friends, so that’s been good, but as a whole, I feel like the community mostly exists in an echo chamber of trying to get other IHers to validate their ideas, or in terms of actually trying to sell directly to the community members.

I think it’s great that people have hustle, but when the bulk of the feedback you get on your posts are unsolicited emails trying to sell you something, with a small bit of smoke blown based on your own revenue numbers, it’s quite the turn off.

My journey’s not ending anytime soon, and I plan to continue to write about my business more on my own personal blog, but I think I’m done hustling in the open, at least for right now.

As always, happy holidays and hacking!

June 30, 2020 June Retrospective

June is traditionally one of our slowest months. Why am I mentioning this? Because I think it really important for people to be aware of their sales numbers.

Certainly, during your first year, you may not have the historical data to have such visibility. I get that. But if you’re into your second year or longer, you should be aware of the waxes and wanes of your business and not caught off guard by a “bad month”.

Even with bad months, once you’re into the second year, you get the opportunity to do year over year growth metrics instead of just month over month.

That all said, this month actually started out extremely slow, to the point that we were tracking at the same rate as June 2019 at the midpoint of the month. Given the exceptional growth we’ve experienced this year, that was quite a bit of a downer.

As I suspect many Indie Hackers experience, a bad month, even when you’re expecting it, can be a kick to your morale. Every week I track my morale and that was definitely evident this month.

Fortunately, the slow start turned around in the last few weeks and we ended the month strong as the SECOND worst month of 2020 for us. As “bad” as the month was, that’s still a substantial ~200% year over year gain.

I’ve mentioned this before, but you need to zoom out and look at the bigger picture sometimes.

So I know everybody is wondering what changed that would have turned the month around. I suspect that the major contributing factor is that we’re at the end of the quarter.

Being a development tool, we tend to have a lot of corporate and enterprise customers that live and die by the budget. We tend to see spikes around the end of the quarter, but as mentioned, usually not June (end of Q2).

The other thing that happened this month, is that we launched a brand new endpoint to our service, that makes it easier to calculate the number of business days into the future.

While it’s hard to say if it’s definitely had a positive impact on revenue, it’s definitely helped position us as more of a calendar resource and less as a data as a service provider.

We have the data, but the data as a whole is a hard commodity to sell. People don’t necessarily grok that the data changes regularly and that doing things like grabbing 1-5 years of data up front is just a horrible way to go about things.

By positioning more as a calendar resource, with functionality that utilizes the data we’re aggregating, but providing value without actually serving up holidays directly, we’re able to differentiate ourselves even further from our competitors.

Until next month… stay safe and happy holidays!

May 29, 2020 May Retrospective

Never could have imagined that the world would still be seemingly on pause for another month. Texas is attempting to reopen even though we’ve recently seen our highest spike in new cases in a day this past week.

On the business front, things are still doing amazing for us in terms of revenue, growing not only year over year but month over month. Keeping on top of COVID-19 updates to our data has kept us busy along with some other recent data updates un-related to the global pandemic.

New this month was encountering an issue with one of our project dependencies that led to uncovering a pretty nasty bug in our code. We’re huge on unit testing, system monitoring and all things system health (in my opinion, you can’t claim exceptional uptime numbers if you aren’t doing these things) so the issue ended up being exposed before getting code out to production.

Without going into too much technical detail, the issue was related to a library we use for some of our algorithmic date generation, specifically conversion of different calendars to Gregorian dates. The error was caught because our accuracy checks began failing in our CI/CD pipeline.

This particular issue made me completely lose faith in the library, so we scrambled to come up with a new solution that didn’t involve said library. This kind of comes down to a build vs. buy scenario and in this instance, I think we should have built our own solution up front because at the end of the day, our algorithmic date generation can easily be considered part of our IP and not something we should be relying on third-party code for.

Live and learn though, that’s what this is all about.

April 28, 2020 April Retrospective

Last month with the COVID-19 Edition of these updates, but really, this month was the month that hurt the most. Not because business is bad or anything, but because we had to cancel a decent amount of travel and well-deserved downtime.

Both cancelled trips were birthday-related. Big 70th bash for my MIL and my daughter’s inauguration into her teens. That doesn’t mean things were a complete bust, we made things work thanks for Slack and some Apple products being released and procured.

Shout out to another business that’s making it work during the plague years, https://cardmyyard.com/. They do “greeting cards” in your yard by way of little signs and stuff. Absolutely amazing, well worth the nominal fee, and their service turned the dark times light again.

On a personal level, without the already scheduled downtime and weekdays blurring into weekends and all of that, I’ve been on a serious grind. I’ve been getting up earlier, sleeping better, and have been moving at a pretty solid clip all around.

Oh, and didn’t get a YC interview for this batch. Perhaps the disappointment is being channeled into “shippers energy” or I actually really don’t care because things have been going as planned.

I’ll definitely be applying again next batch, probably not on the first day applications open, but if nothing else, I still appreciate their application and the act of filling it out to help me ground myself, focus and all of that.

On the business side of things, we’ve been doing fantastic. Day to day efforts include the usual amount of data corrections and improvements as well as improvements to our website. We’ve completely revamped our documentation and actually fixed a pretty substantial bug today (more on that in a bit)

Really big news is, amidst everything that’s been going on in the world, we’ve recently exceeded $30k ARR (which is actually ~50% of our all-time earnings if you wanted to try to back in on the math of our growth rate).

Not to gloat and/or humblebrag, but getting here has taken a lot of work, and it’s the third time I’ve achieved this level of success with a side project (first being my social network, second being my blog).

One of my biggest fears is that whatever I’m doing is the last thing and/or the best thing I’m ever going to do, so it’s really just a friendly reminder to myself that I didn’t “just get lucky” as I’ve said about my past successes.

Wow, this post more than others is really starting to drive home the fact that I need to be doing personal retrospective posts instead of posting these under this particular project of mine. If nothing else, as I’m starting to cultivate some new projects, it definitely starts to make sense to do one rambling post instead of one per product.

Back on track, as mentioned, we fixed a bug today that was pretty huge and comes with a small bit of “TIL” to share with folks.

So every day I monitor a handful of things, usage recordings, third-party API usage and even Google Webmasters (I think it’s called Google Search Console now?) to make sure I have a pulse on what’s going on.

Over the last few days I had noticed a spike in 404 errors coming from links in our sitemaps. As it turns out, we actually had a pretty substantial bug in our website code that was causing these 404 errors and I’ve actually attributed to a handful of other errors that we’ve “fixed” in the past.

Just a friendly reminder that external monitoring is extremely important (in b4 a dozen replies from people that built no-code monitoring solutions they are trying to schlep on here).

The bug in question went undetected for at least a couple of months, primarily because “it all seemed fine” when in reality it wasn’t. Sadly, we don’t give our website the same level of testing that we do our data (over 1.2 million data point assertions, thank you very much) and that’s where different monitoring mechanisms can help gap fill.

All about getting 1% better every day, and sometimes that includes shipping some bugs that will later turn into epic wins.

March 31, 2020 March Retrospective - COVID-19 Edition

Well this month has been… interesting.

Like many IHers out there, I’ve been at home and avoiding the invisible enemy that has waged war against humanity.

While not the type to get too stir crazy, not this early on, the month has actually been quite good. A lot of focus has been on our internals, data detection and integrity checks as well as starting to put together some better documentation, as we’ve finally outgrown the documentation style/layout that we’ve been using since damn near day 1.

With all of the crazy going on, Holiday API appears to have been inoculated against COVID-19. Even though we do service quite a few companies in the travel and hospitality space, we’ve ended up having one of our best months ever in both terms of month over month growth from last month as well as year over year growth against March 2019.

My theory there is that developers are one of the fortunate career paths that aren’t directly affected by these sorts of things, especially in terms of being forced into remote work. Developers are happiest when they are shipping, and being able to wake up and roll out of bed and start hacking is a good thing.

As I’ve mentioned a few times this year, we’re in that polish phase where everything we’re doing now is a ton more nuanced in terms of iterations than it was when we were building out the bulk of the system in the early days.

I’ve had folks reach out because I’ve evidently given off this vibe that I’m either burned out or overwhelmed with the project at this point. A lot can get lost over text on a screen I guess, because that’s far from the case.

So much so that while working primarily on Holiday API (outside of my full-time job, because I’m still living that dream ;) I’m venturing more and more into new projects not because I’m bored with what I’m doing, but because I’m extremely inspired.

As a whole, the more full my plate is, the more fired up I am to do more. Being fired up about something just gets me fired up about other things. Excitement breeds more excitement, and I’m still an optimistic dreamer when it comes to the potential of things to come.

With that, be safe out there (in there?) and keep on hacking y’all.

February 28, 2020 February Retrospective

Short month with a short update for y'all. This month definitely went by super quick and for lack of a better phrase, completely got away from me.

Even with some bumps in the road in terms of productivity, and still feeling like I'm coming out of the haze from the holidays, the month went pretty damn well.

Ended up getting some new features out on the site, which weren't the most substantial from either the code side of things, or in terms of marketability, but not every feature needs to be something that you feel compelled to push to Product Hunt or organize a multi-tiered marketing campaign around.

That said, those little things, the things that maybe you wouldn't have thought of at the beginning of the project, or have carved out time for, they are the ones that can make a ton of impact in the later stages of a project.

These little changes that barely warrant dropping a note to my mailing list are the polish that I'm fortunate to be able to spend my time on at this point. They are part of that grit that I talk about in terms of being somewhat boring, but also the right thing to do, especially when they are things that customers are asking for.

Revenue wise, Februrary is traditionally slower for us, just after the holidays, so it's not shocking to see a negative on the month over month charts. Sometimes we look at these things too closely and end up not being able to see the forest for the trees. The forest in this case is in terms of year over year growth, which we absolutely crushed.

Side hustle to the side hustle right now has been toying around building a new boilerplate for myself to base some new projects I have in the works on. It's definitely work that I could justify not doing, but it's been extremely cathartic to build something from the ground up again, as it's been a while since I have.

It's funny too, because this process has helped to remind me that it's extremely hard to start something new. Easy to fall into paralysis over the technical stack or even where to start. Deciding what features to include and which to push off or avoid all together factor in a ton as well.

With that, I've been taking my time with this particular one and enjoying the process a bit more, which I find to be extremely healthy, even if it doesn't directly to my day to day bottom line.

January 31, 2020 January Retrospective

January is one of those months where you are in great spirits and are ready to change the world. Resolutions and all of that, setting goals, hitting the gym, all of that. That's most folks anyway, they shine brighter than the sun, then end up fizzling before the month is over.

Nothing wrong with that, just gotta keep getting back on that horse. For me, I tried to slow my roll a bit. Last year was extremely productive, both in terms of what we accomplished with the platform, but also in terms of revenue, ending the year around ~76% over the year prior.

Money's great, but for me, the satisfaction comes from shipping a great product. Talking to users has helped me learn a ton about the space, where and how to grow, as well as what adjacent opportunities are out there.

Because I didn't want to rush into too much this year, January was spent sharpening the ax, so to speak. Tons of research and planning to help ensure that over the next 11 months, I'm spending my time correctly.

Time is always limited, so spending it building the right things is always of the utmost importance.

With that, I'm a huge fan of the book Essentialism, and tend to read it at the top of the year. This year, I opted to simply put one of the core principles to practice. Said principle is "play", the idea that you need to goof off a bit as a way to stay sane and ultimately, become more productive.

Play for me looks awfully similar to work, coding. I spent some time building a small Node.js library that I won't even mention by name because it really doesn't matter. What matters is that by taking that time to play, I freed up my mind a ton which helped aid in my planning for the year.

In addition to the background cycles doing their thing, I spent a great deal of time brain dumping / mind mapping a ton of ideas that I have been kicking around, and found some commonalities in a lot of the things I want to build.

Don't necessarily want to delve too much further than that, but do want to mention that some of things that I've been doing last year (sites I'm running, projects I'm involved with, et cetera) don't necessarily fall in line with those commonalities.

Because these things aren't necessarily "on brand" I'm starting to cut them out of my life. Some have been easier, like scaling down my freelance writing and some will be hard and may take the better part of the year until I'm there emotionally, like pulling the plug on the niche social network I've been running for the better part of a decade.

These little deaths will ultimately contribute to new life in the form of other projects as well as additional time to help me keep my shit together and not bug out over working all of the time.

From the actual business front, this month continued to see growth in MRR and some amazing new customers that are building some amazing things using our service.

What's been a pretty big milestone this month is that for the first time, a split test we were running hit complete confidence. That tells me we're either starting to define the right tests or we're finally hitting an inflection point in our traffic where tests don't take forever to finish.

More than likely it's a combination of both, which if so, is definitely a huge win.

For anybody that's followed these little retrospective posts of mine, you know that I continually apply to Y Combinator every single batch. This upcoming batch is no exception.

The big difference this go around is that the day the applications opened, I filled out the application and filmed my video. I can't wait to be known as the YC alum that was first to apply for their batch ;)

Joking aside, I'm confident and hopeful but always humble and grounded enough to know that it still may be too early.

December 31, 2019 December Retrospective + a lil' cold email advice

End of the year tends to be a slow time for most businesses. Not in the calendar / holiday data business though.

This month shaped up exceptionally and exceeded all of our expectations in terms of growth. We still experienced the usual drop off during the week of Christmas, but the first part of the month was absolute fire.

From a morale perspective, I couldn't be more excited about this year's growth but more so, next year's potential. Talking to customers has yielded a ton of new ideas, and being open about revenue and the ups and downs of how I am feeling as a founder as been great and something I want to continue into 2020.

I didn't start dropping these retrospectives until middle of the year, but for those in my accountability circle, you know that this year was the "make it or break it" year.

In 2018 I had put a different startup to rest and after a bit of soul searching for the better part of 2018, I decided that 2019 was going to be the year I actually took Holiday API seriously.

Prior to that, the project was maintained regularly and was a nice passive income stream, but was always treated as this cool little side project of mine. Into 2019 I decided to not only treat it like a business, but also made the decision that if I'm not able to move the needle in terms of growth, I should probably move it back to back burner status and work on something else.

Fortunately, a bajillion conversations and growth hacks and improvements later, the needle really started to move favorably. Granted, we always saw organic growth year over year, but things really started to move. If nothing else, the number of customer conversations I've had went from a few month to a few a day.

These customer conversations have helped ensure that I'm working on the right things. They've ensured that I've addressed the confusing parts of the service. They've ensured that messaging as improved a ton.

With such growth though, I feel like the big negative about being transparent about things, especially here on IH, is that the bulk of the feedback I tend to receive is in the form of an unsolicited email half-heartedly congratulating us, and then immediately falling into some sort of customer development or sales pitch for whatever thing the person is selling or trying to figure out.

I don't mind it, and probably not being a good community denizen here, but I do ignore most of those inquiries. With that, I wanted to take a brief moment to address something that I see with I'd guess is about 6-8 out of every 10 emails I receive that appear to be from fellow IHers:

Most of your emails are going to spam. I know this, because I check my spam bucket regularly to help ensure that I'm not missing important / mislabeled communication.

During the day, I work for a cold-email tool, so which not a complete expert in things, I do know how to troubleshoot this one.

Often times, these are missing critical headers like SPF and DMARC signing, which should be an easy thing to correct.

The content, while not always sketchy, could be improved and there are tools out there to help you grade the content to ensure you're flying below the spam trap's radar.

Other times, everything actually looks pretty solid, which I suspect means that the person on the other end is sending too many emails either without warming up their email / domain, or just sending too many of the same messages in general.

Customization of email can help a ton. Even just including the person's name or a sentence or two that's wholly related to them and not generic can help improve deliverability.

Anyway, while I may not respond to make of the cold emails I receive, mostly due to my own time constraints (if you haven't, read Boundaries), I still want to wish everybody a successful 2020, and I think by improving your email communication, a lot of y'all are going to rocket to the moon.

Happy holidays, happy new year, let's kick some ass in 2020.

p.s. Let the deluge of cold email course writers commenting on this thread begin!

November 27, 2019 November Retrospective + 6th Anniversary

After last month's little discount snafu, I started this month feeling a bit off my game.

I've been spending LESS TIME working on the weekends, which has been good, but the obvious adverse feeling is that I'm not getting enough done.

With that, I've been focusing more and more on "being the entrepreneur" instead of "being the engineer" as my buddy @collinbrewer is always reminding me.

By focusing on building the business instead of letting myself get dragged into the cycle of doing DevOps type things that aren't going to move the needle. Because of that, even though I'm spending less time on the weekends working, the time I am spending has been significantly more impactful.

Such impactfulness (spell check says that's not a word, but I don't care) has resulted in another month of stellar growth thanks to even more customer conversations and yet another round of clarifying / improving our brand message.

Clarifying the message and cutting through the noise has also helped shaped the vision of what we can accomplish with this product in both the short term (12-18 months) and long term (that 5+ year plan).

It's easy to have some pie in the sky vision when you start a project. Just throwing some random number out there that's based on obtaining some percentage of a gazillion dollar market and all of that.

Once you dig in, it's never as easy as it seems and it rarely takes as short of a time frame as you may have imagined.

This month actually marks the 6th anniversary of Holiday API, and while it's been a labor of love the entire time, this year has been the year of "taking things seriously" and it's really starting to show in terms of month over month growth.

I couldn't be more thankful this holiday season :)

I'm extremely excited to see where things go in the next 12 months with some of the changes we have planned. It's a bit too early to divulge any details, so yeah... here's to another 6 years!

October 30, 2019 October Retrospective

Wowza, feel like it was just yesterday I was putting together my task list for the first week of the month, and here we are about to close it all out.

This month has been an interesting one. New revenue has been good, churn could have been better. Churn could always be better though, right? Got hit with some downgrades as well, which I'm about to go into.

The big bork of the month was when I carelessly sent out an email to a bunch of paying customers offering them a 20% discount. I was able to salvage the snafu by further qualifying the offer as being for converting from annual to yearly and ended up converting quite a few folks.

Live and learn though, proof read the heck out of your emails. Then ask some other people to proof read them if you can. Heck, pay them to proof read, it will probably end up being cheaper.

On a positive note, we now own a trademark on Holiday API™, which I think means I probably should be starting to chase down a few people or something. Really though, I wanted to make sure I had myself protected, more so than trying to chase people down over things.

The month's been extremely productive on the development front as well, new features going out, a handful of bug fixes and we added another web server to the mix to handle the load.

On a more personal note, I've been beginning to feel more and more productive as of late and the product vision and division of labor is starting to grow more and more obvious. I'm really hoping I can capitalize on this productivity going further into the holiday season as to not lose my edge while everybody else is taking it easy.

Mentally, I've been way less cloudy and I've actually been taking more time off from working. My goal for the year was to not work on the weekends, and while only moderately successful, the last 3 weeks I have been about 99% keyboard free from Friday evening until Sunday evening, which has been a huge win.

This week's not over and I'm excited to see if I can finally roll out a bunch of account-based functionality that has been long pushed to the side.

About

We're on a mission to rid the world of databases and spreadsheets full of stale holiday data. Our algorithmic approach allows us to provide accurate, up-to-date holiday info that can be added to your app in minutes.