Posted on March 22, 2010 in Uncategorized by adamNo Comments »

Somewhere during the Adam-relentlessly-over-schedules-himself plan, I got behind in listening to The Startup Success Podcast. In the past three weeks I’ve dug myself out of that hole (though I notice there is a new episode in iTunes now) so here are notes from the ones from mid October 2009 to last week.

Derek Sivers, CDBaby and MuckWork

  • Only do what only you can do
  • You have to do everything you can to not take people out of the questions
  • But you need the right people
  • People should freak out about your startup idea or you should get a new idea

Renn Vara, SNP Communications

  • Just tell the truth
  • Be ready for your own success
  • Transparency is the direction things are going
  • If you find your leader’s communication strategy in the legal, marketing or public relations departments, then it will fail
  • In crisis, go to trust. Fast!
  • People will forgive quickly if you admit error. They don’t want to feel like you are hedging
  • But sometimes it makes sense to not communicate
  • Or if there is a leak for instance, maybe you want to get even further ahead of the story. Jump out and go way beyond the leak with even more information.
  • If I am not who I say I am, I am in deep trouble

Renn Vara, SNP Communications

  • People pay for products, not ideas

2010 Predictions and author, developer Wally McClure

  • Thou shalt not think that the mobile device is a scaled down desktop

Scientist/co-founder Mark Juras

  • Build not the smallest chunk they are willing to use, but the smallest chunk they are willing to pay for
  • Sometimes you have to market the idea space before you can market your product

Sramana Mitra on Positioning your Startup

  • Target people with a specific problem, not a generic solution
  • Don’t be a solution looking for a problem
  • What unfair market advantages do you have individually / as a team? Exploit them.
  • Having the right questions is important to finding the right answer

David Allen, Startups, and Getting Things Done

  • There are only two types of problems: we don’t know how to do what we want and we don’t know what we want
  • The secret of GTD is to figure out the next discrete actionable item

Carl Erickson, Atomic Object

You should just listen to this one start-to-finish. I know Carl and he is super smart. AO is one of the companies I would love to hang out at for awhile if I had a chance to.

  • If you say you don’t have the time to test, it is ironically a sign that now is exactly the time you need to be testing
  • ‘Teams of two’ is sometimes more culturally acceptable than ‘pair programming’
  • Pair programming is a risk reduction strategy.
  • You don’t have to ‘pair’ all the time, but solo code beside each other so conversations can still happen.
  • The intersection of my ignorance and your ignorance is pretty small
  • Sometimes its easier to show an ugly baby and make it prettier with feedback
  • A startup is more than just an interesting idea, its a hell of a lot of execution and the people (of course)

Seth Godin on Linchpins and Startups

No bullets here other than I’m in the midst of a lengthy Seth Godin fanboy phase so you should just listen to the whole episode for yourself.

Greg Jones, Bookkeeping Express

  • Outsource the things you don’t want to do
Posted on March 22, 2010 in Uncategorized by adamNo Comments »

One of my Se clients is a SAAS Point of Sale system and as such, printing receipts is embedded into their application. Unfortunately, Se knows how to handle things in the browsers but not things of the browser. Print dialogs and such fall into the latter category.

In this care we’re in the fortunate situation of using completely controlling the environment on the client site and can pull some tricks to make the problem of printing go away. For now, we’re only talking about Firefox on Windows (XP).

The first thing to do is install a Virtual Printer. There are a couple available, but I was pressed for time to find a solution and didn’t want to buy a commercial one so used VPrinter. I named it Virtual Printer which both describes it and is neutral enough that I could swap it out for another and not have to change any other aspects of the scripting environment — which is of course and important consideration.

Next I needed to tell Se, or more correctly the browser the Se scripts are running in about the printer. And a few other things around printing.

To this I started to use a custom Firefox profile for the scripts. This process is documented all over the place online (the magic search term is ‘firefoxProfileTemplate’) so I’ll skip it. But, what you want to do is take the profile a little bit further by creating a prefs.js in the profile which has the following:

user_pref("print.printer", "Virtual Printer");
user_pref("print.always_print_silent", true);
user_pref("print.show_print_progress", false);

These preferences for curiosity sake are part of the tweaks normally used to put Firefox into ‘kiosk mode’ and there are all sorts of interesting things to be discovered once you start exploring that.

Anyways, one thing I am not yet doing is checking the actual ‘printed’ values, so the VPrinter one might not be the best in that situation but since I am using Se-RC, any Virtual Printer that produces hackable output could be used in its place.

Posted on March 22, 2010 in Uncategorized by adamNo Comments »

I’m at a client site this week, so should likely close all the browser windows I have hanging around which means its time for another Smattering of Selenium.

Posted on March 3, 2010 in Uncategorized by adamNo Comments »

When you are running an integration test of any sort, one of the things you need to deal with is configuring the other component(s) you are interacting with; either for step 0 or later. There are a couple ways that you can deal with this, each with their pros and cons. And unsurprisingly, there is a order I would approach these.

The easiest thing to do is create a script that executes all your setup in the other system(s). This is great since it is actually running through the end user process of creating the data in the system. Good or bad, it is ‘real’. But let’s face it, Selenium tests are not really zippy to begin with and what if you have a half dozen of these scripts to run? Well, your feedback loop is getting longer and longer. I’m not sure how much parallelization of tests will even solve the setup problem. This slowness of execution is offset though by the speed of creation (when prototyping with Se-IDE).

What if you could have the benefit of using properly generated data but without the speed penalty of using a browser? Well, if you are using something like Rails you can make use of its RESTful dna. Properly constructed, creating data becomes as easy as POSTing a properly formatted string to the server and voila!, you have data. Yes, the user isn’t creating it directly, but if the app is properly constructed then all the same business rules will be triggered as well.

But using a RESTful interface still means a network hit as well as being at the mercy of another system’s state. You can get rid of that by appropriate use of a Test Double. In this case, what you likely want is a Stub. A Stub returns canned data in response to certain criteria in the application. This breaks the very notion of ‘integration’ testing by removing the integration, but lets you quickly test the ‘as long as the other end continues to send information in the format I expect’ scenario. And that is a pretty important one. You have to remember to remove the stub every so often to make sure that it is still be getting the same data though.

You could in theory jump straight to the Stub step if you choose, but I think there is value to going through all the steps. First, you verify what is being sent by the app. Next you verify that the business logic is not in the presentation layer by replacing the browser by an API and then you supercharge the script execution.

And all the while you are learning about the application you are testing — and learning is kinda the point of testing.