Pivotal Labs

Main menu

Skip to primary content
Skip to secondary content
  • About
  • Case Studies
  • Team
    • Executives
    • Locations
      • San Francisco (HQ)
      • Boston
      • Boulder
      • Denver
      • London
      • Los Angeles
      • New York
  • Community
    • Blogs
    • Tech Talks
    • Events
  • Careers
    • Lifestyle
    • Principles & Practices
    • Benefits
    • FAQ
    • Apply
  • Contact
    • Press Room
    • Press Releases
    • In The News
    • Press Kit
  • All
  • Labs
  • Standup
  • Tracker

Monthly Archives: February 2013

Tim McCoy

deLUX SXSW 2013

Tim McCoy
Thursday, February 28, 2013

delux web medIf you’re headed to Austin for SXSW join us at Adaptive Path on Sunday March 10th at 7pm for deLUX, the lean user experience party.

There’ll be food and drink aplenty, and lots of great conversation. We’ll have a short speaker program featuring:

Jon Berger, Pivotal Labs

Jeff Gothelf and Josh Seiden, Neo

Jared Spool, User Interface Engineering

Stuart Eccles, Made by Many

Following these brief talks we’ll have one of deLUX’s world famous fishbowl conversations — an action-packed audience participation verbal battle on some of the hottest topics of the day. Don’t miss it!

Please RSVP at http://bit.ly/delux2013

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Laurence Koret

Using a Raspberry Pi as an Information Radiator

Laurence Koret
Thursday, February 28, 2013

We have found the Raspberry Pi to be a cost-effective replacement for the Mac minis that we use in our office to drive TVs that are information radiators.  We use these radiators to display the build status of our ci (continuous integration) projects.  At ~$60 (Raspberry Pi, USB WiFi, enclosure), it’s 90% cheaper than using a $600 Mac mini.

Ordering

  • Raspberry Pi Model B Revision 2.0 (512MB).  We ordered from Amazon even though they charged a healthy premium ($47 vs. $35).  We did not want to wait 12 weeks for the unit to arrive (they are still notoriously backordered).
  • SB Raspberry Pi Case This case protects from static and bumping. It looks cheap and is not sturdy.  With more time we would have bought this one from Adafruit
  • USB wifi adapter
  • 32 GB SD card A 4 GB card would be adequate, but we already had this one in our server room.
  • Power adapter Again found in our server room.  Cheap USB cables may not work with Raspberry Pi, at least that was the experience of one of my co-workers.  The USB cable that comes with this power adapter works.  I wanted to make sure the same thing did not happen to me as this was also mentioned on Tech Crunch.  My working voltage was 5.022 Volts with a multimeter.  From the same article they recommend a voltage of 4.75 and 5.25 volts and “anything outside this range indicates that you have a problem with your power supply or your power cable.”
  • HDMI cable Another server room find.

Setup The Raspberry Pi is different from a home PC/Mac:  It doesn’t have a built in hard drive or flash memory chip; it has an SD card for a brain.

  • First, you need to get an operating system for it.  The best place for this is: Raspberry Pi.org. The one I selected is the Raspbian “wheezy”
  • I used the instructions found here to setup the SD on my Mac laptop.

Once the operating system was installed I booted the Pi with an HDMI monitor connected.  You will be presented with a screen as seen here from Adafruit.  This is named, appropriately enough, the Raspi – config screen.  Here I selected a few of the different options:

  • change_locale and change_timezone
  • ssh which enables ssh
  • boot_behavior – start desktop at boot
  • expand_rootfs

After rebooting, I inserted the USB wifi dongle.  This brought an antenna icon right on the desktop, double-clicking this brought up a menu which let me enter the credentials I needed to access the wireless network.

After completing the wireless install I setup from the Raspi – config screen:

  • update – this upgrades the software on the Raspberry Pi to the latest version

To boot the Raspberry Pi to specific webpage at boot follow these instructions:

Boot to browser

Accessing your Raspberry Pi without a keyboard or mouse attached

Our Raspberry Pi’s are connected to TVs with no keyboard or mouse attached; however, we needed to access the console remotely.  Our solution?  We used x11vnc combined with a VNC client so that we could access them remotely.

The following VNC clients will work:

  • Apple Remote Desktop
  • RealVNC’s vncviewer
  • homebrew’s tiger-vnc

Apple’s Screen Sharing will not work; it is unable to attach to a passwordless VNC server.

Do the following to install x11vnc which will allow you to VNC into a “headless” (no monitor, keyboard, or mouse connected) Pi from an external machine.  Install true-type fonts for your viewing pleasure.

sudo apt-get install ttf-mscorefonts-installer

sudo apt-get install x11vnc 

sudo curl -o /etc/init.d/x11vnc https://raw.github.com/starlightmedia/bin/master/x11vnc

sudo chmod 755 /etc/init.d/x11vnc

sudo update-rc.d x11vnc defaults

Here is the finished project:

Raspberry Pi working on my desk

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Christian Niles

Greatly Refined Story Editing in Pivotal Tracker for iOS 1.6

Christian Niles
Wednesday, February 27, 2013

Download Pivotal Tracker for iOS v1.6Today we’ve released Pivotal Tracker for iOS 1.6 to the App Store. With this release we’ve thoroughly refined the app to make updating stories easier and more enjoyable. While there are all kinds of refinements, we think you’ll be most excited about the following:

All text can now be edited inline

A story’s name, description, tasks, and comments are all editable inline, without transitioning to a new screen and losing context. While editing, text now wraps gracefully across multiple lines as you type.

For example, previous versions of the app provided a separate screen for creating a comment. In version 1.6 this now happens inline, right where the comment will be added. This allows you to continue to scan other comments or details about the story as you write.

Managing labels is easier

Finding and adding labels to a story is much improved, especially for larger projects. The label list now filters as you type, which helps avoid duplicate or mistyped labels. Adding a new label is also much more obvious and easy.

Moving Tasks doesn’t require a separate mode anymore

All tasks can now be moved using the standard move controls, without the need to go into “move” mode. This gets rid of a needless extra taps. To remove a task, simply swipe it and tap the “Delete” button.

Moving or Deleting a story are both more accessible

We’ve gotten rid of the separate “Action” screen, and replaced it with a pair of buttons to move or delete a story. You’ll find these at the very bottom of the story editor, rather than the old icon in the title bar.

We hope you love this release! Please don’t be shy about letting us know in our community about how we can continue to make the app better.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Miriam Ryan

Bedrocket is hiring experienced ROR developers (contract or full-time / telecommute / NYC)

Miriam Ryan
Wednesday, February 27, 2013

At Pivotal Labs, one of the services we provide our clients is helping them interview and hire. Pivotal Labs and our clients place a strong emphasis on Agile development and its many aspects: Pair Programming, Test-Driven Development, rapid iterations, and frequent refactoring.

Bedrocket Media Ventures is a disruptive media startup looking to change the way people discover and consume great entertainment in the cloud. Our platforms are not only revolutionizing the way entertainment is created and distributed, we’re also inventing new forms of interactive programming that will drive the future of video storytelling. We’re a fast-growing, venture-backed company that was founded by the co-founder of Huffington Post and the founder of multiple successful cable networks, and we’re building a radical team of creative thinkers and expert doers who are passionate about pioneering a truly new model for media.

You:

An experienced Ruby on Rails developer with strong back end capabilities who’s eager to join an innovative product team that emphasizes creative problem solving, fast iteration, and pushing the envelope with features. You’ll work closely with our small team of developers and UX team in an agile environment. As we grow our list of exciting new products, you’ll be encouraged to participate in product sessions and have a valuable role in this growing start-up organization.

Skills & requirements:

  • 4+ years experience developing Ruby on Rails applications
  • Expertise with JavaScript, jQuery, Ajax and HTML/CSS, HAML and SASS a plus
  • Responsible for implementation, customization, and integration efforts, including APIs
  • Solid object-oriented design skills and knowledge of application architecture patterns
  • Work well in a modern agile software engineering environment (with source code control, dev/stage/prod release cycle, extensive testing, and continuous deployment)
  • Identify and define integration points with third-party solutions (analytics, libraries, etc.)
  • Clear, effective, and proactive communication skills

Come work with us!

  • Contract or Full-Time
  • Work remotely from the comfort of your home, with monthly travel to New York City.
  • Relocation assistance if you decide you love New York
  • Competitive pay, with health benefits (medical, dental, vision) and equity for fulltime employees
  • Best available hardware just for you
  • Laid-back environment: jeans, plaid, t-shirts, you get the gist
  • Flexible work hours, friendly co-workers to geek out with

Bedrocket Media Ventures is an equal opportunity employer. To apply, please send your resume and cover letter to jobs@bedrocket.com.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Kris Kelly

Gemnasium offers you Security/Steroids

Kris Kelly
Tuesday, February 26, 2013

Interestings

Security on Steroids

The list of security monitoring services continues to grow. In addition to the holepicker gem and the private beta code climate service, Gemnasium is now offering "Security on Steroids."

http://sendgrid.com/wf/webmail?rp=ZTI1bGQzTnNaWFIwWlhKZmFXUTZNVEl6TkN4MWMyVnlYMmxrT2pJMU5qVTBmUWV5SnVaWGR6YkdWMGRHVnlYMmxrSWpvaU1USXdOamc1TUNJc0ltNWxkM05zWlhSMFpYSmZkWE5sY2w5cFpDSTZNVFV3TVRneE1EZzNOREo5

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Jonathan Berger

3 Challenges for Agile Design

Jonathan Berger
Monday, February 25, 2013

Software development has been revolutionized by Agile development practices, but designers struggle to adapt to the very same techniques—despite suffering many of the same challenges that led to Agile. What exactly are these problems? And how can Agilists and designers address them?

When is Design Done?

Agile development preaches “Done means Done”. When a story is accepted by the Product Owner, it’s ready to be deployed out into the world. What does “done” mean for design? Automated testing guarantees that on every story, developers will enjoy Acceptance Criteria: a concrete measure of what counts as “done”. Designers, on the other hand, rely on subjective criteria to determine when they’re done. In the best case, this means the product team—or often, the designer working alone—if only they had a partner to pair with! In the worst case this is purely subjective sign-off from the client. While agile developers have access to tools like velocity to plan their work, designers have structural difficulties in estimation, and are consequently less able to plan. Consequently, questions like “when will that feature be done?” are more easily answered by a developer than a designer. That’s not because designers are less responsible than developers. It’s because it’s harder to know when you’re done with design—but that’s of little comfort to anyone who needs to budget time and resources to manage the project. Because Acceptance Criteria—or an answer to the question “what does ‘done’ mean?”—for design is in different units of work than “done” for development, there’s an impedance mismatch in coordinating between the two. Breaking design into units of work with more discrete Acceptance Criteria helps coordinate design work with development work.

What’s Wrong with the Deliverables Business?

Agile Developers ultimately deliver user-facing code, but designers output thinking: solutions to design problems, traditionally expressed via mock-ups or assets. How should the two interact? Should design stay an iteration ahead of development? What does it mean when a developer discovers an interaction problem in a design they’re implementing? Should they stop work? Developers are the tip of the spear when it comes to experience design: in the process of building software, they’re often the first people ever to use it. Sometimes this means they uncover interactions on UX problems that the designers didn’t anticipate. If the necessary design changes cascade into other work, what should the designer do: stop work and refactor (and fall behind), or come back to it later?

Furthermore, it can be difficult to determine how much design is required for developers to complete their work. The best design deliverable is the Simplest Thing That Can Possibly Communicate the Design Solution, and this can vary from team to team and design problem to design problem. Under ideal circumstances, an experienced designer may be able to reasonably estimate how long it will take to 1) solve the design problem, 2) communicate the solution, and 3) iterate on the problem / solution once it’s usable and testable as working software. But. BUT! That’s asking a lot. And it absolutely shreds the question “how far ahead should design stay of development?”.

Why do Designers Feel Unwelcome in Agile?

Let’s take stock: we’ve got gallant developers, accurately estimating stories and delivering working software, and the goofus designers, unable to tell you what they’re doing or when they’ll be done. Knowing “how much design is enough?” is hard. Knowing how much design to start with is hard. Reared in a culture that prizes individuality, that venerates Rock Star Designers, that applauds Working On It Til Its Done, that publicly shreds less-than-perfect work in Crit as a rite of passage, that (with the occasional exception) is alien to the notion of sustainable development—it shouldn’t be surprising that designers are uncomfortable. That starts to lead to discord on the team: designers hating agile; feeling rushed, feeling like they don’t get the benefit of iterative design; feeling that once they touch something, they don’t get to go back and refactor it. Let’s throw in a bit of rah-rah agile ideology, a few jargon-y IPMs and retros, promises that “we’ll come back and refactor that later”, and the creeping suspicion that this whole Agile thing is nothing but smoke, mirrors, and Kool-Ade. Is it any wonder that designers can be hostile to agile?

What can we do? Looking to the example that Agile Development sets, we can see several concepts that may help: Acceptance Criteria-delimited design stories. Meaningful estimation of work for design. A culture that values Sustainable Pace. Translating these ideas from development to design may do more than just help designers work more comfortably in Agile environments—it may help us practice better design.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
James Somers

What was the most frustrating thing I spent time on this week? Oh yeah…

James Somers
Monday, February 25, 2013

There was a feature to generate some documents and email a zip file on a weekly basis. After a lively discussion, it was decided this was the MVP to solve the need which only impacted one end-user performing business administration tasks. My MVP would have been minimizing maintenance with an index page that the zips gets dumped to, but it was decided we didn’t want to store the files.

It was actually relatively simple to implement and we were leveraging code to do the document generation for us. We tested zipping up 500 documents, sending it and all ran within specifications.

First week in production, the user was reporting that it didn’t arrive. Instantly, ideas will rush in to your head about the common suspects for a scheduled email task failure. It was none of them.

After a good deal of digging around and rerunning the job on a staging server with sporadic failures and annoyingly no backtrace, we ran some queries and discovered that there were over 1000 documents that needed to be generated. Our email attachment limit budgeted for 400. However this was not the problem, but it did lead to the next discovery.

Deep within the document generation code, Ruby Tempfile was being used and the files were never being closed. The OS borked at 1024 open file handles and worse, part of the document generation Kernel.system’ed out which made tracing the proper point of failure difficult. The code actually silently failed until later in the process. Half a day on a refactor.

Running the job on development through Resque, it worked a charm. We cherry picked the fix up on to staging and reran the job. Failed. Head in my hands, I couldn’t help but be mildly amused. Our workers apparently didn’t load the zip library by default in any environment except development. I’m sure there’s a good reason for this, but it was unexpected given that it worked on development. With a simple require directive, the job was on the way and worked.

Reflecting on this, again what failed me were not the task being complex, but my assumptions. The key one being that there weren’t going to be more than 400 documents to generate – however on the first run there was going to be many more than subsequent weeks as one of the criteria for document generation was that for some large set of objects there were documents relating to it which hadn’t yet been generated.

Assumptions are a good thing. They’re useful heuristics that allow you to keep just enough in your head to make reasonable calculations. Just be prepared to peel them back methodically when you’re debugging.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Graham Siener

[Metrics] Do you need that feature?

Graham Siener
Monday, February 25, 2013

The hardest part of product management is deciding which features NOT to build, especially when they seem like great ideas.  When you have a product in the market (or are getting it out there), you want to spend your engineering team’s time delivering value to your customers.  With this logic in mind, building anything has a cost associated with it (and more importantly, an opportunity cost).

So let’s say your marketing team advocates implementing auto-login for customers by following links in their email.  Sounds useful, but certainly has some security and privacy concerns.  Surely someone’s built this already?  One quick Google search later reveals a promising start.  You start writing the story and prioritize it in the backlog.

But wait — do you need that feature?  Product management by “wouldn’t it be cool if…” happens, but I wouldn’t recommend it.  Instead, channel your inner-lean and ask how you could validate that this idea has merit.  I.e., what hypothesis would this feature prove, and is there a way to test without building it?

In this case, I’d create an assumption like: “Customers aren’t re-engaging with our site from emails because they can’t remember their sign-in credentials.”  That leads to a hypothesis along the lines: “Customer engagement should increase by including automatic login in all emailed links to our site.”

This thought exercise points us at a conversion to track — how often do customers follow an emailed link and log in?  Luckily we’ve already implemented transactional email funnel metrics, which look something like this:

Hmm.  I see that we’re getting a 33% open rate on transactional emails; potentially good given the type of product.  Of those that view, 26% clicked to follow a link.  30% of those that followed a link weren’t part of the last step (visited site) because our tracking cookie didn’t recognize them; they didn’t log in and hence didn’t stitch their session into this funnel.  These numbers don’t scream for an auto-login feature, do they?  Sure, we’re churning 42 customers between click and login, but that only represents 2.6% of the customers that received emails.

Given that we’ve fit auto-login into the universe of engagement, I would look to prioritize any feature work could deliver a larger lift to this KPI.  Perhaps you could build more targeted emails that drive more customers to open their email?  A 16% bump in opens will have a larger effect than a near-impossible bump on click-to-visit conversions of 30%.

While far from perfect, data-driven product management will force you to evaluate any new feature from the context of increasing customer value on some axis.  In this example we were fortunate to draw upon historical email funnel metrics.  This won’t always be the case, but I encourage you to find cheaper, quicker approaches to [in]validating the merit of an idea before it becomes a feature story.

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Brian Butz

02/25/13: 7304.84 Days of Ruby

Brian Butz
Monday, February 25, 2013

Interestings

holepicker

http://psionides.eu/2013/02/18/pick-holes-in-your-gemfiles/

Find gems with vulnerabilities

  • 0 Shares
  • Share on Facebook
  • Share on Twitter
Colin Shield

Database.yml files using Chef Server

Colin Shield
Sunday, February 24, 2013

I’ve been spending an awful lot of time lately deploying rails applications using chef server. I’ll be blogging some of the more interesting ways we’re using chef server. One of the most useful features of chef server is search. This allows you to write recipes that reference nodes in your stack that match particular roles. In this post I’ll describe how we use search to generate a rails database.yml. This becomes particularly useful when creating and deploying the same rails application to multiple stacks.

First of all we added a simple file read in our database.yml file in place of the connection details.


<% if File.exist?('/opt/apps/fbfcats/shared/database_include.yml') %>
<%= File.read('/opt/apps/fbfcats/shared/database_include.yml') %>
<% end %>

In our chef project we have a recipe that searches for the database server node and writes out the database_include.yml file using a template resource.


master = search(:node, "role:db_master AND chef_environment:#{node.chef_environment}").first
template "/opt/apps/ms/#{app_name}/shared/database_include.yml" do
  owner "gemini"
  group "gemini"
  source "database_include.yml.erb"
  mode "0600"
  variables(:hostname => master,
  :database_name => "fbfcats" + "_" + node[:rails_env],
  :user => 'fbfcats',
  :password => 'mittens',
  :rails_env => node[:rails_env])
end

Finally the template.


<%= @rails_env %>:
  host: <%= @hostname %>
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: <%= @database_name %>
  pool: 5
  username: <%= @user %>
  password: <%= @password %>

 

  • 0 Shares
  • Share on Facebook
  • Share on Twitter

Topics

  • agile (778)
  • rails (113)
  • testing (86)
  • ruby (83)
  • ruby on rails (70)
  • jobs (62)
  • javascript (53)
  • techtalk (44)
  • rspec (38)
  • activerecord (29)
  • productivity (29)
  • gogaruco (29)
  • ironblogger (29)
  • git (28)
  • nyc (27)
  • rubymine (25)
  • mobile (21)
  • cucumber (20)
  • bloggerdome (19)
  • process (19)
  • pivotal tracker (19)
  • design (18)
  • jasmine (18)
  • ios (18)
  • webos (17)
  • objective-c (17)
  • android (16)
  • palm (16)
  • "soft" ware (16)
  • fun (15)
  • tracker ecosystem (15)
  • ci (15)
  • cedar (15)
  • rails3 (14)
  • performance (14)
  • gem (13)
  • bdd (13)
  • selenium (12)
  • css (12)
  • goruco (12)
  • bundler (12)
  • tdd (12)
  • meetup (11)
  • railsconf (11)
  • nyc-standup (11)
  • capybara (10)
  • mac (10)
  • mojo (10)
  • chef (10)
  • rubygems (9)
Subscribe to Community Feed
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. →
  • About
  • Case Studies
  • Team
  • Community
  • Careers
  • Contact
  • Labs
  • Events

Contact Us

contact@pivotallabs.com
+1 415-77-PIVOT
TwitterLinkedInFacebook

Pivotal Tracker

Tracker is the award-winning agile project management tool that enables real-time collaboration around a shared, prioritized backlog.
Visit pivotaltracker.com >