Jake Sulpice

jake@jakesulpice.com

Deploying a Lobsters Clone: What I Learned

Introduction

At the very end of March, I decided I’d try my hand at deploying a real website. I’ve created my fair share of static blogs before, but have never attempted a fully fledged web app with complex code and a database. This project proved to be an immense challenge and consumed an extreme amount of my time each day. In the end, those sleepless nights taught me some invaluable lessons I may have not learned otherwise. This is the gist of where it started, the direction I took with it, what happened along the way, and what the future holds.

How It All Began

When I saw that Lobste.rs allowed users to launch sister sites using the same code, I immediately decided I wanted to give it a shot. Lobsters is an elegant discussion board and link aggregator that perfectly aligns with my minimalist ideals, and I began thinking of ideas for a site of my own.

I knew next to nothing about deploying websites aside from Wordpress blogs and those made with static-site generators like the one you’re viewing now. Although the challenges it posed were not insignificant, I embraced it as an opportunity for enjoyable learning.

My initial brainstorming process for the site’s purpose led me to the idea of creating a hip-hop discussion platform with a strong emphasis on providing high-quality content and thoughtfully written pieces. Maintaining a uniform standard of quality across all content proved difficult, and achieving consistent quality in posts and comments yielded mixed results.

Now that the idea was in place, I gave it a shot. I failed and gave it another. This cycle of failing and trying again from square one continued, losing hope, but my amazing partner encouraged me time after time to take a break for the day and give it a fresh attempt tomorrow. After roughly two weeks of trial and error, it somehow worked and was accessible at the cheap .xyz domain I had registered nearly a month prior while considering website names.

I was ecstatic. I’m not sure what exactly did the trick, but it was finally up and running. My next step was to adjust the codebase to better meet my needs, which involved opening up registration, configuring the email server, and constructing an automatic dark mode for those who have enabled it on their devices.

Whenever I encountered a challenge or needed a fix, I sought help in IRC channels and on programming websites. The response was overwhelming — kind strangers generously offered support and guidance to a novice like me. I’d try the solutions suggested to me, and if they didn’t work the first time, I would head to Google, armed with a rough idea of where the problem lies, hoping to find a more precise answer. I wanted to learn how to find answers independently, instead of just getting them from a chatroom.

The successful completion of each improvement would fill me with overwhelming joy. Somewhere within the process, it clicked, and I found a new passion that I hadn’t known existed. I felt like I was doing it. I was deploying a website and creating a new community for a music genre I love. I truly thought that was the case, but while not completely wrong, I was thoroughly mistaken.

Where I Went Wrong

My enthusiasm for the site quickly turned into an unhealthy obsession. Before certain aspects of the website were even operational, my attention shifted from learning about site creation to user growth. I lost sight of what mattered.

The problem originated from the very beginning. My focus during this project was on the result, not on learning as I went. To be fair, I just wanted to create an online community for people who shared my enthusiasm for this topic. I admittedly wasn’t doing this all to become a web developer.

The fact was, I wasn’t making any genuine progress in my learning. Sure, regarding reaching out for help, I was doing a decent job; but my questions were essentially asking for others to fix my problems for me. Instead of asking why my solution was flawed, I asked for someone else to hand me a solution of their own.

I’m grateful for the fantastic help I received from many online users who addressed my coding issues. One individual, in particular, was incredibly helpful, offering a Skype screen share to guide me through a complex problem that I’m still working on.

But one developer stood out from the rest. He had helped me with issues as I initially deployed the website, but only recently did I realize his approach veered from the others. That person was Peter Bhat Harkins, or pushcx, current administrator of Lobsters.

What differed in Peter’s guidance was the fact that his suggestions were not as direct and straightforward. While asking my somewhat specific yet remarkably broad questions, he would respond with a more open-ended explanation instead of precisely outlining which lines of code I had to change and in what manner.

At first, I didn’t even recognize this difference in direction. It was only a couple of days ago that I realized what he was doing; he was guiding me toward solving the problems on my own. Rather than copying snippets of code that were given to me, he gave me a veiled hint about where the trouble was and let me figure it out myself.

He who learns but does not think is lost. He who thinks but does not learn is in great danger.

  • Confucius

In retrospect, this was extraordinary advice. Cultivating the ability in students to learn independently, no matter the subject, is a valuable skill for any teacher or mentor, and its importance transcends the specific content being learned. The only problem here was that I didn’t know anything about Ruby on Rails, so I couldn’t exactly locate the specifics of the issue.

I take full responsibility for that. As mentioned before, my focus was on reaching the finish line swiftly rather than starting from scratch and learning step by step. I skipped studying even the basics of Ruby and jumped straight into deploying my version of Lobsters. To be honest, even my Git skills were lacking, and I didn’t discover the power of grep until halfway through this entire undertaking. I dove right into production, neglecting any testing or creating test versions of the website.

Even a basic grasp of the core principles behind Lobsters would equip me with some useful knowledge about applying my own solutions. I regretfully took shortcuts, which wasn’t the wisest idea.

Peter recognized this from the start. While asking one of my unclear questions, he directed me towards two excellent resources for getting into real web development; Roadmaps.sh and Learn Enough.

He also gave me some of the best encouragement I’ve ever received when I’d repeatedly express my gratitude and acknowledge my lack of programming expertise, saying things like, “I’m not exactly that knowledgeable about programming.”

pushcx: You’ve done better than some programmers who’ve picked it up. Great persistence and curiosity. Consider a career.

jslp: That’s means so much to hear, thank you! I actually began as a CS major years ago but fell off the path and hopped around majors, but after this I genuinely think I’m going to give it another go!

pushcx: I mean… you’re doing it. Whether or not somebody gave you a piece of paper, you obviously can do some. At this point it’s just figuring out what you want to learn about and digging in. Finishing railstutorial.org would probably be good, help you learn to maintain [redacted site name]. https://roadmap.sh/ has some good pointers for what to learn next - before you get intimidated, remember you don’t have to learn everything to accomplish stuff.

pushcx: and if you want to talk to some programmers, I sent you a lobsters invite :)

jslp: I’ll definitely check those both out, thank you for the suggestions! I’m hoping to keep this sister-site maintained for as long as I can so I better start at least learning some basics.

Now What?

That brings me to the point I’m at now. I initially wanted to make a special place for sharing music and harboring discussion related to hip-hop, but at some point, I realized I genuinely loved making it all work.

Thanks to Peter’s suggestion, I purchased the complete Learn Enough subscription bundle covering everything from the very start. I know enough about text editors and the command line (apparently besides using grep), but I’m starting at the top to ensure I miss nothing I don’t know.

Last night before heading to sleep, I began chapter one of the command line tutorial and already appreciate its teaching methods. If I’m stuck during the Learn Enough tutorial, I can also turn to the private Slack server where subscribers can ask questions and get advice from other learners and instructors.

As for the website, I’m not sure what I’ll end up doing with it in the foreseeable future. Seeing as there’s only a handful of users that are active, some of which only visit every few days, I may decide to shut it down in a few weeks unless it sees some more growth somehow. I don’t want to take it down after investing so much time into it for the past month, but eliminating the costs associated with server hosting, domain renewal, and site backups will offset this Learn Enough subscription.

That being said, figuring that out isn’t too high on my list of priorities right now. If hip-hop listeners find use from the website and actively contribute enough to make discussion worthwhile, I’ll happily continue paying for it while implementing what I learn on the site as I progress in the course. Otherwise, I may keep it up anyway as a practice environment, move to cheaper hosting, or delete it entirely; again, I haven’t totally decided on this and am not in a rush to do so.


Conclusion

It’s been incredibly fun to maintain my website over the past few weeks, and this project has been an invaluable learning experience, helping me understand my career path and how to tackle any problems I encounter.

One short month ago, I knew absolutely nothing about…

  • Web apps and their creation

  • The components required for production deployment

  • Web frameworks like Rails or Django

  • SQL databases

  • Basically, the entirety of launching the website

Today I can safely say I know the basics about…

  • What web applications are and what they do

  • HTTP servers (Nginx)

  • Application servers (Passenger)

  • The purpose of web frameworks

  • Basic Ruby on Rails

  • Some key aspects of MySQL configuration

  • The importance of a local development environment

  • Editing CSS style sheets using variables

  • SSL/TSL certificates

  • Setting up a remote mail server — and preventing emails from directly going to spam

  • Backing up websites and databases

  • Grep

From a broader perspective, I also gained knowledge about…

  • Which career path I’m passionate about

  • How to seek help with programming-related errors

  • Where to find resources to help achieve my goals

  • How tremendously gracious the developer community is at helping a struggling new guy

  • That learning is a constant process that lasts a lifetime


Special Thanks

If you made it this far, thanks for reading. I wasn’t sure how much I was going to write about this, but this was a really important project of mine that consumed around 12 hours every day for a month and taught me some amazing lessons that will stay with me for my whole life.

Most importantly, thank you to my wonderful girlfriend, Selene, who supported me day in and day out every step of the way. You encouraged me beyond words and helped me believe in myself when I doubted if I could get the site working to begin with. You listened to me talk about it every single day nonstop, and I know that must have been annoying after the third day, if that. If you weren’t by my side to listen to me vent that night about whether this was worth anything, I wouldn’t have come to these positive conclusions at all and would have seen this whole thing as a complete failure on my part. I love you so much.

Huge thanks to my family for seeing how much this meant to me and encouraging me throughout. I know I’ve been spending a lot of time working on this for a while now, but you and I both recognize it’s rare of me to focus on something with this intensity for longer than a week or two.

I’d like to give a big shout-out to Peter (pushcx) for the constructive guidance and incredible encouragement throughout this entire endeavor. Your help was crucial, as it allowed me to learn essential lessons I might have otherwise missed, potentially continuing the careless expansion of my poorly managed sister-site without ever gaining that knowledge (or perhaps learning it independently much later).

I also want to extend my thanks to creature on the Freenode IRC server for offering to take time out of his schedule to teach me via Skype about how to solve a specific problem I was running into. For multiple days in a row, you offered suggestions and advice to me in the Rails channel during your busy workday, and I appreciate everything you’ve assisted me with.

Even though you all probably aren’t reading this, big thank you to everyone who visited the website and gave encouragement and feedback. I wouldn’t have continued with the project if the response wasn’t overwhelmingly positive from those who gave comment, and wouldn’t know what I know now. The same goes for the handful of Rails developers who searched the site for bugs and errors I might have missed. I appreciate you all more than I can express in writing.

May 9, 2020  Jake Sulpice