TechPint Startup Summit 2015

I recently attended the TechPint Startup Summit at the Cleveland Improv. This is the second TechPint event that I’ve attended (first was Industry Summit last fall… excellent event). Admittedly, this post is more for me than you (the vast number of readers I have… sarcasm). This post is a collection of my notes from the session, and with limited commentary.

Why did I attend?

I have a small business that’s been running at low RPM’s for about 3 years. We’ve never truly launched, and have had ebs and flows of profitability. Our user community continues to grow, and we’re currently pursuing the launch of our web platform, in tandem with a refresh of our mobile apps. On top of that, I’m a product manager at a Cleveland-area Healthcare Analytics company. Given those roles, I felt it would be valuable to immerse myself in a setting that was dense with entrepreneurs to help expand my thinking as a product manager and entrepreneur.

Another disclaimer: this is not meant to be a holistic review of the overall summit. The whole thing was pretty damn fantastic, but there are certain pieces that stood out to me. This post is a collection of those specific topics.

The sessions

Seed Funding for the rest of us : Mike Belsito (@belsito)

Build your dream team

Mike talks about the “hacker, the hipster and the suit.” The hacker is your key tech person, the hipster is often times your designer, and the suit can be anyone that’s able to effectively express the vision of your business, why it’s valuable, to whom, and what makes it stand out in the crowd.

The investor team

Some key points made here:

  • Look beyond your geography, use
  • When approaching the investor team, know your numbers. These are the numbers about your business.
  • Commit to the process of funding. Don’t dabble. Go for it, otherwise you may be viewed as a troll / information-seeker that’s wasting the time of others.

Jake Sigel

This session was a surprise for me. I was expecting the entire summit to be founders and funders. Sure, Jake is a founder (a few times over), but his talk was more about organizational behavior tips and tricks that he’s found useful. Here’s a handful of them:

Pen and paper meetings

He requires his teams to attend meetings with zero tech, beyond a pen and paper. Meetings are for deciding something that is too costly / risky to do without have a face:face. The only person allowed to have a laptop is a scribe. If you’re not engaged, then leave. Meetings are expensive. Be engaged.

I have to say, I don’t adhere this one. I’m fortunate to have Confluence, Google Docs and Trello at my disposal. I prefer to centrally capture my thoughts so they can be augmented by others. I also prefer centrally capturing action items / deliverables for everyone to rally around. Having your own little personal journal may be great for the way some of you synthesize information, but it’s not for me. I want others to see what I’m thinking, how I’m synthesizing it, so they can contribute for the overall greater good and help the whole team make the best decisions.

No internal email

This one kind of blew me away, but I love it. Email gets so clogged up, people use it as a to-do list, makes me insane. As a result of this point being raised, I’ve since changed all of my email clients to be “manual pull,” no more pushing anything to me. I’ve noticed my concentration and productivity have improved substantially since doing so.

No facebook

I dig this one. I don’t use facebook on my day-gig machine. It’s pretty much an early morning, late evening, and on the toilet (sorry, but it’s the truth.. you know you do it too).

Similarly treat everyone differently

I loved this point. This seemed to be his approach to being flexible and supportive of the needs and goals of his teams. The key here, though, was to treat EVERYONE differently, not just some people. There can be no “exceptions to the rule” so to say. I support this approach. My top objective is a high performing team, whatever that means for the team (no fixed approach to that, in my opinion).

Take a lap

Apparently he says he stole this concept from Steve Jobs. Well, I’ve found it useful. Though, my “lap” is a sometimes a ping pong match, and sometimes an actual lap. Both activities have certain benefits. Though, I’ve noticed the “lap” affords more collaborative time between the individuals involved in the lap, and more time for synthesis if going solo.

Ted Serbinski – @techstars

Book: “4 disciplines of execution

Get a true team dashboard

Ted reminded us all that many teams create dashboards that really don’t show them something meaningful for their goals / business. I agree. I’ve created and seen others created dashboards in the past (and recently) that were pretty much a collection of “stuff that’s easy to measure.”

He also enumerated a pretty simple chain of questions to help you stay focused on achieving your goals;

  1. What’s our goal?
  2. I’d add “Why does this goal matter?”
  3. How do we we’ve achieved it?
  4. What can we do every day / week to achieve it?

I think this is a vital element of standup meetings in Agile teams (I’m beginning to incorporate this into standups).

Guy Turner@guyhturner

One of my favorite sessions of the day. I could seriously listen to him speak for hours. Guy provided very practical advice, of which I couldn’t even begin to cover in a single blog post. Here is one point that stood out to me:

Raise 18 months of funding so you can support a “plan B”

I hadn’t really thought about that much in the past. It could be foolishness on my part, but I’ve never been very interested in pursuing funding. I’ve wanted to be completely organic in growth, and have complete control of my business. I’m beginning to think there’s some foolishness in that mentality.

Back to Guy’s point (as I synthesized it, anyway): most startups don’t think about a “plan B” when going for funding. This is a critical flaw that, as I recall, he’s seen a number of times over with various startups. Guy helped me see how undereducated I really may be when it comes to funding.

Paul Singh: The business of tech startups

Okay, this session was so densely packed with guidance that it was nearly impossible to keep track of it all. So I’m literally going to list my raw notes (maybe I’ll come back another time and actually synthesize them):

Key questions to ask about your idea:

  1. Can we build it?
  2. Do people want it?
  3. Do people know how to get it?

Take advantage of information asymmetry.

Be aware of the invisible game

Dig in and do the research on comps (know your competition!)

Notability > Credibility

Know the investors BEFORE the conversation. Don’t have the first conversation start with “so, what do you typically look for in a startup?”

Show traction, communicate it, inspire others to contribute to it

The Charisma Myth

Learn the basics of VC Economics!

Hanging an effective carrot

I’ve struggled with a few things in my professional career. One of the greatest struggles for me is reading. I will sit down with the greatest of intentions.

I’d say to myself (inside voice, of course): C’mon Pat! We’re going to have a solid hour of reading. It’s going to be so productive! Let’s do this!

I sit down to start reading, and things are going well. Then, a few pages in, I find myself unable to focus. My mind wanders on tangent after tangent, all because of that ONE sentence I read 3 pages back that got me thinking about all of the interesting related problems I’ve encountered that share similar characteristics. Now I’ve turned 10 pages, and feel like I blacked out for 7 of those pages… seeing words, but nothing sticking. I was frustrated, and felt tired, and gave up.

I’ve come back to this topic because reading professional periodicals, blogs and books is an important analytical exercise, and necessary for me to process the thoughts of other “greats” in related fields.

The problem presents itself: How am I going to set myself up for success?

My initial plan: commit to 45 minutes of reading, 3 days per week. This seemed reasonable. I could find 45 minutes, 3 days a week. I mean, come on. How hard could that be, right? Not that hard. The hard part was actually STARTING a reading session on each of those days.

Why was it hard to start? Well, I knew that I struggled with longer sessions in the past. I knew that I would need to clear my mind of distractions. Well this all sounds good, but what am I really doing? I’m listing all the reasons why this is going to be hard to do!! This is no way to start approaching a challenge. I’m reminding myself of why I am likely to fail!

I decided to alter my approach. I wanted to train my brain to pull the information, rather than train my brain to accept the information. Well, how can one do this? Here’s how I did it: commit to reading for 10 minutes each day, every day, every week. Sounds ridiculous, right? How much reading can you get done in 10 minutes? Turns out, not much if you’re me. BUT, the effect is incredible: I find myself consistently wanting to read more at the end of the 10 minutes. This practice is training my brain to desire more reading, even if I only get 10 minutes at a time. It also turns out that it’s REALLY hard for me to put the book down after 10 minutes.

I will keep the 10 minute limit for the rest of this week, then up it to a 20 minute limit, and so on. Notice the use of “limit“, and not “a minimum of…“. Limiting creates a pull. Setting a minimum level creates a push. If the goal is to read more, then why not train myself to want to read more? This is what I’m doing.

This seems to be working for me, and I may update later on with further results. Take are, and thanks for reading!

Quality Center and FitNesse

On a recent test engineering assignment, I had a client that used HP Quality Center and FitNesse, and wanted a simple mechanism to connect the two systems together. I began searching for “Quality Center and FitNesse” and found many incredibly verbose examples of connecting these products. These systems can be connected in a very simple fashion:

Utilize the VAPI-XP-TEST test type from Quality Center to issue an HTTP request to your FitNesse instance and report pass/fail for a given Test Run, given the FitNesse results.

The version of Quality Center the client used was 10.0.


  1. You have an existing FitNesse instance that is running and accessible from the network that houses your Quality Center server / farm.
  2. You have access to Quality Center
  3. You have the necessary Quality Center license to provide access to the VAPI-XP-TEST test type

Steps to create the Quality Center test

  1. Launch Quality Center
  2. Login to Quality Center
  3. Access the Test Plan Module
  4. Select or create the folder in which you wish to create these QC/FitNesse bridge tests
  5. Right-click on the folder and select “New Test” from the menu
  6. Set the Test Type to VAPI-XP-TEST, name the test “FitNesseTry”, click OK
  7. Select your preferred scripting language (I prefer JavaScript)
  8. Click Finish

Now, we write the code

Quality Center will place some boilerplate in the script for you. It’s somewhat useful to review it to understand why these conditionals exist, and what the basic objects are you’ll need in order to log your test result.

Quality Center VAPI-XP-TEST boilerplate (JavaScript)

// Main Test Function
// Debug - Boolean. Equals to false if running in [Test Mode] : reporting to Quality Center
// CurrentTestSet - [OTA COM Library].TestSet.
// CurrentTSTest - [OTA COM Library].TSTest.
// CurrentRun - [OTA COM Library].Run.
// ----------------------------------------------------

function Test_Main(Debug, CurrentTestSet, CurrentTSTest, CurrentRun){
    // clear output window
    // TODO: put your code here
    if(!Debug){ }

  // handle run-time errors
    TDOutput.Print("Run-time error [" + (e.number & 0xFFFF) + "] : " + e.description);
    // update execution status in "Test" mode
    if (!Debug){
      CurrentRun.Status = "Failed";
      CurrentTSTest.Status = "Failed";

In order to call FitNesse, we’re going to load up an XML document to interrogate. This XML document will be hydrated from FitNesse’s response.

FitNesse provides a collection of “responders” that tell FitNesse to do something specific. We will use the “test” responder and tell it to format its response as XML. It’s worth reviewing FitNesse’s documentation on responders since there may be other awesome things you can do to connect it with other infrastructure to unlock further value for your clients.

Call a FitNesse Test from Quality Center VAPI-XP-TEST (JavaScript>

function Test_Main(Debug, CurrentTestSet, CurrentTSTest, CurrentRun) {
    try {

        var testPageUri = "http://localhost:3000/PathTo.YourFit.NesseTest";
        var testUri = testPageUri + "?test&format=xml";
        var response = new ActiveXObject("Microsoft.XMLDOM");
        response.async = false;

        var testResult = {
            "failed": response.getElementsByTagName("wrong")[0].firstChild.nodeValue,
            "exceptions": response.getElementsByTagName("exceptions")[0].firstChild.nodeValue

        TDOutput.Print (response.xml); 

        var testFailed = testResult.failed != "0" || testResult.exceptions != "0";

        if (!Debug) {
            if (testFailed) {
              CurrentRun.Status = "Failed";
            } else {
              CurrentRun.Status = "Passed";
        } else {
            TDOutput.Print("Passed? " + !testFailed);

    } catch (e) {
        TDOutput.Print("Run-time error [" + (e.number & 0xFFFF) + "] : " + e.description);
        if (!Debug) {
            CurrentRun.Status = "Failed";
            CurrentTSTest.Status = "Failed";

Incorporate your new test into a Test Set

  1. Access the Test Plan module
  2. Select / create your Test Set
  3. Click “Select Tests”
  4. Navigate to find your new VAPI-XP-TEST (“FitNesseTry”) for connecting to FitNesse
  5. Add that test to your test set
  6. Now you can link to requirements, defects and run the test as you would any other Quality Center-hosted test

Some important hints

  1. It’s far more efficient to target FitNesse Suites than FitNesse tests due to the length of time it takes for Quality Center to fire up and run a single VAPI-XP-TEST test.
  2. I recommend utilizing FitNesse tags, and then leveraging Suite Filters when calling FitNesse Suites from VAPI-XP-TEST tests

I hope this helps to unlock new value in your organization. Thanks for reading.

JSON and iOS

Some people think you still need to use a 3rd party library to handle JSON parsing in iOS. This is no longer true (actually since iOS 5).

Use the NSJSONSerialization class to hydrate an NSDictionary from your JSON as follows:

NSString *responseStream = @”[{\”your data\”:\”here”}]”;
NSData *data = [responseStream dataUsingEncoding:[NSString defaultCStringEncoding]];
NSError *error = nil;
NSDictionary *resultingObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
NSLog(@”%@”, resultingObject);

A couple hints…
You need to escape any carriage returns (“\\r” instead of “\r”) and remove newlines (“\n”) in order to clean up your content.


Installing nodejs dependencies

To keep your dependencies nicely grouped into your cwd, be sure you have npm installed, then create a package.json file in the cwd, with the following minimal structure:

"name" : "name_of_you_project_or_product",
"version" : "0.0.0",
dependencies : {
"name_here" : "version_here"

then, in the cwd, run “npm intstall

you will see a "node_modules" directory created in the cwd, and it will contain the dependencies you listed.

I currently prefer managing node dependencies this way, as oppose to installing with the “-g” option.


Behavioral intensity

I sometimes have people ask me “what should a team be doing and at what point in the project / product development effort?” Now, I could cross my legs, begin to float and say “whatever seems most valuable.” But I’d rather give some more applicable hints. So, I often try to answer in terms of behavioral intensity, given the conditions.

Here’s an example of a visualization I’ve used recently:

How have you answered these sorts of questions?


Newbie rake finding

To script tasks that you need to accomplish in your rails apps, there is a lib/tasks folder designed to house *.rake files. Given that, let’s say you have a task you wish to accomplish with the assistance of some scripted automation, so we create a file:


And let’s say you identify a task in your rake file:

task :ask do
puts “what do you think of this post so far?”

Well, I originally thought I would call this task from my app’s root directory via “rake confer ask” and quickly found I’d get “Rake aborted! Don’t know how to build task ‘confer’.”

As it turns out, the files are just for human purposes. Rake appears to grab up task available to it, and does not organize them, inherently, in any particular file-name-driven fashion. This appears to be where namespaces become useful in the rake files.

To call the task I created, one would issue (from the rails app root dir) “rake ask”. That’s it! Onward.

Picky eater

When we were kids, I remember noticing how my brother LOVED bacon, but only specific parts. He’d carefully strip the bacon apart so that he was only eating the meatiest parts, leaving the fat behind. He didn’t complain, mind you. He only ate what he really liked, and would take the time to make sure the “fat” was ripped away, since he hated it.

On with the techno-jargon-ish post…

I’ve always been interested in building an app on a non-microsoft stack. In the mobile space, I’ve created a couple of ugly Android aps (not ugly because of Android itself, but of my, and my team’s design limitations). The next part was a web app. This leads me down the rails / django / php path. I’ve chosen rails for my first real product venture.

I was about to push my app to Heroku, exposing the app to a colleague of mine for the next leg of the system interactions. I kept getting the wonderful “no Cedar app detected” and “failed to push some refs.” WTF man? I thought this should all just work.. what a fool I was. MOSTLY because I really have little confidence with rails at this point, and have no room (yet. I’m working on that >;]) to be so presumptuous.

I then began doing what any accomplished programmer would do: blame the thing I think I know the least about: Heroku.

To the Google! To Freenode! Nothing!

What could I be missing? Am I really so genetically deficient that I just can’t get this shit to work? Turns out.. no. Here’s the deal.

This app a mash-up of a number of data sources that I don’t own, has a web component to it and a mobile component. SO unique right? Well, hang on. Here’s what my git repo looked/s like:

|_ android
|_web (rails 3.1.3)

See the problem? Which one of those is a Cedar-supported app? A Cedar-supported app is a Rails 3.x app, according to Heroku’s docs. While having the android app, the rails app and the worker scripts all in the same repo appears to be totally fine in terms of a team that is working on a cross-platform app, it fails us in the deployment context. It fails us in the deployment context because Heroku appears to expect the connected repository to ONLY contain items that comprise a supported application type. Any other items present in that same repo and BANG! “failed to push some refs.” So Heroku wants fat-free bacon or no bacon at all!!

In response to this situation, I’m thinking that it’s reasonable to keep each portion of my app in its own repo. This will, I think, help me more effectively isolate versioning needs (the commit logs will be more meaningful since they only contain changes to THAT app, and I won’t need to weed through the git logs to find changes to each of the n apps contained therein).

I am somewhat curious about better ways to manage my app’s assets though. Having multiple repos for a single product seems a little overkill. Additionally, it seems at this point that the requirements of working with Heroku are pushing a little too far into my local workflow. Hmm. Onward with the learning! Comments / corrections / objections are welcome.

Let us not forget,

What you (I) really mean(t)

Through reflecting and general personal growth as an individual I’ve become more aware of the ways I’ve skirted responsibility at times in my life. These mechanisms for skirting responsibility have become quite noticeable to me in others as a result of my gradual and perpetual awakenings. I think it’s important for us to detect when we’re behaving this way in order for us to come closer to reaching each of our individual potentials. Here’s a starting list of statements, along with what I really meant when I said them and how it appeared to effect the recipients:

I don’t have time for…

Translation: I am currently unable or unwilling to make time for that activity. I may also be uncomfortable with changing a patterned behavior because of the presence of a level of instability in my life that I’m unable to handle effectively, which further change may cause my stress to become unbearable.
How does this effect the recipient(s)? Minimal, by design. Saying “I don’t have time” implies nobody gave me time. So, I appear to not be responsible for the inaction.

We can’t…

Translation: I can’t think of a way to make this work for us. I‘m also uncomfortable with exposing the fact that I don’t know what to do. I may also be uncomfortable with discussing the skills of team members that may be preventing us from attempting this.
How does this effect the recipient(s)?  Fight or Flight. I’ve observed a complete shut down of the creative process in some individuals (Flight), while a rise to the challenge (usually with an aggressive tone) in others (Fight). The “fight” may be desirable antagonism that assists the creative process in some teams, but can easily be mismanaged into self-destruction.

Let’s take that offline

Translation: I really don’t want to talk about that for some reason (I don’t think it’s important to our mission, or I’m generally annoyed by your demeanor). I’m hoping you forget about it. I’m also hoping the others in the room assume we handled the topic outside the meeting so it doesn’t come up again.
How does this effect the recipient(s)?  Frustration, anger, resentment, the feeling that “nobody cares” or that “my ideas are dumb or unwelcome.”

That depends

Translation: I don’t want to make an uninformed statement, and am prompting you for more information. Instead of asking you to tell me more about your problem context, I say this to sound wise when in reality I just don’t know enough about your problem yet.
How does this effect the recipient(s)?  Annoyance, primarily. To me, this is a ritualized and low-value answer. Many of the testers and thought leaders I meet enjoy wielding the context-dependent response of “it depends” instead of getting to the meat of the matter. Any more, when I hear this, it lands on me as condescension. Screw the “it depends” and start interviewing your customer. Show you care to understand her goals, what she values, and start the collaborative process.

You may notice a common modification in these statements to make use of “I-language.” This one (note, I did not say “simple”) change can, on its own, unlock significant potential within teams. This has, at least, been my observation. Take care all.

Ok, so which one gets the app?

Trying to install an app from the browser-based android-market. If you have more than one of the same phone on your account, good luck figuring out which one is right!