How to Design a Web Application from Scratch:

A CTO’s Journey

By Greg Monn  |  June 2, 2022

If you’ve been following along with our progress at 3Together and SwellChat, you’ve likely read our posts on philosophy, why we started a new company, and what we hope to achieve. What we haven’t discussed yet are the technical decisions, the architecture, and the thought processes behind how we build our software—until now.

When Shawn approached me to join him and Jessica as a cofounder and the CTO of 3Together, it had been 10 years since I had last written a line of code. It had also been 20 years since I joined Shawn at his first startup, Benefitfocus. Startup life at 25 is one thing, but I wondered if I had it in me to start again, now at 45. And I wasn’t the only one. 

My wife looked at me and said, “You’re not as young as you used to be. I know you really love it, but can your body and your brain handle all of that 20 years later?” Not exactly a vote of confidence, I know, but the challenge of building something from the ground up, deciding on languages, development style, databases, countless tools and processes—if you’re a builder, you know that opportunity is too exciting to turn away. Plus, Shawn and Jessica reassured me that everything would be ok. “It’s like riding a bike,” they said. “You’ll pick it right back up.” And that was exactly what I had missed—the optimism required to build something new, to put something out into the world that had never existed before. Just like riding a bike…at 80 miles per hour and assembling it at the same time.

 I started with the basics: what language would we choose and how did we want to write it. My muscle memory was steeped in Java, jsp pages, .Net, and Angular. For databases, my experience ran the gamut: mySQL, SQL Server and Oracle in the past. So many choices…

 I knew I wanted our company to do code first DB work. We were small and planned to stay small. Plus, we didn’t have a dedicated DevOps or DBA/DBE crew, so the database side just needed to be handled for us. And since SwellChat was going to be a communications platform for video conferencing to connect the broker/HR admin with clients/employees, I knew the database would not be huge. Big enough to do the job, but not so big and robust that there needed to be a whole new group to handle things. MySQL it was—light enough to pick up and go but robust enough to handle everything we need. 

Next was designing the business tier layer, of which the APIs would be the heart of the system. Having just left a .Net shop, it was still fresh in my brain. Before I learned to read it by sight, I honestly wasn’t a fan of .Net, but we all learn and grow. So we settled on .Net and moved on to the front end.

Lots of choices here: React, View, Angular, HTML5, and more, but which would benefit us the most? I spent some time researching and talking to smart people. I knew from previous jobs that we had people who worked in all of them. But Angular is the one that intrigued me the most. When I really dug into it, what I noticed was that it seemed like someone from the backend world came into the front end and said, “You all need to get your ducks in a row and organize things more.” I love the way that things are broken up in the JS, HTML and CSS, services and models and heavy typescripting all the way around. It was something I could understand, a lot of the same concepts from making APIs with controllers, services and repositories, just replicated and put into a front end system. So, I was sold; Angular it would be.

With our stack starting to take shape, I needed to decide what tools I’d use to manage the team’s workflow. I’ve used and forgotten more development tasking tools than I care to admit. JIRA, Rally, MS Project, Trello, and then there’s the countless Microsoft products. But like most things, simple is better, and I had always enjoyed the elegant simplicity of Jira. Another checkbox filled.

Now we were moving. We knew what we were building, how we were going to build it, and we had a tool to manage the workflow. Oh, but then there’s the code. The lines and lines of code that weren’t going to deploy themselves. We could only run locally for so long. What good is a video conferencing tool if you can’t actually use it to talk to someone. Don’t get me wrong, I loved seeing myself in one window and one of my dogs splayed on the bed behind me in the next, but I didn’t think my cofounders would consider that a win. 

In startup mode, cheap is good. Free is better. With only two of us writing and deploying code, shared runners on GitLab worked just fine. Git, also free. Another win. Compared to the racks we used to have to buy and store on our own when we launched our first startup, AWS was basically free. Throw in all the credits they give away like candy, we were set for quite a while. (If you’re interested in how to maximize your free AWS credits, check back in soon. I’ll share everything I learned in a future post.) 

I had saved the linchpin decision for last: the video conferencing/chatting solution. There were plenty of options: WebRTC roll your own, AWS Chime SDK, Vonage, etc. I don’t believe that Microsoft had released V1 of thiers as yet, and Zoom was not a thing that could be used as an SDK at the time either, so I chose Chime SDK and moved on with that choice.

As I worked through classes online about how to make a simple application with Angular and .Net with mySQL or SQL Server in the backend, I knew I needed to get into the video conferencing side as soon as possible. There’s no better way to run and test your software than to use it all the time, every meeting, every interaction you have internally and externally.

When I downloaded the original version of the AWS Chime SDK, it came with examples and demos, Angular? No, not hardly; it couldn’t be that easy. All the demos were React with Node.js. So, there I was, hadn’t coded in 10 years, using an SDK I hadn’t played with, ever. Using Git, not really an older developer tool. Checking in and building in Gitlab. Deploying to AWS (hadn’t used that either, just Azure). Looking at examples in React and Node, something I had never programmed in, and porting that to Angular and .Net. Fun. Right?

My head was spinning for days, confusion for hours and hours. Lots of calls with friends, former coworkers, reading, looking things up, Googling hour after hour. Trying and retrying. But it’s all part of the journey…

Join Our Newsletter

Subscribe to our newsletter to receive the latest product offerings, blog updates, and exclusive offers.