In love, war, and open-source—never give up

Hey Reader,

I’ll never forget launching my first open-source project and sharing it on Reddit…

I had spent a couple of days at my parents’ place over Christmas that year and decided to use some of my spare time to work on a Python library I christened Schedule.

The idea behind Schedule was very simple and had a narrow focus (I find that that that’s always a good idea for libraries by the way):

Developers would use it like a timer to periodically call a function inside their Python programs.

The kicker was that Schedule used a funky “natural sounding” syntax to specify the timer interval. For example, if you wanted to run a function every 10 minutes you’d do this:

schedule.every(10).minutes.do(myfunc)

Or, if you wanted to run a particular task every day at 10:30 in the morning, you’d do this:

schedule.every().day.at('10:30').do(mytask)

Because I was so frustrated with Cron’s syntax I thought this approach was really cool. And so I decided this would be the first Python module I’d release as open-source.

I cleaned up the code and spent some time coming up with a nice README file—because that’s really the first thing that your potential users will see when they check out your library.

Once I had my module available on PyPI and the source code on GitHub I decided to call some attention to the project. The same night I posted a link to the repository to Reddit and a couple of other sites.

I still remember that I had shaky hands when I clicked the “submit” button…

It’s scary to put your work out there for the whole world to judge! Also, I didn’t know what to expect.

Would people call me stupid for writing a "simple" library like that?

Would they think my code wasn’t good enough?

Would they find all kinds of bugs and publicly shame me for them? I felt almost a physical sense of dread about pushing the “submit” button on Reddit that night!

The next morning I woke up and immediately checked my email. Were there any comments? Yes, about twenty or so!

I started reading through all of them, faster and faster—

And of course my still frightful mind immediately zoomed in on the negative ones, like

“Cool idea, but not particularly useful”,

and

“The documentation is not enough”,

and

“Not a big fan of the pseudo-english syntax. Way too clever and gimmicky.”

At this point I was starting to feel a *little* discouraged… This was just something I wrote in a couple of hours and gave away for free!

The comment that really made my stomach churn was one from a particularly well known member of the Python community:

“And another library with global state :-( … Such an API should not even exist. It sets a bad example.”

Ouch, that hurt. I really looked up to that person and had used some of their libraries in other projects…

It was almost like my worst fears were now playing out in front of me!

I’d never be able to get another job as a Python developer after this…

At the time I didn’t see the positive and supportive comments in that discussion thread. I didn’t see the almost 70 upvotes. I didn’t see the valuable lessons hidden in the seemingly rude comments. I dwelled on the negative and felt terrible and depressed that whole day.

So how do you think this story ends?

Did I delete the Schedule repo, switched careers and never looked at Reddit again?

Wrong!

Schedule now has almost 3,000 stars on GitHub and is among the top 70 Python repositories (out of more than 215,000). When PyPI’s download statistics were still working I saw that it got several thousand downloads per month. I get emails every week from people asking questions about it or thanking me for writing it…

Isn’t that crazy!? How’s that possible after all of these disheartening comments?

My answer is “I don’t know”—and I also don’t think that Schedule is a particularly great library that deserves all this attention, by the way.

But, it seems to solve a problem for some people. It also seems to have a polarizing effect on developers who see it—some love it, some hate it.

Today I’m glad I shipped Schedule that night.

Glad because it was helpful to so many people over the years and glad because it helped me develop a thicker skin when it comes to sharing and launching things publicly.

I’m writing you this meandering email because not very long ago I found this comment buried in my Reddit message history:

~~~

As someone who has posted a number of projects and blog posts in r/Python, just wanted to drop you a line and encourage that you don't let the comments in your thread get you down. You see all those upvotes? Those are people that like your library, but don't really have a comment to make in the thread proper. My biggest issue with /r/Python is that it tends towards cynicism and sometimes cruelty rather than encouragement and constructive criticism.

Keep up the great work,
Rob

~~~

Wow! What a positive and encouraging comment!

Back when I felt discouraged by all of these negative comments I must’ve missed it. But reading it a few years later made me re-live that whole situation and it showed me how much I’d grown as a developer and as a person in the meantime.

If you find yourself in a similar situation, maybe feeling bogged down by the developer community who can be unfiltered and pretty rude sometimes, don’t get discouraged.

Even if some people don’t like what you did there can be thousands who love your work.

It’s a big pond, and sometimes the best ideas are polarizing.

The only way to find out is to ship, ship, ship.

Happy Pythoning!

— Dan Bader

Older messages

how can I help you grow your Python skills and career even more?

Monday, April 13, 2020

Hey Reader, I hope you've been enjoying a beautiful weekend! Over the last few days I started thinking about ways to improve the Python tutorials, the newsletter, and the YouTube channel at dbader.

[🐍PyTricks]: Python's namedtuples can be a great alternative to defining a class manually

Monday, April 13, 2020

# Why Python is Great: Namedtuples # Using namedtuple is way shorter than # defining a class manually: >>> from collections import namedtuple >>> Car = namedtuple('Car', '

is this The True Power Of Python?

Saturday, April 11, 2020

Hey Reader, Recently a newsletter member emailed me and said something that really resonated: ~~~ I want to learn how can I use the true power of Python, not just copy logic I already acquired from

[🐍PyTricks]: The get() method on Python dicts and its "default" arg

Saturday, April 11, 2020

# The get() method on dicts # and its "default" argument name_for_userid = { 382: "Alice", 590: "Bob", 951: "Dilbert", } def greeting(userid): return "Hi %s

[🐍PyTricks]: picking up the basics of Python was the easy part?

Friday, April 10, 2020

Hey Reader, Ever caught yourself thinking "I don't even feel like I've scratched the surface of what I can do with Python?" I know I have. It didn't look like it in the beginning,

You Might Also Like

Reach More Readers, newsletterest1 – BOOST Your Story on HackerNoon🔥

Wednesday, December 11, 2024

Get Your Story Featured on the Homepage and in The HackerNoon Newsletter ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌ ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌ ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌

Top Tech Deals 👀 $109 Robot Vacuum, Google Pixel Sale, Anker Power Bank, and More

Wednesday, December 11, 2024

Grab a new Pixel phone or tablet, stocking stuffers, and other goodies. How-To Geek Logo December 11, 2024 Top Tech Deals: $109 Robot Vacuum, Google Pixel Sale, Anker Power Bank, and More Grab a new

Hurry, newsletterest1! Less Than a Week Left to Compete for $2,500 in the AI Writing Contest 🏃

Wednesday, December 11, 2024

Start drafting your entry today! ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌ ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌ ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌ ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌  ͏ ‌

DePIN On Ethereum: Redefining Coordination Systems

Wednesday, December 11, 2024

Top Tech Content sent at Noon! Boost Your Article on HackerNoon for $159.99! Read this email in your browser How are you, @newsletterest1? 🪐 What's happening in tech today, December 11, 2024? The

Post from Syncfusion Blogs on 12/11/2024

Wednesday, December 11, 2024

New blogs from Syncfusion Building a Neumorphic UI with .NET MAUI Column Chart to Showcase Gen Z's Favourite Social Media Platforms By Dhanaraj Rajendran Learn to create a Neumorphic UI with

24 Hours Until Our 2025 Outlook Webinar – Register Now ⏰

Wednesday, December 11, 2024

Don't miss the key trends shaping 2025 with our free webinar on December 12th. View Online | Subscribe | Download Our App FREE WEBINAR - Tomorrow at 11am PST 2025 Outlook: Key Trends on Our Radar

⚙️ Another AI lawsuit

Wednesday, December 11, 2024

Plus: Tesla sued ... again ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌ ‌

The most Windows-like Linux distro

Wednesday, December 11, 2024

iOS 18.2 arrives; AI moves undercover; Natural Cycles dupe -- ZDNET ZDNET Tech Today - US December 11, 2024 The default Wubuntu desktop. This Linux distro is so Windows-like, it even comes with

Your InfoSec Survival Guide

Wednesday, December 11, 2024

How to optimize your compliance practices through a continuous monitoring approach The Hacker News The InfoSec Survival Guide Today, security and compliance leaders are struggling under the pressure of

The Sequence Chat: The One Area in Which China can Dominate the US in the AI Race

Wednesday, December 11, 2024

Might come as a surprise. ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏ ͏