Wednesday, February 29, 2012

The Future of Software Development Will Be Online


In 2008 a senior person associated with a VC in Seattle was helping advice this VC firm on an investment. He asked me what I thought about developing software on a browser. Yes, instead of a full-fledge IDE, a browser-based IDE. I thought that was one of the dumbest ideas I ever heard and I told him. My primary thought was that I could not get the rich experience of a native application on the browser, I couldn’t work (safely) offline and everything would be incredibly slow.

I’ll take all that back and I’ll make a prediction: the future of software development will be on browser-based IDEs.

Let’s ignore the technicalities of how to make it work, but picture this: Your IDE is available wherever you have a browser. All your source code is in the cloud. Sharing code or doing code review is as easy as sharing a picture online. Your code can be deployed from your desktop to the cloud at breaking speeds (after all, it lives on the cloud already). You could execute performance testing, browser compatibility testing and unit testing in seconds. Wouldn’t that be awesome?

This is a lot closer than we think and a lot of those pieces already exist here and there.

There is a huge market for native IDEs that will fight to prevent that from happening, but it won’t be long before startups create this software development utopia. Maybe someone is already doing it and I’m unaware. The closest thing to this I know is jsFiddle.net, an amazingly simple yet powerful JavaScript editor. It lacks hundreds of features, but it’s the beginning.

Imagine leaving your work desktop, opening your laptop at a coffee shop, then going home and opening your home computer or iPad and continue to edit the same code. I did that yesterday. It’s absolutely awesome. I used 3 different computers. I didn’t check-in/sync. It was just there, like a Google Docs.

The current state of web browsers allows a lot of that vision to take place. Combine that with the power of cloud computing and you can have 1/60th of an hour of 60 computers to run an amazing complex test scenario in just 1 minute, instead of having 1 server running some unit test for an hour. There won’t be more downloads, versioning issues between libraries, mixed DLLs or jQuery libraries. It all works, just like when you open Gmail and it is there, anywhere, fast and consistent. I'm looking forward to that day.

Tuesday, February 7, 2012

The Curious Story of the Smart Microsoft Developer Who Couldn’t Find a Job (he liked)


This is the story of Pete, our fictional character. Pete is a principal developer at Microsoft. He kicks ass solving problems and bringing software to life. He worked on Windows TCP/IP stack for 4 years, then he worked on Visual Studio IDE team for 3 years and more recently he worked on Bing for 3 years doing some hard-core backend optimization for fast retrieval of large data sets. Pete always got top tier bonus, several Gold Star awards, and promotions every other year. But Pete is sad and he wants to leave Microsoft. He thinks the time is right for him to find another company to work for. Pete’s brain is considering Amazon, Google, Facebook and even eBay. Pete’s heart is thinking about joining a startup – well, Pete wants to do his own startup, but a first step for him would be to learn about startups by joining one.

Pete saw that my startup opened several new job positions and he thought that he could talk to me and see what they are and if there’s a match, but also learn a thing or two about startups, which might sway him in to one side or another on his decision on startup versus big company. Pete sent me this great email about his career at Microsoft, about his passion for technology and innovation and how Microsoft wasn’t as fulfilling as it used to be, and he wants to meet to discuss “EveryMove job openings”.

Here’s what I responded to Pete via email.

Pete, I’m more than honored that a person of your caliber and experience would consider EveryMove. I know exactly how you feel about Microsoft. I felt the same way before I left to do my first startup. Microsoft is great for lots of people, but there’s a minority that have this “virus” that want more than Microsoft can provide; they have an entrepreneurial spirit. You are one of those. 
The sooner you accept that you won’t find another group inside of Microsoft the better it will be for you. You’ll go from being sad and demotivated to being depressed if you stay. You are way ahead of the curve because you know that already. My first recommendation is for you to go interview at Amazon, Google or Facebook. These are three different companies who provide a great paycheck and benefits, and you can explore a culture that’s significantly different from Microsoft. 
I think joining a startup is a good way for you to learn a lot about it, before you risking learning on your own. However, I don’t think you are ready to join a startup yet.
My biggest concern about you joining a startup is that you don’t have enough breadth of expertise in building products. It’s nothing that you couldn’t learn in a short period of time, it’s just that at the stage my startup is in I can’t afford to have people who are learning fundamental building blocks of shipping web consumer products. Until our team has 6 or 8 developers, it’s hard to justify hiring someone who hasn’t “done” it. 
Besides that, there are some mental hurdles you have to overcome by yourself about understanding the risk-reward of a startup. Taking a 30-40% salary cut is just one of those. There is also the lack of support and structure at a startup. I know it sounds great, but it’s a lot harder than you think to know what to build next and how, and mostly you’d have to figure this stuff by yourself. Delegation really doesn’t exist at a startup. You just do it. 
But here is what you can do right now that will put you in a position to not only interview with EveryMove, but also with dozens of other startups in Seattle and increase your chances of getting an offer, and also make you hit the ground running, creating value for that startup and increasing the chances of that startup to be a successful business. 
It’s simple: build something! 
Pick a “side project”, a web product, and build it from beginning to end. It doesn’t matter if you are building something for fun or to make money, something you come up with yourself or if you are borrowing an idea from somewhere else but making it better. It just has to be from beginning to end: from buying the domain to the deploying a web product to a hosting service and running for a few months. You’ll learn HTTP, Razor, MVC 3, ASP.NET, CSS, HTML, JavaScript, jQuery, jQuery UI, Facebook Connect, Twitter API, SQL, service monitoring, analytics, etc. Those are fundamental building blocks we use day-in day-out.   
Besides all the great technology you’ll learn, which I’m sure you can do in a short few months, there are other things you’ll learn that you were just superficially exposed at Microsoft. Things like user experience, product feature prioritization, product management (that’s not what PMs do at Microsoft for the most part), customer input and feedback, and a sense of ownership and control you never felt before. 
If you do a side project like that or maybe two, let’s schedule an interview ASAP. I want you on my team. You proved you can do it and you “de-risked” yourself for a startup and made yourself that much more valuable. 
I look forward to hearing back from you in 3 or 4 months. 
Cheers,
Marcelo

This exact conversation is fictional, but a conversation just like that happens between me and a dev at Microsoft 2 or 3 times a week, either during face-to-face informational interviews or via email. By writing it on my blog, I can point people to it and help all of us be more prepared and successful in pursuing exciting opportunities of working together -- or not.

And since we are on topic, let me debunk some myths of working at a startup:

  • Startups don’t work longer hours than you’d at Microsoft or any other big company. I actually would say that startups are more focused on outcome and lifestyle, and big companies are more focused on keeping the workforce busy.
  • Startup is not one company. Is a class of companies and they differ from each other in many aspects, including work/life balance, compensation and benefits, methodologies and processes, tools and technologies, etc.
  • Startups do pay, if they raised money or are bringing revenue. The salary will vary between $60,000 and $120,000 depending on stage and your experience.
  • Startups will offer you anywhere from 0.10% to 1.25% of equity on the company for a Series A funded startup (on a non-executive role), or half or a third of that for a Series B funded startup. It varies a lot.
  • Startups are a lot more fun than big companies. Period.
  • At startup, in general, you make a bigger impact to a smaller portion of the population, while at big companies you make a smaller (tiny?) impact to a large number of users.
  • Startups tend to be more flexible in terms of time in the office, work hours, sick days, vacation days, holidays, work setup, etc. 
  • Startups do offer health insurance and some other perks once they pass the 3-4 employees mark.
  • Startups are willing to explore and take risks on product, business model, marketing, etc. If you have a crazy idea, be careful if you work at a startup because everyone might just like it and do it.
  • Job security is a big issue at a startup. Some startups have 12-months of runway (which means they can be out of business in 12-months if they don’t raise more money or increase revenue) and some might have 24-months or 36-months. This is runway to prove a business. A lot of them fail, but you can always find a job at another startup or back at Microsoft, Google or Amazon.
  • Startup folks, even developers, tend to go out to more to events, meetups, conferences, etc. You become part of this community very quickly.
  • At a startup you’ll have to do things that you might not enjoy to help keep the ball rolling every once in a while.
  • As a developer, at a startup there is less emphasis at finding the perfect solution, and more emphasis on finding the fastest solution to a problem.

Any questions or comments? I’m more than happy to continue this conversation in the comments section below.