PNDLM System, Part I — Without Reservation

A few of us are now seriously researching how to scale PNDLM to a certain number of staff consultant architects, designers and engineers while simultaneously improving our overall quality of service.

But before I get into that, it seems I need to reflect and pay a moment of gratitude to what is in hindsight maybe the most important book I've ever read. Just a few years after I accidentally launched PNDLM, in a time of serious questioning and discontent, I discovered Ryan Holiday's "Ego Is The Enemy" on Tim Ferriss' podcast. The chapter Ryan read was called "What's Important To You?", and it tells the story of how after architecting the union's victory in the Civil War, General Sherman decided that he had "all the rank" he wanted, turned down requests to run for office, and retired in happiness. Grant, meanwhile, followed an opposite path, pursuing the Presidency and then attempting to become an investor— both of which went poorly, sullying his reputation and bankrupting him. Ryan argues that Grant had "accomplished so much, but to him it wasn't enough— he couldn't decide what was important, what actually mattered to him." At first this seems like maybe an entreaty against the pursuit of success at all, but then Ryan questions what if Grant had used his time to pursue things that mattered to him, "how much more could he have done and accomplished?"

To know what you like is the beginning of wisdom, and of old age.

--Robert Lewis Stevenson

It's very easy for people, but especially for "entrepreneurs", to get caught up in the trap of thinking that success is measured in dollars earned and that more dollars equals more happiness. I have been deeply aware of this trap for a long time, but even still I have the ability to forget for a moment that my success in finding happiness so far has come because I didn't focus on raw revenue and growth over everything.

So now, similar to how I'm thinking about how to increase the number of contributors in the business while also increasing delivery quality, how do I pursue serious growth and revenue increase while also increasing my own personal happiness? Such pursuit would have to be actually important and matter to me.

My personal circumstances have continued to improve and this summer I began to feel the door opening to new opportunities in my life. I could go into details, but—  I'm happy; my financial, home and marital stability are all very good; there's nothing else in my personal life I feel really strongly about achieving (I already got to do the important stuff); I'm not ready to flat-line (eventually discontenting) or retire (extreme boredom); I came upon a few clear visions of how some details of my personal and business life could actually be improved, I could be happier, and that got me finally excited about pursuing this new great challenge wholeheartedly and without reservation.

And since I'm now confident that I'm not risking any part of my happiness, but actually the opposite, I have a fighting shot at making some real progress.

On Iteration

The engineer in me gets stuck on the idea that there are straight-forward, simple answers to things like "how to be happy" and "how to be successful in business". And maybe at a high level there are some simple answers. But the execution of specific acts toward these pursuits— as a human being, our execution is never perfect, and we exist in messy environments with many variables. We have our own strengths and weaknesses and our own unique contexts. Very few acts will be a complete solution, or universal among people. But perhaps we can distill ideas, share them with each other, and make some progress by iterating continually, not expecting a single overnight success and certainly not giving up.

State goal -> time block -> do the work -> measure (repeat)

https://www.nytimes.com/2018/01/27/business/mind-meld-bill-gates-steven-pinker.html

What I'd ask a software development firm

Last year a friend of mine asked me how to know if an outsource software design and development firm was any good for his client's project. It was a tough question that I'm glad I've never had to answer myself. Here's how I responded, all biases included and unfiltered...

I’ve narrowed it down to 4 questions below I would ask if I was evaluating design/dev firms— but let's establish a couple things first.

In terms of the business model, they want to put an app in the store and drive individual consumers to subscribe. (a B2C play) From the perspective of the success of the business, then, the design, the user’s experience of the app, will be a make-or-break. If a user downloads an app, and doesn’t immediately understand how to use it or feel the value it brings, they will delete it, no matter how well it’s programmed.

On the flip side, if the app looks great and is easy to understand, but it’s slow or they run into regular bugs or problems (a result of poor engineering)— the app will still get deleted, but maybe just later in the process.

So in my mind the most important question in evaluating a firm for this type of project is one you can ask yourself using your own instincts to answer:

#1: What do their apps feel like to you?
Ask them to put some apps they have worked on on your phone. Do they look and feel great… or not? What are the inner feelings you get when you use them? Since everyone uses software every day, anyone can make these judgements, as will your customers. Don’t overcomplicate your analysis here. If you’re not excited by their work, move on— there are better firms.

The other 3 questions:

#2: Will the same people that built these apps I just tried also work on my project?
The classic issue with outsource firms is that they dazzle with great work examples from Team A but assign your project Team F— and you won’t know until it’s too late. You can ask for contractual guarantees about how much specific people will work on your project. You should have a proven, very senior level architect/engineer leading the entire development process that can make necessary course corrections.

#3: What metrics are used to determine that an app is “working” and “acceptable”?
This should be quantified in writing, because functional specs only tell part of the story. For example, if something is supposed to happen when a user pushes a button, and the app eventually does it but it takes many seconds, a development firm might say it’s working fine, but you and all your users will feel like it is broken.

#4: How do you quote projects, and how do you measure If a project is on time and budget?
I strongly suggest avoiding fixed bids. There are many reasons, but primarily, you as the stakeholder will need flexibility to request changes as you observe the process, or as the business needs of your startup change in real-time. Time and materials (with a full project estimate up front) can accommodate, but you must watch carefully to ensure the project stays on time and budget. This can be assessed in work numbers (not vague percentages), and your firm should be able to show you how you can measure this at any time on your own using their project management software.

...aaaand in case you're new here, let it be known that I just happen to run PNDLM, a software design and development firm which has been my passion for the past 10+ years. I'd enjoy the opportunity to discuss your project, too.

Look for the best in people

If I ever said anything ill about somebody as a child, my parents would send me to the mirror and make me stand in front of it for 10 minutes, just to make me realize how badly it reflected on myself. As a leader and a person, looking for the best in people is completely and utterly the right way to lead your life. If somebody steals from the company or something, we’ll always give them the benefit of the doubt, and by and large, by giving them a second chance, they become the best performers in the company. We’ve taken on a couple of hundred people straight from prison to work for the companies and not one of them have reoffended. They’ve been fantastic employees. So I suspect that was the best bit of advice.

--Richard Branson

15 Tables to Mastery

Within a reasonable period of time, and without extravagant resources, how can one reach a level of expertise in business high enough to consistently produce growth in any business? An experiment begins.

Lemn

In the summer of 2019 I took a startup I was advising down to Melbourne Australia for a series of short pitches at a startup accelerator. The job was to make 15 minute pitches to 10 tables of professionals on day 1 and another 10 tables on day 2. Because I was an advisor myself and not pitching, my job was pretty easy. All I had to do was observe how my team was pitching, the response to the pitch, and the questions that were asked. After each pitch, during a five minute break, I would tell the team what I noticed and suggest some things to improve on. They did a great job implementing those changes and improved with every pitch.

What happened at a macro level, I think, was pretty interesting. By the end of day 1 (10 tables), I had pretty much learned the spectrum of reactions to the pitch and the list of questions that would come up. My team and I huddled that evening and the next morning and discussed a series of overall improvements we'd make in response to those findings. On Day 2, for the first five tables, we continued to make micro-adjustments, and then for the last five, the pitch was on autopilot. By then, they had it wired.

My main takeaways from that experience were:

  1. I felt the distinct feelings of knowing when we were close, and then knowing when we had it. At those points, it wasn't a guessing game around what was working and what wasn't. We had learned enough about the process to produce consistently positive results.
  2. It required not one, but several tables worth of professional perspective, in order to have a complete enough landscape of the possible reactions and questions.

Earlier today, I thought about how business is the art of producing value: people want or need what you make, and they choose to buy it from you. It is probably governed by the same laws as everything else in humanity, and therefore, patterns would emerge. (Pareto's law, Parkinson's law, etc.) On that premise, I wondered if I could retool my learnings from the pitch event to better learn these principles of business. What could I do 10 or 15 times over to get the understanding of how to consistently, reliably, systematically produce growth for any business?

The most obvious answer was to go start and run 10 or 15 different businesses. I'm sure it would work, but I don't have enough time in my whole life to do that correctly, let alone this year, so I need something a little more efficient.

I came up with some alternate ideas:

  • Take 10-15 semesters of collegiate business courses
  • Listen to 10-15 full series of business podcasts
  • Read 10-15 carefully chosen business authors' rĂ©pertoire (i.e. books)

Personally, the last option appeals to me the most because I feel that (most) books tend to have the best concentration of good ideas, and you can use online reviews, endorsements, and summaries to point you to the best ones. I've also found books to generally be the best tool to advance any aspect of my career so far.

So as I welcome in 2021, I'm planning now to set aside time every day to read: enough time to read through one author's worth of books every month. If I follow through, I figure that by summer I should know pretty well if this idea is going to work, and ultimately lead me to the full set of skills I seek.

It all sounds great at first, but I also need to address a few other problems I've run into in the past:

  1. As someone currently running a couple of businesses, how can I be sure I'll find enough free time every day to read enough?
  2. How will I choose which authors to read?
  3. How can I not only retain what I'm reading but also put it into active practice?

The good news is that I've been doing a fair amount of poking on effective reading and time management in the past few years, and I think I have some pretty good ideas. As I figure it out, I'll share more about what's working and what's not.

Prior Art#

While in pursuit of a similar goal, Tim Ferriss almost went to Stanford Graduate School for Business before instead using the tuition money to make 15 different angel investments over the course of two years. After the 15 investments, he notes that he didn't lose money, but also that it would take him a few years longer to really understand how his experiment went. (In the end, he won handily.) On that note, it seems like if I can set my foundation of understanding of business this year, and see the results actualized over the course of a few years, that would be a major win.

Tracking social login with GA/GTM

Following up on yesterday's article, this article describes a technique for tracking social logins in a single session using Google Analytics (GA) and Google Tag Manager (GTM).

In crafting this technique I mainly referenced a since deleted post from "advertisercommunity.com". I also used some info from this arcticle on simoahava.com but not the exact technique described.

During a social login (that is, allowing a user to use their Facebook or Google login to log into your site) the user's browser is moved for a split second to Facebook or Google domains to verify the login before being redirected back. In the process of this redirection the user lands back on your site, and GA decides that a new "session" has started and that the referrer is Facebook or Google. This causes the user's activity from before to not be connected to what they do after they log in.

As my friend Nick, founder of Mad Leads pointed out during our joint strategy work on a customer project, you can't just exclude the facebook.com or m.facebook.com domains from within GA without wrecking other real referrer information from FB, so that's not an option for correcting the breakage.

Ideally we want to skip creating this new session all together and roll with the original utm source/medium data from the original session. It turns out that, on the page where the user lands back from Facebook or Google, if you manually set the "referrer" value on the GA Page View tag to your site's own domain, then GA doesn't consider any new referrer and continues on with the old session. A strange workaround, but one that consistently worked in my testing.

Step 1#

Create a new Custom Event trigger. The "Event Name" of this trigger will be used later.

Trigger Configuration

Step 2#

Create a new Google Analytics Page View tag, setting the "referrer" value to the built-in variable {{Page Hostname}}. Configure the tag's Firing Trigger to be the custom event from Step 1. This will cause the referrer information to be wiped out when we fire our custom event.

Tag Configuration

Step 3#

We want to make sure that this new Page View tag is the only Page View tag that fires on the social login return pages. To do that, we create an exception so that, if the Custom Event fires on a particular page, we exclude our main GA Page View tag and only fire the new one. So, in our main GA Page View tag configuration, create an Exception for our custom event.

Triggering

Step 4#

On ONLY the social login landing pages back from Google or Facebook, we need to add some additional javascript to trigger our custom event. So just below the GTM tag in the header of those landing pages, I added the following code snippet to fire the Custom Event—

<script>
dataLayer.push({'event': 'grid-588-social-login-referrer-fix'})
</script>

Of course, in the code above, the Event name set up in Step 1 should be plugged into those single quotes accordingly.

Note that this code should only be added to the pages you want to blow up the referrer information for. Adding it site-wide would of course destroy all of the referrer information for the entire site, which is probably not desired.

Tracking page changes in an SPA with GA/GTM

This article describes a technique for capturing "page changes" in an SPA when trying to track user movement using Google Analytics (GA) and Google Tag Manager (GTM).

For background, an SPA, or single-page web application, uses a browser technology called the History API, or window.history. It allows the recording of the movement around a web application without actual page loads into a stack, allowing the back and forward buttons to do something meaningful even though real page loads are not occurring.

The History API exists consistently in all modern browsers, and it turns out that Google Tag Manager can actually observe changes to it and push tags around accordingly. This isn't default behavior, however; it has to be configured to do so.

Step 1#

The first thing that has to happen is deciding what parts of the URL to track as individual pages. By default GA doesn't track anything but the URL (leaving off the ?query=string and #hashtag information), however these components can be useful sometimes in an SPA in a way that they weren't previously in a traditional web application. For example, we could use #hashtags to show certain dialogs over the top of another page, in which case the /main/url part of the URL is the main page content we show, the #hashtag represents which dialog is currently displayed.

Then, within Tag Manager you can create a Custom Javascript user-defined variable that combines all of these things together in a single value. For one customer's implementation, here's the function I ended up using—

// this function will return the current page URL, plus ?search, plus #hash in one string
function() {
return window.location.pathname + window.location.search + window.location.hash
}

Variable Configuration

Step 2#

Add a History Change trigger that fires on all events. This is a built-in trigger that doesn't require configuration.

History Change Trigger

Step 3#

Keep your existing Google Analytics tag for regular page loads, but then create a new Google Analytics: Universal Analytics "tag" to for triggering Page Views when the History Change trigger fires. The configuration for this is:

  • Track Type— Page View
  • Google Analytics Settings— (not sure here, I just used the UDF that one of you had set up previously, which was present on the other tag that already existed
  • "Enable overriding settings"
  • Under "More Settings" / "Fields to Set", set the "page" Field Name to the {{user-defined variable}} set up in Step 1.

Finally, set up the tag to trigger off the History Change trigger set up in step 2. Put all together it looks like this—

Tag Configuration

This setup is pretty generic and should work for most SPA situations as long as they are firing the History Change event, which any modern webapp using this technique should do. I didn't have to mess with dataLayer or anything like that to get this to work, it just did as soon as I created this configuration within Tag Manager.