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 a huge challenge for me and consumed an extreme amount of my time each day, and in the end, 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 learned 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 a beautiful discussion board and link aggregator that perfectly aligns with my minimalist ideals, and I began thinking of possible ideas for a sister site of my own.

I knew next to nothing about deploying websites aside from those made with static-site generators like the one you’re viewing now, but I saw it as a fun challenge and a learning experience.

I began brainstorming ideas for what the site would be used for and landed on hiphop discussion with a focus on higher quality content and write-ups. This focus was ultimately met halfway, as it proved difficult to ensure consistent quality among posts and comments over time.

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 and I started to lose hope in myself, but my wonderful girlfriend encouraged me time after time to take a break for the day and give it another attempt tomorrow. After roughly two weeks of trial and error, it somehow worked and was accessible at the cheap domain I had registered weeks prior while brainstorming website names.

I was ecstatic. I don’t exactly recall what I did that made it finally work properly, but it was live. From there I started modifying the code to better suit my needs, such as setting registration to open signups, configuring the email server, and even adding an automatic dark mode for those who have their devices set accordingly.

When I ran into something I needed to adjust or fix, I asked questions in IRC channels and on various programming websites and was met with tremendous help from several kind strangers offering support to a newbie like myself. I’d try the solutions suggested to me, and if they didn’t work the first time I would then head to Google with a rough idea of where the problem lies.

Once each adjustment worked properly, a rush of euphoria would overcome my body. 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. That was what I genuinely believed, and though I wasn’t too far off, I was gravely mistaken.

Where I Went Wrong

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

The root of the problem was set from the very beginning. While undertaking this project, my attention was fixated on the end result rather than learning along the way. In my defense, in the early stages, I only wanted to create a new online community based on a topic I enjoyed; I wasn’t doing all of this to become a web developer.

The reality of the situation was that I wasn’t actually learning anything. Sure, in regards to reaching out for help I was doing a good job; but my questions were essentially asking for others to fix my problems for me. Instead of asking why my solution was wrong, I asked for others to hand me a solution of their own.

Quite a few individuals online gave me fantastic answers to my coding issues, and one in particular even offered to screen-share over Skype so he could guide me through one of the more complex problems I had that remains unfixed at the time of writing this.

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 that his suggestions were different than 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 quite as direct and straightforward as those presented by others. While asking my somewhat specific but incredibly broad questions, he would respond with a more open-ended explanation instead of clearly outlining which lines I had to change and in what way.

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 in a way that would get me to solve the problem on my own. Rather than copying snippets of code that were given to me as a solution, he gave me a veiled hint as to where the problem was and let me figure it out myself.

Give a man a fish and you feed him for a day; teach a man to fish and you feed him for a lifetime.

In retrospect, this was incredible advice. Regardless of the subject in question, allowing the student to learn on their own is a valuable skill any teacher or mentor can have and is much more important in the grand scheme of things. 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.

That’s the fault of my own. As previously mentioned, I wanted to reach the finish line as quickly as possible instead of learning from the ground up. I skipped learning even the basics of Ruby and jumped straight into deploying my own version of Lobsters. Hell, I don’t even really know how to use Git and discovered grep halfway through this entire process. I didn’t even build test or development builds for the website and skipped straight into production; a hugely detrimental flaw on my part.

If I had taken the time to learn the basics of the Lobsters building blocks, I would at least have some knowledge that I’d be able to utilize while figuring out my own solutions.

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

He also gave me some of the best encouragement I have ever received when I’d constantly thank him and state that I’m not exactly that knowledgable 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 of the basics

jslp: Oh wow thank you! I wasn’t going to ask because I don’t have a whole lot to contribute yet, but I lurk a bit and being able to vote and ask questions in relevant threads would be amazing!

Now What?

That brings me to the point I’m at now. I initially wanted to make a new community for sharing music and harboring discussion related to hiphop, but at some point, I realized I legitimately loved making it all work.

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

Last night before bed I began chapter one of the command line tutorial and already love the way it’s taught. Learn Enough also provides a private Slack server to subscribers for asking questions and getting advice when running into problems throughout the tutorial, which will come in handy if and when I ultimately get confused while learning.

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

That being said, figuring that out isn’t too high on my list of priorities right now. If hiphop listeners find use from the site and actively contribute enough to make discussion worthwhile, I’ll happily keep paying for it while implementing what I learn into the site as I progress in the course. Otherwise, I may keep it up anyways as an environment to practice and debug production code in, or delete it entirely; again, I haven’t totally made up my mind on this and am not in a rush to do so.


Conclusion

Maintaining my website was extremely fun for the few weeks it has been up, and taking on this project has taught me invaluable lessons in regards to my career path and how to properly approach any problems I run into when they pop up.

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 what I did to launch my 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 commands
  • Some basic aspects of MySQL configuration
  • The importance of a Rails development environment
  • Simple editing of CSS stylesheets using variables
  • SSL/TSL certificates
  • Setting up a remote mail server - and prevent emails from going to spam
  • Backing up websites and databases locally
  • Grep

In the general scheme of things, I also learned the following:

  • Which career path I’m passionate about following
  • How to seek help with programming-related errors
  • Which resources to follow to achieve my goals
  • How tremendously gracious the dev community is with helping struggling newbies
  • Never stop learning

Special Thanks

If you made it this far, thanks for reading. I didn’t know how much I was going to write with 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 amazing 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 even 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 first week, if that. If you weren’t by my side to listen to me vent that night about if this is even 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 thank you to my family for seeing how much this meant to me and encouraging me to reach my goals. I know I’ve been spending a whole lot of time in my room working on this for a while now, but you and I both know it’s rare of me to be able to focus on something with this intensity for longer than like a day or two. Mom, dad, and Camille, I love you all.

I’d like to give a big shoutout to Peter (pushcx) for the constructive guidance and incredible encouragement throughout this entire project of mine. Without your help, I wouldn’t have learned the truly important lessons I needed to and instead might have just continued crudely adding to my poorly maintained sister-site without ever learning those lessons (or eventually learned these things on my own in the distant future.)

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 gave suggestions and advice to me in the Rails channel during your busy work schedule, and I greatly appreciate everything you’ve assisted me with.

Even though you all probably aren’t reading this, shoutout to the people on Reddit who visited the website and gave encouragement and feedback. I probably wouldn’t have continued with the project if the response on the hiphop subreddit wasn’t overwhelmingly positive from those who commented on it, and in turn, wouldn’t have found out what I know now. The same goes for the handful of devs on the Rails subreddit who searched the site for bugs and errors I may have missed.

May 9, 2020