App-to-Market: Locking In Technology Options for Your Startup
How crucial is the technology you choose to run it and build apps? It almost doesn't matter, as long as your chosen path provides enough options to deliver to customers the solutions they need. We look at the Microsoft stack as an example.
More on This Topic:
You've been working in a company that has its own data center with servers sitting in racks. You got training on how to use and deploy solutions on them using a combination of Visual Studio, .NET, servers, Cisco, and a bunch of other enterprise-grade technologies.
You have ideas for some apps and you've been getting ready to venture out on your own. To get a feel for what it might be like, you attend several startup competitions. No one at those competitions are using any technology related to .NET. Some of the attendees you talked with say that knowledge of the Microsoft technology stack isn't useful in a startup. They've even got you second-guessing your choices.
Now you're wondering, "I've got all of this .NET knowledge, but they say that .NET isn't startup friendly; what am I going to do now?"
Note: Since this is Visual Studio Magazine, this article will have a .NET slant to it. Don't worry; I recognize the bias; even then, you can really take a language- and platform-agnostic approach to tool choice for your startup. Just about every stack has something for every facet of building apps.
Right Tools for the Job
It does not matter what you think -- nor does it matter what others think -- what tools you use. I was sitting at an event in September 2014 with other techies and we were sharing stories about what we were working on. Some of them thought they were being helpful by telling me what I should be adding to my product. Some of their suggestions didn't align at all with what the users told us they wanted. The same is true with technology. Do any of these sound familiar?
"No, don't use SQL Server; use MySQL (or PostGreSQL, or whatever)."
"Don't use a relational database; you need to be using NoSQL."
"Mongo is where it's at. It will scale, it will [do this crazy but innovative thing to transform your product]."
"Don't use .NET, use PHP, Ruby, or [some other cool, hip language here]."
The technology used in a startup is at best a fourth-level discussion for 99.9 percent of technology startups. Just because Google uses technology XYZ does not mean that your startup with no customers and which is just trying to create a minimum viable product (MVP) should use the same technology. The key here is to not worry too much with the technology choices and key on what the users want, not the latest cool technology. Use tools and technologies that meet these two criteria:
- You have a high confidence in achieving success with your technology choices.
- They are not chosen because they are cool, but because they add value.
Of course, it helps that you know a technology fairly well. Sometimes, you have to learn a technology first. If you know Windows Presentation Foundation on the desktop, that knowledge doesn't transfer that well to the intricacies of the Internet. So, if your product is destined for the Web, you will need to get up to speed on a Web-based technology.
You will also need to be realistic: Getting up to speed on a given technology is not something you pick up in a day no matter how many books, videos, and trainers tell you that you'll be an expert in 24 hours if just pay them money for their material. If you can pick up material that fast, then you are incredible. If you are like the rest of us, it takes time to learn a new technology. Going with "what you know" and getting an MVP out weeks or months sooner than you might otherwise is a good strategy, but it also depends on your specific situation. The most important thing is to make sure that your technology choices align with customer need.
"If you use C#, then you won't be able to target the iPhone, Android, or any of the other cool platforms."
I can't tell you how many times I have heard someone tell me this. So, let me be the first person to tell you – again -- that the technology is at best a fourth-level choice in your decision tree. I'm not a .NET salesman, and I don't work for Microsoft, but I would like to respond that I can hit just about every platform and datastore that my customers care about using the Microsoft stack. Let me mention a few:
- Nearly every relational database. This includes Oracle, IBM DB/2, MySQL, etc.
- NoSQL datastores. This includes Mongo and a host of other NoSQL style datastores.
- Cloud. Amazon, Google, and Microsoft all have major cloud services. Each of these vendors has support for Windows-based virtual machines. Since the cloud is a fancy name for hosting, there are a number of hosting companies that provide Windows support in one form or fashion.
- Web. There are several .NET options here, including ASP.NET MVC, Web pages, and Web Forms. (If you are doing a Web startup, Web Forms may not be the best idea due to lack of control of the HTML produced, as well as large file sizes. Both of these issues can be a killer with mobile devices. Still, Web Forms is an option.)
- Mobile. It is entirely possible to build native apps for the iPhone and Android with .NET (via Microsoft's Xamarin, of course).
- Windows. If you are using .NET, you can attack just about every flavor of application in the Windows space.
- Apple Macintosh. Interestingly, it is entirely possible to target the Macintosh with native applications while using .NET. Xamarin.Mac will allow a native application to be built with .NET for the Mac. In addition, Xamarin/Microsoft have just recently shipped a prerelease version of Visual Studio for the Mac.
- Other platforms. There are several other platforms that have some amount of support, including Linux. With the shipping of .NET Core, Microsoft has a version of the .NET Framework that allows the hosting of Web-based apps on Windows, Linux, and Mac.
Along with the platforms that one can target, there are several frameworks that should be mentioned. The first is the .NET Framework from Microsoft. This is the framework that .NET developers grew up on. Thankfully, there is also the open source Mono framework. The Mono framework has been ported to a number of other platforms.
Note: Along with the various iterations of the .NET framework, there is Java, and a host of other tools/frameworks/platforms. As you look at the tools to build a product, worry less about the "right" tool and think more about using what you know to solve a customer's pressing problem. If Java works for you, great. If you have to go to a combination of technologies, more power to you.
If you are building Google, these are probably not the tools for you. The time associated with garbage collection actually matter. In those situations, to paraphrase Silicon Valley's Bertram Gilfoyle from the HBO Series Silicon Valley: "Yoctoseconds matter." But most people aren't trying to build the next Google. If you aren't going to be at their scale, it does not make a lot of sense to use the same tools.
What kinds of IDE tools are out there and available for a startup? You are an expert in Visual Studio. Are you going to pay thousands of dollars for your own copy of Visual Studio? Of course not. Instead of stealing a copy or using a licensed version from your company for your own startup, let's look at some options.
First, there's already a version of Visual Studio that can be used for startups and is licensed appropriately: Visual Studio Community Edition. It's licensed for:
- Individual developers who are creating apps for free or for pay apps.
- Organizations that are using Visual Studio in the classroom, for academic research, or are contributing to open source projects.
- Organizations with less than 250 PCs or making less than $1 million in annual revenue.
And then there's Xamarin Studio/MonoDevelop, which is a cross-platform tool for doing .NET development on Windows, Mac, and Linux. Xamarin has programs for startups, education, and others to get up to speed on their platform. Xamarin/Microsoft has recently released a preview version of Visual Studio for Mac. This IDE allows for the creation of Xamarin's iOS, Android, Mac, and Forms products in mobile as well as ASP.NET Core web and cloud apps.
Also, there's Visual Studio Code, a cross-platform code editor that is perfect for doing ASP.NET development.
At one time, back when dinosaurs walked the earth, getting Windows-based Web hosting was a difficult thing. Now, there are plenty of Windows-based hosting services offering ASP.NET hosting. Along with hosters, there are also cloud services out in the marketplace: Microsoft Azure, Amazon Web Services, and Google Compute Engine, Openstack Cloud, VMware vCloud, RackSpace Cloud, to name a few. There are quite a few out there, but these ones are top of mind.
You may be wondering, "What is the difference between hosting and the cloud." I see two:
- While hosting and the cloud are very similar, the biggest difference is among vendors that provide multiple services that scale to worldwide capabilities. This can be things like automatically adding more services, messaging services, and sets of other services that allow your application to scale upward or downward.
- Hosting isn't as hip a term as "the cloud."
Technical Startup Services
It seems that there are lots of technical companies throwing services at startups, and that is correct. A number of higher end technology companies are providing free, as in a puppy, software and services. Some of the example services include:
- Microsoft Bizspark. Micosoft's program aimed directly at startups provide its software for free as well as $150 in credit for its Azure cloud service. Visual Studio developer should find Azure to very attractive since it has great VS integration.
- Amazon AWS Activate. Amazon's program provides startups with the resources necessary to get up and going.
Microsoft and Amazon provide multiple levels of these specific cloud services, depending on time and need. They're not the only companies, and if you look around, you'll notice them and Google and Rackspace and a few other companies who have created programs specifically for startups to get up and running.
Just like technology companies are trying to support other technology startups, many local economic development organizations, universities, and other groups are doing the same via various programs. It will be interesting to see if they continue to provide services once there is an economic downturn, which always occurs. I would question the need to have 12 to 15 startups, co-working, and accelerators in Atlanta, but that is a different discussion. This should not stop you from looking into the services that are provided. Lift your head up off your keyboard long enough to look and see what is provided locally to learn if any of these local services can be of help.
What kind of services are out there? You should be able to find like-minded people at technology meetings and get-togethers via your local Meetup.com or using apps like Foursquare. These include simple meetings and get-togethers, "startup drinks", low-cost rentable space, accelerator programs, and nearly everything in between. I have even seen various groups take to mailing lists and services like slack.com to work together and help each other out.
Look Out for No. 1
After all this talk of tools and technology and ways to take advantage of local networking, how about one last word about you and your mental state? Yes, you have to be a little bit "off your rocker" to consider a startup. Startups are not 9-to-5 jobs, and they're definitely not for everyone. People who work on startups tend to be at the extreme end of some spectrum in some personality tests. Based on this, I'd like to make a few suggestions from me to you:
- If you are not a member of a gym, please go buy a membership and go four to five times a week. You need to take care of your body, and the gym is a good way to do this. If you aren't a gym person, look to sports and other forms of exercise such as walking. You cannot write code 24 hours a day, or even 12 hours a day without it affecting your health negatively. Take care of your body.
- I have read several articles over the last year stating that there is a higher suicide rate amongst entrepreneurs (I'll wait while you do a Google Search….). Startups are a high-pressure endeavor. Some days you feel on top of the world. Other days, all you want to do is sit in a corner and cry, throw your arms up, and march over to the nearest corporate consulting job. Please, please, please understand that there are others of us out there. We understand what you are going through. Find people locally that you can talk to. There may be a local entrepreneur group you can join. Talk to your family. Talk with your cofounders. The concept of driving yourself to "success or a failed startup" results in isolation and loneliness. When things go south, they really go south. At the very least, you learn from failure, much more so than success. And lets' face it: Most startups will fail. Just because you don't have a $50 million company after 18 months of work does not make you a failure as a person or an entrepreneur.
When you're in the right state of mind and physically and mentally healthy, you make better decisions. With that in mind, let's conclude with this important advice: It is still important to make good decisions regarding your application and how it will be built.
It's currently in vogue with technologists to use the latest beta of something. Don't bet your application on a beta product unless you are going to commit the time to keep your product up to date with the beta product.
I once joined a startup that had based their then current code on LINQ to SQL; this was at the end of 2006. LINQ didn't ship until the end of 2007. We ended up just rewriting the app and removing LINQ. In 2006, it made no sense to base a startup on a beta product that would change significantly. Even better, thank goodness we didn't use Linq to SQL. In 2012, using LINQ made sense, which I did for a startup. We had LINQ and we had Entity Framework and enough tools to make this work.
The same is true for "new" libraries. Don't just dump a new library that you have never worked with before into your app because you want to play with it. Nuget and other package managers make it incredibly simple and easy to add libraries into apps, but continually adding libraries into apps doesn't make you smarter, your application run faster, or the application cooler -- it only makes your application a dumping ground that is harder to update, manage, and fix. Add libraries that make sense to your app, not libraries that you want to try out. That is what "File -> New -> Project" is for.
Hopefully, in this article you've heard that there are these three basic tenets:
- Technology is not the most important thing in a startup. Use technology judiciously.
- There are lots of tools out there. Use the right tool for the job. Be careful.
- Interact with others and take care of yourself.
I welcome your feedback on this series so far.