Thursday, July 28, 2011

Getting SSL, Capybara, Rails 3, and Devise to work together

I've noticed a lot of Rails blog posts recommending that you only turn SSL on in production and don't try to use it in the test or development environments. This is a monumental mistake, a lesson I learned hard in the early days of OtherInbox: SSL enforcement has a lot of subtleties and corner cases that need to be exercised and tested on a routine basis. As a quick slightly embarrasing example, we had a bug at OIB where flash messages would get swallowed during redirects. It turned out we were accidentally redirecting people to an http:// page, where the flash would be available, but our SSL enforcement code redirected them quickly to https://, and that second redirect ate the flash message. Since we couldn't reproduce the bug on our own machines it was much harder to track down than you would think.

But I know why the bloggers recommend the naive approach though: getting SSL to work offline is a major pain! Right now I'm building a Rails app that enforces SSL on every page. It's all private data (the public-facing site is managed by a separate CMS) so I don't want any page to be accessible over http://. Below is a summary of the code changes I had to make to get this to work. I was mainly guided by this great Collective Idea blog post about Rails 3 SSL that I'd recommend you start with.

It's not hard to get SSL working in development mode if you use an app container like Phusion Passenger. I explained how to do that a few years ago with an Apache-Mongrel setup, but the basic ideas apply.

Update 1/31/2012: I wrote up an easy way to get SSL working with Unicorn and Pound instead of Passenger which is my new preferred way of working. Also check out the Devise wiki for more useful SSL info.

Tuesday, July 19, 2011

My New Gig at the Greater Baltimore Technology Council

The Greater Baltimore Technology Council (GBTC) recently announced that I've started working with them as a volunteer "Entrepreneur-in-Residence". I've been good-naturedly teased about it a bit and had a few people ask me, "so what does that mean"? Many of my friends don't know what the GBTC is or why it's here. Here's my quick explanation.

The GBTC is a nonprofit with a mission to help grow the technology sector here in Maryland. If you've been reading my blog for a while you know what a big deal that is to me. I love living here and I love building software, so anything that helps grow the tech sector is near and dear to my heart. The GBTC was the first organization to sponsor Ignite Baltimore, helping to get the word out for that first event, and they have been a sponsor ever since.

Since the group was founded in the late 90's the tech sector has changed. Today almost every company is a tech company, and many technology practitioners no longer work for companies at all. More people are in business for themselves. More projects get accomplished via the "Hollywood model" of federated teams of independent contractors coming together for a fixed amount of time. Infrastructure costs have dropped rapidly, making information technology in particular far more affordable - practically free in some cases.

The GBTC leadership is making bold plans to modernize the organization to keep pace with these changes; in fact they are poised to put the GBTC on the cutting edge of these changes, making it a dynamic organization relevant to everyone in the tech game: freelancers, entrepreneurs, small companies, big companies, local governments, education institutions, even other nonprofits.

It's early days for this transformation, but they've already taken a very bold step: they are hiring an Innovation Community Manager, an idea I've been advocating for awhile. That person's main job will be to support the grass-roots tech organization efforts that many of us have been pursuing for years. I can't think of a more effective way for the GBTC to advance its mission.

My job as EIR at GBTC is to help craft this transformation plan in a way that helps my fellow-entrepreneurs. My fellows include many more constituencies than simply other Internet startup people: we want the new GBTC to help everyone in the area who's trying to start something innovative. You might be working in a big company or at a struggling nonprofit, or in an established small business and looking to grow. Whatever the key ingredients for your continued success are, we want to help provide them. My role to that end will include advocacy and writing (like this blog post), attending staff meetings, giving feedback to different ideas, and generally just lending a hand to all of the GBTC's activities.

I don't want to steal any more thunder from the cool stuff they're working on, but I do want to say as an entrepreneur it's a great learning experience for me as I watch the GBTC board and CEO Sharon Webb make a big transformation in an institution like this. It's like they are founding the group all over again while it's still operating. There are lots of stakeholders, a heritage to preserve, and uncertainty about which choices to make to ensure future success. Very similar to the sort of environment I'm in with my own venture!

Wednesday, July 13, 2011

Notes on Generating Good Ideas

I'm giving a talk today at Think Big Baltimore called "Generating Good Ideas". Here are the links I refer to in the talk:

Below are the slides I'll be using. My main point is that I've never had luck sitting down trying to have ideas. They always occur to me incidentally while doing something else. I recommend some specific things that have worked for me or that I've read have worked for others to help that process occur more regularly. The most effective technique for me personally has been to write every little idea down, no matter how frivolous or unlikely it is that I'll ever do it. I feel like when I do that I'm "honoring my muse" and taking my creative impulses seriously. I can't prove it but I think doing this has helped me increase the number of ideas I get.

Wednesday, July 6, 2011

Should we all move to Silicon Valley?

I keep thinking about this exit interview that Brian Sierakowski did with Paul Capestany, who is leaving Baltimore to move to San Francisco (joining the likes of other smart former Baltimore/Maryland transplants Patti Chan, Clarence Wooten, Paul Singh, Jared Goralnick, and others). He wants to start a high-risk/high-reward consumer Internet company.

I respect Paul and count him a friend. He's done a lot for the cause of entrepreneurship in the city and we all owe him our thanks! I wish him luck. And I can really understand where he's coming from. San Francisco is a cool place for web entrepreneurs to be.

All things being equal, if Paul's dream is to start a big, risky consumer Internet company, he may have an edge by starting it in San Francisco. If you're in a smaller, less-connected city like Baltimore competing head to head with a company based there, you may be at a serious disadvantage (Paul Graham makes the point in an essay about startup hubs).

But are all things equal? Let's break it down.

People in San Francisco Are More Risk-Tolerant

Paul says he can't find enough risk-takers here, but is the talent hunt any easier out there? I assume the main types of people he needs are technical cofounders and designers willing to work for equity in lieu of cash. Those are in short supply across the world, no more so than in San Francisco. Here are two anecdotes:
  1. I recently had a vivid conversation with someone starting a company in San Francisco with every advantage you can think of: prominent name-brand angel investors, a beautiful downtown office space, cutting-edge technology, early traction, etc. But this person had interviewed over and a hundred people so far and could not find anyone skilled willing to work for part equity and part salary. Pretty much every day you can find an article on tech blogs about the crazy salaries that startups and established companies are throwing at web practitioners. Competition for talent is fierce. And since all you really need for most ideas is one smart, hard-working coder,  I wonder what the real odds are for finding such a person out there vs. somewhere in Maryland where the community is more close-knit.
  2. I've worked with well-respected, experienced entrepreneurs who have sold multiple companies here in Baltimore and in Austin. Despite their track records, rich network of connections, and geographic advantages, they've still had to work hard to secure investment and find talented developers. My point is that all of the problems outlined in Paul's interview are going to exist in any city, even for proven entrepreneurs. If being in Silicon Valley makes those problems 5% more tractable, maybe that's a worthwhile edge to have. But is it really 5%? Who knows? 
Also, no matter where you live you can still get people to build your prototype for not much cash. There's a lot you can do absent a cofounder to develop and test your ideas in the marketplace. See Sivers and Freedman.

It's also worth pointing out that successful Internet companies get built all the time that are based elsewhere. 37signals, LivingSocial, BillMeLater, OtherInbox, Etsy, bit.ly, OpenDNS, Advertising.com, and Millenial Media are a few that jump out at me without thought.
Investors in San Francisco Are More Risk Tolerant

I'm sure this is true, if only because they have more experience with startups and risk. Yet I wonder if it's really relevant. Starting a web company and getting it to the point where your business model is proven, is practically free. Growing a company from that point ("scaling it" in startup parlance) is what costs real money, and it seems vastly easier to raise money for growth than for starting from scratch, especially in the era of AngelList. And mid-Atlantic companies with traction and have real growth prospects can definitely raise money: in our own backyard, LivingSocial, AwayFind, and Shortmail have raised plenty of money from around the country. Locally, I got to meet a lot of angel investors while I was helping fundraise for Startup City, and I found some of them were quite risk-tolerant and ready to commit to funding us on the spot.

Believe me, I've been there

I hope it doesn't seem like I'm picking on Paul or others who have made that choice. I've never felt the urge to move to San Francisco but I was oft-tempted to move to Austin when I was working full-time on OtherInbox. Paul is right that there's something extremely stimulating about being around people who care about the same things you do and have the same imagination you do. It's just not mainstream (yet) for people to be starting companies and (especially as a man) it can be difficult to make friends with people lacking the same obsessive dream. It's just a really nice thing to have in common with your friends.

This may be the most decisive factor making people want to move. We imagine that every coffeeshop we walk into over there will be like the hallway track at SXSW. I know I've dreamed that dream! I once sent Dave Troy a distressed email while sitting in my office in Austin, in a moment of particular geographic jealousy, whose contents were pretty close to Paul's exit interview. I wish I could find Dave's response but it was basically what he later wrote in this post: "Being in 'a' place is more important than being in 'the' place". I take great comfort from that thought. I sometimes fear I've become an apologist for Baltimore, a storied, troubled city to be sure but a place which needs no apology. It's a place in a way that Silicon Valley never can be (have you ever met anyone who grew up there or lived there for their whole lives?). Baltimore has changed me in a million ways, becoming a part of me and I part of it; I'm supported by wonderful friends and family, as well as professional colleagues who form a great (albeit small) community of innovators. That's a huge asset, a massive competitive advantage, one that I was undervaluing until I wrote this essay.


What is your actual goal?

If your goal is to build and own a thriving business producing an awesome, innovative software product that helps helps the world, while building wealth for your family, your employees, your investors, and your community, then I think you absolutely do not need to move from wherever you're living. You just need to think about what sorts of businesses are going to work in your town. There are many, many niches out there that you can dominate without being in California. I would look for unsexy, comfortable industries in your area where there are many competitors but little competition.

I wish everyone thinking about moving to the Valley could spend some time with my friend Chris Ashworth here in Baltimore. In terms of personal happiness, self-actualization, and all-around awesome lifestyle, he's by far the most successful entrepreneur I know. He started Figure53, a wonderful company that makes software for sound designers used in theaters around the world, including Broadway and the Olympics. He makes a good living at it, employs six people, and is very obviously having a great time.

If you absolutely are committed to starting a consumer Internet company I can see the argument for moving to San Francisco, but I would carefully examine your assumptions about what's going to be easier and harder for you when you get there. I personally would try and launch the company right where I am, because when you demonstrate traction you'll have a much easier time solving the "talent + investment" problem in whatever city you're in. People will start seeking you out!

I do think there's a lot to be said for living in a city, any city, because of the intangible benefits that accrue from density (well explored in the book "Where Good Ideas Come From"). You get better ideas if you're mixing with smart people regularly. Here in Baltimore there are a ton of meetups; tons of people with web and mobile and design skills; and tons of companies that make great money using Internet technology. I'm sure most cities are like that.

Good luck!

Paul is a super smart, charismatic guy who is going to be a big success wherever he goes. This essay wasn't meant to try and talk him out of it; I only meant to explore his very understandable motives in light of my own decision to stay put.  I'm sorry to see him go, and I hope someday he and I are sitting on the boards of each other's companies! In the meantime if anyone in San Francisco reads this blog, you better get in touch with this guy now before he gets too connected to have time for you!

Friday, July 1, 2011

Update On the New Company I'm Starting

Back in January I announced my plans to start a new company. I had a lot of nice people contact me to wish me luck or to propose collaborations, so in case anyone is interested, here's how things have been going!

I spent a lot of time brainstorming various business ideas. One of the best things I did was take a train up to Pennsylvania to meet with one of my role models, angel investor and renaissance hacker Gabriel Weinberg. He strongly encouraged me to pursue the solo founder route and also helped me narrow down my list of ideas to 3-4 stronger candidates. He also really encouraged me to start building things, one after another, and keep learning: this process would very likely lead me to an interesting business (vs. trying to create an elaborate business plan and sink years into just one product). I also had several people pitch me on their own cool ideas.

By the end of this process I was overwhelmed! I was really surprised by what helped: I made a mind map of all the things I was considering working on. Forcing myself to create a visual taxonomy of ideas made something very clear which I had not been conscious of. I learned that I'm only interested in building products where:
  • I can charge money up front (vs. things that depend on advertising at scale) 
  • There's a chance to learn about new technology, or challenge my technical skills in some way
  • The problem I'm solving is something I can be passionate about
Those are super obvious criteria but I had not laid them out ahead of time, and I had put too much emphasis on the first one at the expense of the last one. Now I think all three are of equal importance.

I spent a couple of months working seriously on two of my ideas. One of them I bailed out on after realizing I didn't care enough about the problem. The second one I have postponed for awhile, because it's a video game, something very cool that I haven't seen elsewhere in the market, but I'm not sure how interested I am in the games industry. The game was very exciting to work on because of the technology involved (I used all kinds of awesome HTML5 goodness like the ImpactJS engine and websockets, and created a RailsConf tutorial based on what I learned, which someone translated into Russian!). But I was less enthusiastic about the product as a full-fledged business.

A couple of months ago I met Tom Ainsley, an entrepreneur based out of Baltimore's Emerging Technology Center (ETC). We became friendly through various tech networking events like Ignite Baltimore, and also because we're both members of the ETC's ambassador council. He had a great idea for a product that hit all three of my criteria. I don't want to say what it is yet, not because I believe in keeping ideas secret or staying in stealth mode, but because I want to have the business fully up and running for awhile before we publicly launch it. Whatever minimal "social media juice" I have I want to save for that day! Check out "Don't Launch" for an explanation of this strategy.

Besides thinking it was a good idea, Tom brought something to the table that almost nobody in his position does: he had already had a contractor build a prototype, and he already had paying customers for that prototype. Most people who pitch new web business ideas to potential cofounders or to angel investors have not put any capital into their idea (like Tom did when he hired that contractor) and as such they don't seem very "for real". Also, many have a lot of unexamined assumptions about how the idea will make money (something that's very obvious for Tom's product).

You can create the "Tom effect" for yourself without spending a lot of money, by the way. I recommend you outsource development of your prototype idea using Derek Siver's excellent guide. You might also consider teaching yourself to code something. Either one of these things is a way to prove you are "for real". Here's more advice about how to "earn a cofounder".

Tom and I spent some time discussing the idea and getting to know one another over beers at the Charles Village Pub, and eventually we decided to go into business together! I'm rebuilding his prototype as a minimum-viable product now, using Rails and running everything on Heroku's awesome new Celadon Cedar stack. I don't want to say more about the product right now publicly, but if you meet me in person I'd be glad to give you more details!

I'd still like to try being a solo founder some day, but in this process I've learned something very important: as passionate as I am about all facets of entrepreneurship, I'm most interested in technology development. What gets me most excited and engaged is using technology to build things that solve real problems. So for now I'd like to specialize in being a CTO/technical co-founder. That seems to be a sweet spot for me. I'm grateful to have teamed up with a talented businessperson like Tom so I can focus on the most personally meaningful work.

I will be posting more regular updates as things progress, so stay tuned!