startups search for a business model

Steve Blank is probably most well known for this picture about embracing change:
Customer Development

Observations about Silicon Valley:

  • $500K is the new $5M
  • Seed Funds are providing entrepreneurial education
  • Customer Development / Lean Startup adoption:  We are all collectively getting smarter at a scary rate.

99.7% of all companies are <500 employees and employ half of the people in the country. In contrast, a scalable startup is designed to grow big and it typically needs risk capital.  (Note: venture capital was originally called “adventure capital.”)

Your job as an entrepreneur is to search for a scalable and repeatable business model.  Then build a business around it.  Founders depart before the company grows to a large business:

  1. Search
  2. Build
  3. Grow

No business plan survives contact with customers.

Startups search and pivot.  Small and large companies execute.

Startups should focus on:

  • metrics, not accounting.
  • customer validation, not sales.
  • customer development, not product management.
  • agile development, not engineering.

Lean startups use agile and customer development to find profits.  (A high percentage of company founders come from dysfunctional families, but that’s another topic.)

Why Accountants Don't Run Startups
View more presentations from steve blank.
Posted in general | Leave a comment

beyond agile development

Kent Beck updates the agile manifesto for startups and for what has been learned over the past ten years at at Startup Lessons Learned Conference.

Agile Manifesto

10 years ago the agile manifesto was a step forward, but it was a least common denominator of the people at the meeting.

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Individuals and interactions over processes and tools

There was a day when people thought that if you had the right processes and tools, you could get any monkey to build the software, and it would come out exactly the same. As it turns out that is true. However, people matter. “Individuals and interactions” make a difference in creating the right software. However, valuing “individuals and Interactions” optimize the performance of the individual. Team vision and discipline is a more effective value. It’s not how good a job I can do, but how good a job we are doing.

Working software over comprehensive documentation

People used to believe you didn’t have to talk to people, you just had to open a book and read about it, but the docs were always incomplete and often out of date. Documentation is not as good as having working software, but the goal should be validated learning, which often doesn’t actually require any software at all. In a startup environment, it is not that you don’t know how to write the software — you can’t measure success by working software. In a startup, you start out with “almost impossible assumptions.” It is always the crazy ideas that work out that are the highest values. To succeed, you have to find out which ideas are really impossible and which ones will work out. Working software is a way to answer those questions, but it is better to create a way to learn before you have working software.

Customer collaboration over contract negotiation

Customer collaboration was a big step forward, but in a startup you don’t yet have customers, so what do you do? Focus on customer discovery.

Responding to change over following a plan

Old adage: “Plan the work. Work the Plan” Responding to change was a big step forward. It was not enough to follow the plan because things change too much. However, in a startup nothing is changing yet because nothing is moving yet. You need to create momentum. You need to focus on initiating change. If you don’t initiate change in a startup, you aren’t going anywhere… you need to be moving.

Lean Startup Manifesto

  • Team vision and discipline
  • Validate learning
  • Discover Cusotmers
  • Initiate change

The process “build -> measure -> learn” instead should be:

learn -> measure -> build.

Posted in general | 3 Comments

lean startup keynote

Brief notes on Eric Ries’ keynote at Startup Lessons Learned Conference.  If I can keep up I will live blog the conference.  Eric says: “I do not want your undivided attention.”  So here goes.  Twitter hashtag is #sllconf and the event is being live streamed.

Whenever you accomplish something, you don’t get a gold star, or a raise or congratulations, you get to survive to the next stage. As with all visionary customers, we ask not why aren’t there more of you, but what is wrong with you?

Entrepreneurship is awesome. The magic thing we call software is disruptive, but it creates opportunity.  However, entrepreneurship is not the best way to make money. Instead the goal of entrepreneurship is to:

  1. Change the world
  2. Build an organization of lasting value
  3. Make customers lives better

“A startup is a human institution designed to deliver a new product or service under conditions of extreme uncertainty.” Eric takes direct inspiration from lean manufacturing movement.  It about “validated learning about customers”  The unit of progress in a startup is learning.  The goal is to minimize this loop:

build -> measure -> learn ->

Fail fast doesn’t mean the company should fail fast. We want the bad ideas to fail fast.

Some questions that Eric is interesting in answering today…

  • What does progress look like in a startup?
  • How do you know when it is time to pivot?
  • What is the minimum viable product?
  • Do Lean Startup methods scale?
  • What is the role of design?
  • How do we reconcile vision and customer data?
Posted in general | Leave a comment

lean startup methodology

I enjoyed watching this video interview of Eric Ries talking about “lean startup methodology.” It sounds a lot like agile development to me.

“a failure of an idea doesn’t mean the failure of the company”

I’m honored to receive am IMVU scholarship to Friday’s Startup Lessons Learned Conference. I am excited to spend time with a group of entrepreneurs who are pursuing (or at least interested in) this methodology. I have been hearing bit and pieces of this, but only recently did I realize how aligned it is with my own practice.

I am experienced in agile development methodologies and have been working to apply similar lessons to business development for both my consulting company, Blazing Cloud, which pays the rent, and my startup company, Mightyverse, which aspires to change the world by enabling cross-cultural and cross-language communication.

“The simplest thing that could possibly work” is a mantra of agile software development. Applied to my consulting business, I have deferred many of the trappings of a business until it was painful not to have them. For a small consulting business, it is easier: my metric of success has been whether I net a profit on each job. Applied to Mightyverse, it’s more complex since we’re investing in product development for longer-term revenue growth (along with non-monetary goals). Deciding to release the website and the iPhone app before we had something that we considered a minimally viable product was a tough decision, but we made it because we recognized that we needed more than software to have a viable product. With the website and mobile app out in the world, we can start building a community of contributors before we have a complete solution for either direct participation or consumption.

The key element of agile or “lean” methodology is to understand why you are doing what you do. When you understand your motivations and how you expect your actions to lead to your desired outcome, it can lead to unexpected and counter-intuitive decisions that are nonetheless effective.

Posted in general | Leave a comment

strong statements about testing

I enjoyed “strong statements” in Shannon Behrens’ SF Ruby talk tonight. I didn’t agree with all of them, but not vehemently so. I do strongly agree with the following.

  • Not all tests have the same value
  • Some tests don’t provide enough value to justify their existence
    • perhaps they take too long to write
    • perhaps they are too brittle
    • perhaps they test things that you don’t actually care about
  • Blackbox testing the behavior of code by using its public interface is much more valuable than whitebox testing its implementation
  • A strong emphasis on testing is no substitute for good design (attributed to Yehudah Katz)
  • Not testing error handling code is as bad as not writing error handling code
    Exploratory testing by someone else is crucial

Shannon states that “integration tests have more value than unit tests.” I would say instead that some unit tests that rely heavily on mocking have a high risk of not achieving their goals, and in these cases integrations tests have more value. (For example, I typically test Rails controllers through integration tests rather than unit test.) However, when a class is relied upon as the foundation for my app, unit tests for that class are more valuable than integration tests because they help me find and fix bugs faster than the integration tests. But I agree that integration tests are essential.

Posted in general | 3 Comments

test first teaching, path to TDD

Over the past year I’ve taught about a dozen sessions of Ruby language or Ruby on Rails programming classes. I’ve been using a combination of presentation, live coding demonstration, follow along with irb (Ruby’s interactive scripting environment) and test-first teaching exercises. I’ve reflected on what works well and experimented with curriculum and teaching style modifications for the sections where students struggled. I’ve found a sequence which works very effectively. I believe it could be applied to teaching any programming language, and perhaps to teaching anything.

  1. Conceptual Overview A presentation of the concept: why it is important, what it can do, how it works. How it fits into the bigger picture (if applicable). Pictures and diagrams are great here.
  2. Experimentation (Play) My goal in this section is to create a feeling of play… at best, with grown-ups, I think I’ve achieved a sense of experimentation or, perhaps, what the Talent Code calls “deep practice”
  3. Demonstration of a Real-World Example A live coding demonstration that solves a real problem. I often use this as an opportunity to test-drive the example, which illustrates the concept from two angles: the test (expectation) and implementation.
  4. Simple hands-on exercise Test first teaching examples where the student is given a test that fails and they have to apply what they just learned to write code and make the test pass.

This was the context of my talk tonight at the East Bay Ruby Meetup. I talked about teaching methodologies, demonstrated a test-first exercise, then talked about moving on to test-driven development.

Slides posted:

Posted in general | 2 Comments

great ideas from awesome women

It was amazing to have lunch today with Angie Chang of Women 2.0 and Bay Area Girl Geek Dinners and Jen-Mei Wu who is currently working with me at Blazing Cloud.
Angie, Jen-Mei and me
Since I’ve been working with Jen-Mei, she has spent most of her time at Honk and it was a treat to spend some time talking about our different experiences as software developers and swap stories of running our own businesses. We all brainstormed techniques about how to support more women as engineers and as founders of companies.

We talked about pros and cons of having a specific social network for women. Angie pointed out that a lot of networks and resources already exist — can we leverage those? Is it just that women don’t take advantage of what is available to them? Does everyone know how willing successful women (or really most people) are to have a conversation with someone seeking advice? Do people know how you can really go far if you are just willing to ask for what you need/want?

We all had read the book Women Don’t Ask and Angie had the idea to give one to every attendee at the next Girl Geek Dinner if she can find someone willing to sponsor the initiative. I think that would be just the thing to have an impact.

I talked about my hopes and aspirations for the SF Ruby Workshop project. I am so excited by the volunteers who are stepping up to lead workshops this year. Having read The Starfish and the Spider: the unstoppable power of leaderless organizations and inspired and encouraged by the men and women in the Ruby community, I believe that we can really make this thing self-replicating, provide opportunities for new leaders while drawing more women into (or back into) software development. I feel like there are some great stories that should be told and that we could do a better job of getting the word out. Angie suggested that post asking if anyone is interested in taking on social media / marketing. Doh! so… any one out there wanna help? It wouldn’t take a lot of work to make a big difference!

Lots of other ideas percolating from today’s meeting. It is inspiring to be in the company of other awesome women pursuing similar goals.

Posted in general | 2 Comments

one year of sf ruby

One year ago today, I wrote about attending my first SF Ruby meetup, where I met Sarah Mei, the only other woman in attendance. I wrote then that I hoped someday “to attend a meetup where I don’t personally double the number of women.”

I am pleased that my hope has come to fruition: I don’t think I have been at another Ruby event since then when I was the only or one of two women. My very next Ruby event had 6 women (out of 200) with as low a percentage, but Sarah and I decided to make a difference by teaching Ruby on Rails to other women and ever since I’ve enjoyed the company of many strong, technical women in the Ruby community.

My other remark about gender, one year ago today, was that “the guys treated me as more of a geek than a girl.” With an occasional high profile exception, the guys in the Ruby community are pretty welcoming toward women. We’ve never had to work very hard to recruit volunteers to help with workshops. I’ve often remarked that my experience this past year in the Ruby community is dramatically different than my previous experience in my ability to create substantive change with my efforts.

For the past twenty years I have worked toward gender balance in the field of software development. I’ve worked to recruit and hire women where I work and spoken to women’s groups and sought to encourage younger women to pursue careers in software development. In the past, my male colleagues have always encouraged me and told me that they were impressed by what I was doing. I always appreciated that support. This past year, I noticed a differences. Guys would come up to me and say “how can I help?” Men I never met in person would email me and say “can I paypal you some money to support what you are doing?” It is a whole new world. This different attitude set the stage to train over 200 women in the SF Bay Area in Ruby on Rails in less than a year. Together we created an environment where more women how up to the geek meetups and more women give presentations and there are more events for all genders. In 2010 we have a new initiative to make the workshops self-sustaining.

I believe that a lot of what makes the difference in the Ruby community is that it is an open source community. People are used to just pitching in where help is needed. People are used to giving back to make thing happen. But most of all what makes the difference is individuals who are willing to step up, who are willing to take the time to do work behind the scenes, who will do small, meaningful or seemingly trivial bit of work to make things happen. You know who you are and you are awesome.

I am proud and honored to have been part of the SF Ruby community for the past year. I look forward to finding out what happens next!

Posted in general | Leave a comment

recognizing leadership on ada lovelace day

In honor of Ada Lovelace Day, I’ve chosen to highlight Amy Chen and Melanie Archer. These two amazing women have agreed to lead the next SFRuby Outreach Workshop for Women. They are each strong developers, but I also want to acknowledge their ability and willingness to take on a leadership role.

Melanie Archer attended the first workshop in June ‘09 and has volunteered ever since. Her main professional focus is front-end HTML, CSS and Javascript, but she has worked consistently to help make these events happen, taking on some of the critical behind-the-scenes jobs that glue an event together. I’m so excited that she has agreed to take on a leadership role.

I got to know Amy Chen through her volunteering at the most recent worshop. She agreed to “shadow” me during this event in preparation for leading the next workshop with Melanie. We got to talking about Javascript and I mentioned how I did test-driven Ruby, but had never done that with Javascript. She said she had done a lot of work with Selenium and somehow we hatched the idea of an evening workshop. At the last minute I turned it into a fundraiser since the February outreach workshop didn’t break even. She hadn’t taught Selenium before, nor given a hands-on training in this format, but she stepped up. I had so much fun in one of her prep sessions creating my first-ever test-driven jQuery… so cool. She even volunteered to teach a crew of interns I was training that week, since I had come to the realization that Javascript, HTML and CSS were as essential a foundation as is the Ruby language and SQL to a Rails engineer. The Selenium workshop was a success and I look forward to seeing Amy join Melanie in leading the next Outreach workshop.

Posted in general | 1 Comment

the truth about mobile development

For my talk at LA RubyConf, I decided to share some truths about mobile development, in general, rather than focusing only on how it is different with Ruby using the Rhomobile platform.

The truth is that mobile development sucks. With Ruby, sometimes it sucks less. The unavoidable problem is that at the end of the process you still need to get your app on the device using cruddy development tools reminiscent of the 1990s. I likened mobile developers to people who like to get tattooed. Perhaps some are thrilled by the painful process, but most endure it to achieve the end effect. Mobile applications are compelling, wonderful expressions of some practical problem solved that you can carry around in your pocket. Despite the often frustrating and stupid steps that I need to follow to get things done, I love what I can build as a mobile developer.

Rhomobile is steadily normalizing some of the process to smooth out the cross-platform differences using tools and techniques from Ruby, which I discussed at the end. My talk reviewed the development process backwards, starting with the user experience, reviewing what it takes to distribute the app and build it for distribution, then finally reviewing the code (posted on github). I posted links to the app for iPhone and BlackBerry.

The key point on the user experience is that mobile apps should be different on each device, but those differences should be superficial. It is essential that your app use the common UI patterns that users of that device expect, but the core of your app has to do with the problem you are solving and that should be consistent across devices. For the RubyConf app, those device-specific differences were the navigation. On iPhone, there’s a tabbar across the bottom. On Android, there is also a tabbar that has a slightly different look and is positioned across the top. On BlackBerry, these navigation options appear in a menu. The user of each device would find the navigation expected, since it is consistent with how other apps look and feel on that device. Meanwhile, most of the screens are identical across the app. I didn’t discuss the map implementation which is almost the same across devices — of course, it always looks like a map with markers, but the markers have a different visual representation and the pan/zoom controls are different.

The other point about user experience, which is not expressed by the RubyConf app, since it is really a work-in-progress, is that your branding should be consistent across platforms. Mobile apps have more in common with web applications than they do with desktop applications. On the web, your brand is integrated into your application UI. I expect that to be the common pattern for mobile applications as well.

The process of building, signing and distributing the app is quite different cross-platform. It is really hard without actually doing it to get a feel for what it takes and how long it takes to do this on each platform. The documentation is scattered and hard to follow even for a single vendor. One of the goals of my upcoming book is to pull together this information and help people understand what is common across platforms and what is consistent. In this talk, I gave a lightning-speed overview of the process on iPhone, BlackBerry and Android.

The slides for the talk don’t really stand alone, but I am posting them here for reference:

Posted in general | 1 Comment