Larry Price

And The Endless Cup Of Coffee

The Lean Startup

| Comments

If you cannot fail, you cannot learn.

The Gist

The Lean Startup by Eric Ries explains how Lean methodlogies are not only meaningful for startups, but can also be used to create innovation within large organizations.

What I Think

If I had a nickel for every time the word “entrepreneur” showed up in this book…

Besides that, this book is highly insightful with many great examples of companies, small and large, that have built great products using Lean processes.

Part of what makes this book readable is the credibility of the author, a founder of several startups who has seen failure and success. I wasn’t convinced that I would enjoy this book until I read Eric’s story about IMVU’s initial failures and how those failures were overcome. I won’t spoil too much for anyone currently reading the book, but IMVU does eventually figure out what customers want, thanks in no small part to rethinking the way that the company develops software.

The majority of this book focuses on creating a minimal viable product. Creating an MVP is difficult from a developer’s perspective, and the author touches on this quite a bit. Developers don’t like to release products that may contain bugs or may not contain all the “essential” features, but an MVP is not about feature-completeness, it’s about getting the product to users as quickly as possible to accelerate the “build-measure-learn” process.

Once again, I’d like to stress that the real-world experiences described in this book are what makes it so convincing. Stories about IMVU, Intuit, and Toyota makes these concepts seem obtainable for a company of any size.

Who Should Read This

You should read this if you’re not sure how to get your company thinking about Lean processes. You should also read this if you want to eliminate waste on your project and learn how to get the most out of customer feedback. Open mind required to teach old dogs new tricks.

Using Sqlite on Heroku

| Comments

Or rather, “Not Using sqlite on Heroku.”

Heroku does not support sqlite. That doesn’t mean we have to stop using sqlite in development, but it does mean we need to put in some workarounds to support our deployment environment. The rest of this article will use ruby and Sinatra.

Assuming you have a heroku app deployed and you have sqlite already working locally, this only takes a few steps. First we need to add a SQL database to our heroku app. From the project directory, we’ll add the heroku-postgresql addon to our app.

1
$ heroku addons:add heroku-postgresql:dev

The dev piece of this command tells heroku we want the small, free database. This database supports up to 10,000 rows and has a 99.5% uptime. Best of all: it’s free. Other options have you pay $9/mo for 10,000,000 rows or $50+ for Unlimited usage. I recommend you start small.

Hopefully you got some success statements after adding heroku-postgresql. They should have included some new environment variables, which are links to your new Postgres database. Record these; we’ll use them a little later.

Now we need to set up the back-end to be able to access a Postgres database when necessary. Hopefully you’re using a decent abstraction library in your app that can access any SQL database. For ruby, I find Sequel to be sufficient.

In our Gemfile, we’ve probably already included the sqlite gem for use in our local environment. We can go ahead and move that into a development block, and we need to add the pg gem to either production or the global block.

Gemfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
source "https://rubygems.org"

ruby '2.1.0'

gem 'bundler'
gem 'rake'
gem 'sinatra'
gem 'haml'
gem 'sequel'

group :production do
  gem 'pg'
end

group :development do
  gem 'sqlite3'
end

Heroku sets ENV['RACK_ENV'] to “production” for us, which means that the pg gem should get picked up the next time we deploy. Now we need to tell our app which database to use in which situation.

One of the easiest places to make this decision is in Sinatra’s configure block. I keep my local db in an environment variable called LOCAL_DATABASE_URL. This is where you use the environment variable heroku set for you when you set up your Postgres database; mine was called HEROKU_POSTGRESQL_MAROON_URL.

web.rb
1
2
3
4
5
6
7
8
9
class App < Sinatra::Base
  configure :production do
    Sequel.connect ENV['HEROKU_POSTGRESQL_MAROON_URL']
  end

  configure :development do
    Sequel.connect ENV['LOCAL_DATABASE_URL']
  end
end

This works because the default environment is “development.” Test locally, and then we can deploy.

1
$ git push heroku master

And enjoy.

Rework

| Comments

You want to get into the rhythm of making choices. When you get in that flow of making decision after decision, you build momentum and boost morale. Decisions are progress. Each one you make is a brick in your foundation. You can’t build on top of “We’ll decide later,” but you can build on top of “Done.”

Excerpt from “Decisions are Progress” in Rework

The Gist

Rework by Jason Fried and David Heinemeier Hansson is a business advice book for keeping small, focused teams without all the cruft of business.

My Opinion

Rework is my kind of book. It’s best described as business advice for hippy programmers. It’s amazing that this book describes the business practices of a real company that’s modestly successful.

Speaking of the authors of this book, they’re the guys who made Ruby on Rails, which gives them street cred as far as I’m concerned.

This is a book of proverbs. Ignore the real world. Start a business, not a startup. Build half a product, not a half-assed product. Meetings are toxic. Hire managers of one. ASAP is po:son.

When you look at it, this advice is not insightful: it’s obvious. It just also happens to be against how modern-day companies work. And maybe this advice isn’t useful for everyone; once a company stops following these rules, it seems difficult to change. The smaller and newer the company, the easier it is to avoid the issues introduced with bigger businesses.

This book talks about ideas being cheap. Implementing the idea is where all the work lies. Have an idea? Start working on it now. Find time. Go to bed an hour later. Watch an hour less of TV. Your idea is meaningless unless you actually follow through.

There’s also good advice within this book for people who are pressured to overwork. Avoid workaholics: overworking hurts the decision-making processes, so people who are working more hours are just spending more hours making worse decisions. When employees work long hours, other employees are also influenced to work longer hours. More poeple making worse decisions? Count me out. Hire people with outside lives who go home at 5: busy people have to manage their time, and will thus find more efficient ways to accomplish their work.

Who Would Like This

Interested in starting a company? In making managerial changes within your current company? In making changes to the way you work? Reading this book can help you realize that you don’t need all the modern-day business cruft to make your business a success.

Sticky Footer With Twitter Bootstrap

| Comments

Sometimes CSS is a total pain.

We encountered a major CSS problem while working on our incredible startup weekend project Ollert. We had created a footer that we wanted below all of our content. We threw together some quick HTML and got a footer below all of the main content, and it looked really good when our main content filled up the entire screen.

What about when there was very little data on the screen? Well, then the footer just floated in the middle of the page, staring at us like some kind of psychotic hummingbird, waiting to slice you up when you’re not looking. We searched online and found lots of different solutions; None of them worked. The footer just floated there, taunting us; Telling us to cry home to mommy. So we gave up on the prospect for the rest of the afternoon.

A few days after startup weekend, I found the real solution from the good folks at Twitter Bootstrap themselves. It’s pretty simple, really. Hooray for the internet!

Below is the HTML to create this effect with all the CSS styles embedded. Marked up with plenty of comments.

index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html lang="en" style="height: 100%;">
  <head>
    <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
  </head>
  <body style="height: 100%;">
    <div id="wrap" style="min-height: 100%; height: auto !important; height: 100%; margin: 0 auto -50px;">
      <!-- All your content goes inside wrap. -->
      <!-- The bottom margin must be negative the footer min-height -->
      <!-- Footer min-height is set to 50px in this case -->
      <div class="container">
        <div class="row">
          <div class="h1">
            All Your Content
          </div>
        </div>
        <div class="row">
          All your content will go inside the 'wrap' div.
        </div>
      </div>
      <div id="push" style="min-height: 50px;">
        <!-- This push node should be inside wrap and empty -->
        <!-- Min-height is equal to the min-height of the footer -->
      </div>
    </div>
  </body>
  <div id="footer" style="min-height: 50px;">
    <!-- Some sweet footer content -->
    <div class="container">
      <div class="small">
        Zowee, I've got a footer stuck to the bottom!
      </div>
    </div>
  </div>
</html>

Div tag ids such as “wrap”, “push”, and “footer” can be whatever you want. The height of the footer can be adjusted to fit whatever content you want; I found that using min-height instead of height allowed my content to resize appropriately when wrapped. Styles should definitely be moved to a css file.

Made to Stick

| Comments

Knowledge curses us, if we find it hard to imagine what it was like not to know it. And it becomes difficult to share our knowledge with others because we can’t readily re-create our listener’s state of mind.

The Gist

Made to Stick by brothers Chip Heath and Dan Heath tries to uncover why some ideas capture our imagination while others fall into the abyss, never to be seen again.

My opinion

I really enjoyed this book. I tend to read very technical books, so this was a nice change of pace. I coincidentally was reading this book while coming up with a ‘pitch’ for my recent SEP Startup Weekend project, Ollert.

Made to Stick lays out examples of really good and really mediocre descriptions of ideas. The authors then use the concepts discussed within the book to improve these ideas or discuss why they are effective. Whenever I hear people explaining real-world ideas, I start to think about the concepts laid out in this book. I’d like to be able to use these concepts to communicate my own ideas more effectively, but I have thus far found it to be easier said than done.

The book is not terribly long. This allowed me to connect all the concepts and better critique the numerous examples.

Although I did enjoy the book, a few of the sections came off a little bit like a self-help program. The concepts described in the book are ‘Simplicity’, ‘Unexpectedness’, ‘Concreteness’, ‘Credibility’, ‘Emotional’, and ‘Stories’, which “just happen” to spell out most of the word “success.” This silly feel-goodery acronym makes the cynical side of me cringe.

Who Would Like This

Anyone trying to communicate a new idea to someone else could benefit from this book. On a broader scope, this book can benefit your communication patterns in general. This is particularly helpful for professionals, who may have a difficulty expressing their ideas without getting too deep in the technicalities.