How to build your Software Startup Product

custom software software development

So you’ve decided to start a company

Alright. So you’re toying around with the idea of starting a company - specifically a software company. Perhaps you’re looking for a change in your career. Maybe you recently came across a problem that you have a great solution for. Or maybe you’ve had a ton of ideas in your head for years and now is the time to act.

Whatever the reason may be, starting a software company can be an amazing journey. You could end up building something that really changes the world.

But even though you have a great idea, you might be stuck as to how you actually get started. How do you start putting together a team? How do you build your product? How do you sell and market it? There are so many questions you have to deal with when starting a company.

While there is a lot that can be said, in this article, I hope to answer “How do you build your product?” and give your idea some legs.

Build it and they will come? Nope.

Before we get started though - I want to be very clear. Building the product is by no means the most important nor the first step you should necessarily take. It really depends on a lot of factors and each case is different. In some situations, doing market validation and research is more important first. In some cases, putting together your staff is more important.

This article is not saying you should build your product first, but rather, when you decide to proceed with that step, here are some ideas.

Developing Software

If you’re reading this article, you’ve probably got a great idea that software seems suitable for, but you might be completely lost when it comes to actually creating, building, or developing the software. However, if you’re in that state, the term “building software” itself might be confusing. What does building software actually entail? What should you understand about it? Regardless of whether you build it yourself or hire someone to build it, it’s good to understand some high level concepts that go into building software.

Product Management

When you build software, one of the most important aspects is deciding what features your product will have, the details of how they will work, and when they will be developed. This practice is known as Product Management.


After you’ve decided on what features you want in your product, you might have to design your product. This can involve UI and UX design where you’re figuring out what the screens or pages will look like and how they will behave when a user uses them.

Development, Coding, Implementation

Next, you have development or coding. This is where developer (or computer scientist, or software engineer, or coder) will write code (or source code) to execute your vision.


Deployment is the act of getting your software into the hands of your users. So for a website, it’s putting code on a server out in the internet for people to access (hosting). For an app, it’s submitting your code to the Apple App Store or Google Play.

Source Control

Source Control is using a system to literally control your source code. When you start to build software, you may have multiple people working on the code together. You’ll want good source control to track all changes, allow for parallel work and collaboration, and revert things in case something goes wrong. Having a good source control system in place will spell out success as your startup grows.


Lastly, you’ll want a process to manage all these aspects of software development.

Now, it’s important to note that not ALL these aspects are necessary to start developing your product, but as you grow, you should be aware of these and more.

What are your options?

So now that you have a general idea of what developing software looks like, how do I actually go about doing it? Well, there are a couple of options.

  • Build it yourself
  • Partner with a developer
  • Hire a software developer
  • Hire a software development firm

Build it yourself

Probably the cheapest and lowest overhead way to build software for your startup is to build it yourself. If this is your startup, you could act as a product manager, designer, developer, all in one. If you happen to have a background in software development, then you’re set. Nothing is stopping you from sitting down at your computer and starting to design or code.

What if you don’t know how to code?

Well luckily, the internet is full of amazing free content to learn. A quick google search of “Website tutorial” or “App tutorial” will get you started. You might think - there’s no way I’ll catch up to seasoned developers, but that’s not quite true. I’ve met founders of startups who learned to code all themselves and build amazing products. If you’re determined, you can really do it.


  • Lowest overhead
  • Cheapest


  • Can be the slowest (especially if you have to learn coding)

Partner with a developer

If you don’t want to do the development yourself, you can find a business partner. Ideally in this case, you want to bring on someone who can wear multiple hats - someone who can do some product management, design, development and more. Sound too good to be true? It’s not. I’ve met a LOT of developers who can do all the other tasks to a workable level. Especially enough for a startup.

In these cases, a lot of the time your partner is part of the startup and you’ll have to sort out an ownership or compensation structure.


  • Best balance of overhead and return


  • Can be hard to find a good partner
  • You give up some control of your company

Hire a software developer

This is similar to partnering up with a developer, except in this case, rather than having some kind of equity agreement, you simply pay an individual to develop software for you.


  • You retain control of your company

Cons - Can be hard to find a good developer

Hire a software development firm

The last option is to hire an entire firm. Just so we’re clear, software firms or companies that are capable of software development go by many names:

  • Custom Software firm/shop
  • Digital Agency
  • Web Design and Development firm/shop
  • App Development firm/shop
  • (many more)

This option is the most expensive, but if you have a revenue source or some money that you are ok with spending, this could be fastest and could yield the best quality. When you hire a software firm, you’re getting a lot that may not be obvious. Depending on the software firm, you may get access to:

  • A team full of talented, vetted developers
  • A well-oiled process
  • Years of experience in all development aspects

Yes you’ll get your software product in the end, but you’ll also get all this along the way. The biggest issue here is cost and the high cost can also amplify the negatives if you find a bad firm. For example, BiteSite recommends a $5,000 - $10,000 starting budget to get things going. Most startups don’t have that kind of money and most are hesitant to spend that up front.

That being said, if it’s successful, you could end up with a great product, that’s properly managed, and what’s more, you’ll get exposure to what it’s like to run a successful software team which becomes very useful as you grow.


  • If you find the right firm, you’ll get a great product and great experience to carry on throughout the life of your company


  • Expensive
  • A firm by no means guarantees quality and it can be hard to find a good firm

So what should I do?

So with the 4 options, what should you choose? Unfortunately, I can’t answer that. There are honestly merits to each approach and you have to think in your situation what’s the best for you. You’ll have to see your comfort level and weigh it against the benefits you see from each option to make your choice.

Whatever you choose though - you should remember a simple philosophy when it comes to good software development: good software development is iterative.

That means keeping a philosophy of “try something, if it doesn’t work, try something else”.

Software development should never be all or nothing. Software development should be a process of constant feedback and iterating. Everyone who develops good software should believe in this, and as such, they should extend that to your decision on the approach you take.

So whatever you decide, I highly recommend finding a way to try out the approach in some small way, and telling yourself to evaluate and iterate if it’s not working. For example, if you’re building itself, try it for a few weeks and see how far you get. If you’re hiring someone, set a super small milestone to see how it goes.

However it turns out, I congratulate you on pursuing your ideas and I hope I’ve shed some light on how to build your software startup product.

(photo by luis gomes from Pexels)

Casey Li
CEO & Founder, BiteSite

RSpec with Resque

software development ruby on rails resque rspec

So one of the gems we use a lot in our Ruby on Rails applications is Resque. For those who don't know, it's a library that allows you to run background tasks that are separate from the main web thread.

This gets especially useful when your web applications get big enough that they are doing long, complex tasks. There are alternatives like Sidekiq and Delayed Job, but Resque was the first one we came across and it's been serving us well for years.

However, one thing that became really annoying to deal with was automated tests (or specs). We use rspec, and when we would run our tests, a lot of the times our tests would fail because it would run into some code similar to Resque.enqueue which requires that your Redis server be running.

One way to deal with this was to simply start up your Redis server and then run your specs. However, this didn't feel right. With stubs, and mocks, and whatever else you use to fake logic, it seems that it should be easy to stub out any call that Resque makes.

Luckily, there is an easy solution.

It's called resque_spec and its repo can be found here.

It can actually do a bunch of stuff, but the key thing for us, is that it basically stubs out the real Resque calls so it doesn't actually queue up jobs, and doesn't require Redis to be running. What's more, the setup is as simple as including it in your Gemfile. Warning: As they mention, only include this in your test group, as it does override the default Resque functionality

# Gemfile

group :test do
  gem 'resque_spec'

What's more, if you're using Resque Scheduler, it works with that as well (with a little extra configuration).

With resque_spec in place, running specs became a lot simpler. Hope this helps some peeps out!

Casey Li
CEO & Founder, BiteSite

Software developers of the world, thank you.

business software software development

Something dawned on me the other day - something pretty amazing.

So I've been a Software Engineer, Developer - whatever you want to call it, a good chunk of my life. My dad introduced me to coding back in the early 90s, I studied Software Engineering in University, and now I run my own Custom Software shop. So software development has been a big part of my life and I would say I'm pretty proud of where I am.

However, something dawned on me the other day. I've really been standing on the shoulder of giants and what's crazy is - so many of us have.

Let me explain.

If you don't develop software, what you should understand, is that software is built in layers of abstraction. As a developer, you don't need to know how electrons zip back and forth on a computer motherboard because someone built a layer on top of that that abstracts the details away from you. As a developer, you don't need to understand how certain low-level operating system operations work because someone built a layer on top of that.

But it doesn't stop there.

Let's take Ruby on Rails for example. This is my web framework of choice. Because of Ruby on Rails, I don't need to understand when someone types in a URL in their browser, how that sends a request to my code with all the information I need to build a web application. I just use that information and I'm on my way.

But it doesn't stop there.

Many other developers have developed libraries that makes it infinitely easier to send fancy email notifications, create realtime web applications, render fancy charts and more.

And you know what, it doesn't stop there.

This is the thing - as a software developer, you leverage other people's work so much. You use frameworks, libraries, code snippets - you name it. Let's take a closer look.

As an informal, non-scientific experiment, I decided to pick one of BiteSite's biggest projects and I wanted to see how much code was ours and how much wasn't. Remember, this is pretty informal, but it should give you an idea

  • Our code (~4MB)
  • Library & framework code (~527 MB)

(for the technical readers, I took the size of our Ruby on Rails app folder for "Our code" and took the "node_modules" and "gems" folders for "Library and framework code")

That's 0.75% for our code! 99.25% of the code that's being used was written by other developers.

Now this is not super scientific, and granted we're not using every bit of the framework - but it's just a small indication of how much code we're using that we didn't create ourselves. I would also say that this is probably quite typical of most applications.

Aside from the exact percentages, which only represent the code that was written - there's so much research and development that went into creating these libraries and frameworks. Not to mention that a lot of these libraries and frameworks contain the work of some of the best engineers in the world. Think about that.

I can't count the number of times a client has come to me and said "Can you do this?", I say "Probably", Google it and within minutes have an amazing solution because some developer out there coded an amazing library.

And it doesn't stop there.

The benefit goes way beyond making a software developer's life easy or making them look impressive. Because of these libraries and frameworks, the developers using them are able to build incredible apps that are the foundation for amazing businesses and companies that change the world.

And here's the kicker. They do it for free.

That's what really blew my mind as I thought about this more and more. A lot of massive, super successful companies that change the world build their software, their company, their success using free frameworks and libraries.

We have all this amazing technology at our disposal because a huge number of software developers love developing amazing technology, putting it out there, and ask nothing in return.

Don't get me wrong. I know there is sometimes a bigger business motive for some of these libraries and frameworks, but for the most part, I think software developers have developed such an incredible culture of sharing and collaborating for the greater good. I can't think of another industry that does it so well.

I've taken it for granted for so long that so much of what I do and so much of what the tech industry does is based on (and forgive the phrase) the kindness of strangers - the kindness of developers who love their craft and want to share it with the world.

So with that - I think it's time we all thank this incredible group of people who continue to provide answers to our problems, who allow us to build amazing world-changing products and businesses, and who ask for nothing in return.

Thank you to all the incredible software developers out there who have allowed me and so many others to get to where we are.

Casey Li
CEO & Founder, BiteSite

Raw Body for Stripe Webhooks using Firebase Cloud Functions

coding firebase stripe software development

So today, I was implementing a Stripe Webhook for a Firebase application. The webhook would be implemented as a cloud function and I wanted to implement the code to verify that the request was securely coming from the proper Stripe servers.

The Stripe team has great documentation on how to do this with application like Node and Ruby. It's all documented here.

I was using Javascript in Firebase Cloud Functions so I followed the Node.js example. At one point in the documentation, they talk about verifying the authenticity of the request by calling stripe.webhooks.constructEvent and passing in a secret key, the payload from request.body, and a signature header.

However, every time I tried it, I kept getting an error about the payload not matching the signature. I was even pointed to this documentation that gave me a hint about the using the Raw Data here.

So I tried to JSON.stringify the incoming request body with no luck.

Luckily, shortly after, I realized you can easily get the rawBody contents:

exports.stripeWebhook = functions.https.onRequest((request, response) => {
  const stripeWebhookSecretKey = functions.config().stripe.webhook_secret_key;

  let event;

  const payloadData = request.rawBody;
  const payloadString = payloadData.toString();
  const webhookStripeSignatureHeader = request.headers['stripe-signature'];

  event = stripe.webhooks.constructEvent(payloadString, webhookStripeSignatureHeader, stripeWebhookSecretKey);

By calling request.rawBody.toString(), you can get exactly what stripe.webhooks.constructEvent needs.

Casey Li
CEO & Founder, BiteSite

New Modules, Classes, Variables from Gem not loading in my Rails Application

ruby gems software development ruby on rails

So I just spent about 3 to 4 hours trying to debug this problem. Here's the setup

  • We have a Rails application that uses a Gem that we wrote
  • The Gem is pretty simple - a collection of classes that the Rails application can use (
  • Our top level gem file autoloads in files and some are within modules/namespaces

So my main task was adding a new class, within a module and no matter what I did, I would constantly get a 'constant not found' errors or something similar. I would restart my rails console, re-bundle - nothing would work.

At one point, if I manually called 'load' it would work, but not upon the initial load. I found out later that 'spring' was the issue. I'm not sure the specifics, but spring must cache the classes, modules, etc. it uses from gems.

So what's the fix? When adding new classes, modules, and requiring them in your top level my-gem.rb file, be sure to stop spring using

spring stop

so that when you restart your Rails server or console, it properly loads them. This is a super good article to learn the internals of how all this works:

Casey Li
CEO & Founder, BiteSite