How to know what I should build for a side project

https://i.pinimg.com/originals/f0/9a/97/f09a974231d5092d588c5c354ce39a57.jpg

Project ADD

If you’re like me, every time you end up with some free time, you start thinking of all the different projects you want to work on as a software engineer. The skills you develop in software engineering leave you feeling like you have all kinds of possibilities, and this is very true. I often start thinking about what I can automate. What kind of bot can I build to make passive income online? Can I build an AI digital assistant to take care of tasks I hate doing? Maybe I build a new web app/phone app/software tool to sell on the market. What about quantum computing? Should I learn how to build programs that run on this cutting-edge technology?

These are all the ideas that start flowing through my head when I have free time to myself. I often find it really fun to think about the possibilities, but I also get project anxiety or project ADD trying to think about what I should start and if what I’m doing makes sense to do. I end up experiencing analysis paralysis or just working on several different things without ever making any real progress on any one thing and end up left with tons of unfinished projects (most of which really are just some lines of code that do some really basic things) since I end up jumping onto a different thing next time I have free time.

How do I explore new software development ideas?

One of the things that I’ve noticed the most is that I really need to narrow down onto a single purpose to focus on and follow that purpose until I have either accomplished it or until I have determined that it no longer makes sense to follow.

What is the motivation for my new project?

This is the first question I like to ask. Or in other words: How will this benefit me? Oftentimes, money is a strong motivator. But it’s not necessarily the only motivator (or the direct motivator). Sometimes it’s the desire to learn more. Other times it’s the desire to have a creative outlet. Sometimes it’s just to see what is possible. I have found three main types of motivations from people I’ve talked to (and in my own life), and there may be other ways to categorize, but this is what I’ve seen most.

The Entrepeneur/Investor

Mark Zuckerberg, chief executive officer and founder of Facebook Inc., speaks during the F8 Developers Conference in San Jose, California, U.S., on Tuesday, April 18, 2017. Photographer: David Paul Morris/Bloomberg via Getty Images

A lot of my colleagues and friends in software engineering all love the idea of building something they can sell later. There’s always talk about such and such software system was sold to x company for y million dollars, and it’s almost always some piece of software that doesn’t sound very difficult to build. These in general are the people that are ultimately looking to have complete ownership of something they create and be able to put it on the market and to build a company out of it.

The Learner

https://www.saintleo.edu/hubfs/SOFTWARE_ENGINEERING_shutterstock_669226204.jpg#keepProtocol

Many others really just love exploring new things. These are friends and colleagues who are always reading about the latest and greatest trends and are eager to build something using that new technology so they can learn it. These are people who often build simple toy projects to demonstrate a certain capability or usage of a certain technique, library, or platform. Many of these will have a posts on github for each of these examples so that others can learn from them.

The Hacker

https://i2.wp.com/www.outromundo.net/wp-content/uploads/2018/08/curso-fundamental-hacking-hacker-security.png?fit=1920%2C1080&ssl=1

There are still others who like the idea of being able to write code that they can use in their daily lives. These range from those looking to get around red tape or annoyances in the tech they use to building entire systems for their own use (or even just to see if they can do it). These are the people that will install an open-source phone app to get around watching YouTube ads, build a Plex server at home, build build home automation around the smart devices on the market, etc. The main thing about this group is that they like to apply and strengthen their skills by building and enhancing systems for their own personal use.

While these categories are loosely defined, the purpose here is to find out what motivates you to do a project (and really — the most important thing) stick with it until you have accomplished your goal.

How do I determine the benefit of my project?

https://pestleanalysis.com/wp-content/uploads/2020/09/Cost-Benefit-Analysis-example-1024×682.jpg

This is really going to be a different answer based on your motivation. Regardless, there is always going to need to be some kind of benefit for you to choose the project and stick with it until it’s conclusion. Without this, it’s easy (at least for me) to fall back into project ADD and end up with a ton of projects that don’t get very far past “Hello World.”

The Entrepeneur/Investor

For this type, the reality is that you’re looking at starting a business.(See my earlier article Should a software engineer start a tech business?). Ultimately you need to determine if the market will justify the cost you’re putting into building your new software. Before even touching any line of code, a well-defined business plan should be written up that includes thorough market research and the preparation to get all the resources needed to run and maintain such a business. Remember that when selling a software business (or maintaining a software business), it’s a business running on software. And in reality, a business is an entity that takes inputs and produces a greater output (profits). Just because it’s based on software doesn’t mean that business skill no longer applies.

On the other hand, it is possible to create something small and possibly make money off of it (for example a simple web app like a mortgage calculator or compound interest calculator). Though building something like that can likely be done and hosted over a weekend, it still is a business that requires monetization and bringing people to your web app.

The point here is not to say that a new web app or some other kind of software business should not be done, it’s just a reiteration of the fact that it is a business and/or an investment, and it should be treated as such (which typically means a lot of work and research long before writing a single line of code).

The Learner

https://s3-eu-west-1.amazonaws.com/emap-nibiru-prod/wp-content/uploads/sites/4/2020/09/24080014/shutterstock_quantum-computing-computer-microchip.jpg

Learning a new thing is an easy way to define the project you’re doing — demonstrate the new concept you’re interested in learning. In this case, I would strive to be as specific as possible. There’s nothing worse (at least in my opinion) than starting a project based on a concept you’re wanting to learn, then to fall into the trap of adding more things that you want to learn to the project resulting in never-ending scope creep.

While people in this mode may not be having visions of creating the next Facebook like maybe the entrepreneurs/investors may have, there are plenty of opportunities to monetize your learning. Some ideas that come to mind is creating a blog or website to share this knowledge, creating online courses, or doing a YouTube (or Rumble, Odyssey, BitChute, etc) channel. Not only that, but if you create a website demonstrating these concepts, it will likely result in more and higher-paid job opportunities. Furthermore, in my opinion, as a software engineer, we should always be learning.

The Hacker

https://www.techworm.net/wp-content/uploads/2016/01/hack-like-pro-conduct-active-reconnaissance-and-dos-attacks-with-nmap.1280×600-e1453127714710.jpg

Oftentimes, one of the biggest benefits to the hacker is convenience and bragging rights (even if the bragging rights really just amounts to feeling cool because you can get around systems in place that are inconvenient or built something cool for yourself). The benefit here is hard to quantify because it’s often like just building a new toy.

Take Plex for instance. There are all kinds of automations and things you can do to build around the Plex server to make it more convenient to use, but ultimately, it’s about having a convenient way to have all of your movies organized and viewable by your friends and family. The main benefit around this is entertainment and fun, and while it’s not necessarily less than other motivators, it is hard to quantify since the entertainment factor is often pretty hard to specifically define.

While monetization may not be the main motivator for the Hacker, these efforts can still be monetized the same as the Learner — create an online course, website, or channel to share your knowledge. Also like the learner, this motivation is probably going to be largely secondary to the fun of building new things.

How do I determine the cost of my project?

Regardless of your motivations, your project needs to be fully understood so that the effort to put into the project can truly be considered. It’s great to have the motivation and idea in place, but this needs to be counter-balanced by understanding what exactly the project entails.

How do I clearly define my project?

https://assets.entrepreneur.com/content/3×2/2000/20150512050128-shutterstock-124904123.jpeg

When considering your project, think about how it will be used. Come up with all the ideas on what it should do. Take the time to really design it. This step is obviously going to be much more involved for a larger project than for a smaller project. Determine how to break down your project into smaller pieces and determine what you need at a minimum for your project.

I like to use a Trello board to define my projects. I’ll come up with an idea, and define it in general in a card on my Trello board. Then as I drill down into more details, I like to look at individual pieces and break those down into cards. I keep up this process of breaking up cards into smaller items until I have a set of several cards (or tickets or stories or whatever else you want to call them) that can be worked on in sizeable chunks (just like you’d break down stories in scrum).

For each item you look into breaking down, take the time to determine if there is something you can build on (existing frameworks and technologies, open APIs, software and services that can be purchased, open-source software, etc). Take the time to determine what items can be dropped or worked on later (what would an MVP look like?). This will ensure you have the most important items slated to be worked on first and that they’re all in sizeable chunks that can be completed in a reasonable amount of time.

How do I determine the cost of my project?

https://www.thebalance.com/thmb/uOKFvI7tCbxCUcc_71_Tu0MHKeI=/4256×2832/filters:fill(auto,1)/budget-56a31ba83df78cf7727bcff3.jpg

Most of the work done to determine the cost is in the previous section — breaking up the project into workable items. However, before breaking everything down completely, it’s still possible to estimate the cost of a project without completely breaking it down (though it does require taking the time to consider all the pieces involved in building the project).

Typically the currency of any project you undertake is time. However, depending on your goals, it will also likely include the financial cost for equipment, hosting, and any other services or software you buy to build your project.

While evaluating the cost of all the items that you need to explicitly pay for on your project, the bigger mystery is determining how much your time costs. I wouldn’t say that it’s hard to come up with some kind of calculation, but it takes some thought to come up with an effective calculation (and for me, I base it largely on how much money I make in my career) but also the idea of how much your free time is valued to you outside of your regular working hours. Assigning a dollar value to your hours is not as important when you’re the Learner or the Hacker, but it is critical if you’re the Entrepreneur.

Regardless of any dollar value applied to your time, it’s still important to identify the time commitment needed to bring your project to completion. This is often something that can be used to determine whether you will go forward with the project (or whether you decide to break that project down into something more simple). The general idea is that you want to be able to clearly define what amount of time you’re willing to put into a project to realistically get it done.

Final Thoughts

I love being a software engineer and having the ability to build all kinds of new things. But I know for myself (and for many others I’ve talked to), project ADD is a real issue. The people that get things built are those that identify the benefit to them (it’s not always money, but that can be a strong motivator), and stick with it for a reasonable amount of time. For example, I would daresay that for most of us, a project that requires 40 hours a week in addition to regular working hours for a year would not be something anyone would want to commit to getting done (sure there are some outliers that may make some people go with that kind of commitment, but I’m very sure it’s not the norm — at least not in the circles of people I spend time with).

At the end of the day, we all want to be able to have cool things to show for our work. If you’re anything like me, it’s hard to be stuck trying to figure out the next project or the next item to work on or to have several unfinished projects that don’t do much of anything. Hopefully this helps you guys as it has helped me to get more focused.

Leave a Reply

Your email address will not be published. Required fields are marked *