1117 words
~6min read

Starting is the Hardest Part

December 5th 2024

As I talked about in the last post, Starting Something New I’ve embarked on a quest to make web search a little bit better, if only for myself at first, but hopefully something you can benefit from too.

Starting a new project is one of the hardest parts of the whole process, at least for me. It feels like getting dropped off in the jungle with a crate full of tools after being used to first world living conditions in a house walking distance from a grocery store.

https://www.youtube.com/watch?v=3mfuTnB8Ch8

Image Credit: Primitive Skills

Choose Wisely#

All the amenities, infrastructure and workflows you might be used to at your full time job either don’t apply or don’t exist yet. It’s an open ended problem to prioritize the very limited time (in my case with a full time job, baby, and dog to take care of) you have to work on the project. The metaphorical question “do I start setting up shelter or look for food first?” equates to:

  • What languages and frameworks do I use?
  • What’s the backend look like?
  • What’s the DB schema and data access model?
  • How’s auth going to work?
  • How do browser extensions work and what can they do?
  • How can I interact with the search engines? (You’re not allowed to fetch them from a custom new browser tab since CORS blocks it)

None of the first four have concrete answers and your answers to them will vary wildly based on your experience and your product priorities. These are hard decisions because you have to make them with the least info you have about what the project will become as it morphs over time, yet the impact of the decisions is massive in the future cost it will take to change any of them since Change at the Highest Level Is Impossible.

Keeping Momentum#

The next hardest part about starting is continuing. In the beginning you have no momentum. No visibility. No customers to support. No emotional investment. No sunk cost fallacy propelling you along. The first couple days and weeks are the easiest time to just give up. Who cares about this anyways, let’s move on.

The biggest thing I learned from my self imposed goal to make a commit every day for a year back in 2015-2016 was not that it needed to be every day, just that constant pressure on a goal moves the needle. Getting over the hump of finding the time to sit down and start working is 3/4ths of the battle at least. If you promise yourself to work 15 minutes you’ll find yourself doing more almost every time.

Github contributions 2015-2016

This time of year is especially challenging to keep a routine with all the holidays and schedule disruptions. If you miss a week (or two) since you were off visiting friends and family like I was don’t beat yourself up, and more importantly don’t give up. Just pick up where you left off and get back at it.

Once you get a month or so in and have something to show for your effort it does get easier to keep the habit up of pushing the project forward bit by bit.

My Actual Progress#

As for my actual progress on the project I like to start with the approach of roughing out the whole structure of the project then refining like what I did when I built the game Macrocosm.

For this project that meant first getting a browser extension project set up and working, then experimenting with what I could do to interact with search engines. I quickly discovered you’re not able to fetch the search engine pages from a custom new tab extension script since CORS blocks it. I was originally planning on being able to search multiple search engines at once and ranking across them but I won’t be doing that now. I think you could do that in the backend but I didn’t want to start with that design and have it be super easy for the search engines to block my server.

Once I got the basic extensions scripts working I started on some rudimentary Google result page parsing but quickly realized their result pages are quite varied in layout on top of having obfuscated css classes. So it will definitely take some dedicated effort to handle their pages. To get something going quickly I switched DuckDuckGo results which are much more straightforward. After the basic result parsing I got very rudimentary voting and categorization working just on the frontend up until the point where it made sense to start on a backend to categorize sites and store the user votes.

Progress

I set up the backend using ASP.NET (9.0 just came out so I’m giving that a shot) with Postgres. It’s been a little while since I’ve worked on a C# API so I’m having to relearn the new ways of doing things. It also took some time to get Entity Framework and Dapper set up so I can have the ease of working with an ORM for all the simple stuff while also having the power to write raw SQl when I need a more complex query.

On the frontend I’m choosing Svelte with Tailwind CSS (and excited to try out the new beta) using the Extension.js framework. I chose the combo of Svelte and ASP.NET both for how productive I know I can be with each of them once the groundwork is laid as well as their performance.

Since the extension is working on search results pages where users expect quick results the latency at every step will be critical for a good experience. ASP.NET has been doing pretty well on the TechEmpower Benchmarks for being a high level framework with good developer ergonomics like automatic marshalling for requests and responses. It also just got another boost with the optimizations in 9.0 so I’m confident I’ll be able to serve API responses super quickly from it.

Svelte 5.0 is crushing the competition across the board in execution performance, memory, and transferred size while also giving you a great developer experience and lots of power out of the box. At this point I don’t imagine the frontend needing to be too complex but I want to have a solid place to start from that’s fun to build in if I’m wrong on that.

Goals#

My goal for the next update is to get the frontend interacting with the backend to read and set both site votes and categories. Should be easy enough but there’s a lot of stuff I glossed over on both the frontend and backend that I’m sure I’ll be refining as I go.

In the meantime, let me know in the comments how you’ve gotten over the hump for starting a project!

Want the inside scoop?

Sign up and be the first to see new posts

No spam, just the inside scoop and $10 off any photo print!