We all want servants

I think a lot about automation, and work in the trenches on it daily.

The value each of us actually want with automation is:

  1. Simplification, from tiny directions into broad strokes
  2. ideally, an outcome vs. process directions
  3. and eventually, prediction of likely desires based on unstated patterns

We’d all like a servant to just make us breakfast or dinner, chauffeur us to meetings, and handle our taxes.

A good butler (say, Carson in Downton Abbey), would learn the whims of his / her employer and implement them without even a direct request.

To know what the common people want, just look to the lifestyles of the wealthy.

In business, one can just look at more successful competitors and specifically their HR structure to get a sense for what the market needs.

Ideally, I should be able to tell my e-bot to get me real estate leads via any method possible with parameters of up to $100 per real live, non-induced, phone verifiable lead.

This of course, is a tall order for robots as of today, but where things are unquestionably going, because it’s what we (SwiftCloud / SwiftMarketing) are working on.

The outcome vs. process mind set is key, but in all real-world applications, parameters are required for any of this to be of value. Producing real estate leads at a cost of $800/each is pointless – unless your average listing is $1mil+ ($30k commissions). A robot that could take out a frozen meal and microwave it for you, then bring it to the table isn’t terribly valuable – the implied parameters include something good and preferably fresh.

To know the cost-per-lead, the robotics must know not just the ad spend, but the conversion ratios on landing pages and offers, have API access to traffic methods, and some API based method of running campaigns. For now, human oversight is required – though technically, just for the ad campaign itself, which could even be outsourced.

Ten years from now, coders like me will have figured out how to make what’s essentially a Von Neumann probe for money: self-replicating bots that run a lean-canvas experiment autonomously, figure out the profitable limits, and scale up a campaign via programmatic media. One could almost build this now using dropshipping and outsourced gig-economy workers for fulfillment, running programmatic split-tested media.

And so, it’s back to work for me. For today, I’m the servant, working toward building my own replacement army.

I, Human

In high school I was one of a small percentage who scored as INTP, which at the time I didn’t think much of. Later, I realized this makes me less human*.

Or does it?

What it is to be human, in a face of rapidly growing machine intelligence?

Values? A balance of feelings and cognition?

Human values are often directly contradictory. Why do we treat a family dog one way, but many (most) kill and eat animals? Or a staunchly pro-life voter outwardly reject amnesty from even children fleeing war?

It is in my nature to go immediately to algorithms.

I was considering buying a beautiful Beneteau sailing boat / yacht on a timeshare, but how would one fairly distribute time on it? Naturally, everyone wants 4th of July weekend – so I immediately starting thinking of a weighted scoring system in which users could build up and bid points (pseudo-currency), or algorithms involving an inverse time-multiplier so that prime dates far in advance require more points…. you get the point.

Yesterday I bet my wife that by the year 2100 a nonhuman will sue to run for president, arguing that being “born” in the USA includes assembly. Will it win? That’s irrelevant: by then machine intelligence will have surpassed us, including careful manipulation of our predictably human foibles – creating a physical mashup of Ronald Reagan, JFK, and Barak Obama who is capable of monitoring the internet in real-time to perfectly calculate not just what to say, but how to say it.

Think I’m joking? Listen to Google’s Deepmind compose and play piano – in real time**:

AI and machine intelligence today is like the computers of the 1960’s. When AI writes it’s own successors, within minutes we’ll have engineered our own obsolence.

Perhaps then to be human then will be to be obsolete.

HBO’s new show Westworld shows the next step: blurring the lines:


I don’t have the answers and welcome yours below.

My best guess is transcending ourselves to some greater cause. In that moment of flow, when we disappear and our mission supersedes our biology we are at our highest and best, and it’s questionable if or when machine intelligence can or will do that. Ultimately, self-transcendence is a choice of mission.

But how many humans operate in that state at any given moment?

Then again, how many humans ever get the chance? The majority of humanity is stuck handling the basics of a comfortable existence.

Perhaps, just maybe, AI / MI will allow us to rise to the challenge.

*  I may be joking. I might live in The Lattice.
** Real time, though apparently it rendered the computations for 9 hours, though this is clearly insignificant in light of Moore’s law for the topic above.

Bad Employers Want You Broke

Your employer only has a few ways to keep you doing what you do for them.

  1. Offer money, but this only works if you need it. The more you need it, the more control they have.
  2. Inspire you.
  3. A balance of these, which shows up as “engagement” or other terms – i.e. the work is interesting, makes a difference in the world, you feel like a needed part of a team you admire, etc.

Finding great employees to work for cheap is difficult.

Good ones leave, moving up the chain, if not provided with true advancement opportunities.

Solution? Keep ’em a little bit broke, so they need the money.

Recently, REI came under fire for the disparity between some romantic ideal that people assume or observe in the store – specifically, that rugged late 20’s guy who’s out kiteboarding and mountain biking when not at the store, or that hip 20’s girl who surely must be teaching rock climbing in addition to working there.

The truth is a bit more gritty according to actual employees.

In the end, capitalism includes a war between capital and labor. The war is over: Capital won.

Wal-mart has a fiduciary duty to its shareholders, and money can flow to stock holders or employees, but not both.

For low end “brute force” jobs like retail, the employer secretly wants you broke, and getting your health insurance from the government, not them. It’s pretty difficult to keep someone in retail inspired about how their service in housewares is truly making the world a better place.

The problem is money only works if you’re motivated to get it. Most people just want to pay their bills, have a few good times on the weekend, have a house and some basic material possessions… but for many, if they had all that gifted to them, and a magic trust fund of a few thousand a month suddenly endowed on them, would they continue to work … in retail?

Cleaning up baby vomit in aisle 12?

They need someone broke for this who won’t complain and will get the job done, until robotics can reliably do the job for cheaper.

Can you fault the employer?

Fortunately, there’s a solution out of it: if you’re working a “low end” job, move frequently and strategically. Retail’s fine – if you learn about some business you actually want to be in, and move up. Change jobs every six months until you’re happy. Some employers will tell you they want 2 years.. well, you want a career. Your on-going employment is a daily transaction –  you sell your time for money (if an hourly worker).

Wal-Mart doesn’t apologize for limiting hours to 29.5, so they don’t have to pay for health insurance.

Should they? No. Why pay for health insurance when it’s so much cheaper to just get the taxpayers to do it?

Is it morally wrong? Yes.

Should it be illegal? Yes, and there’s the problem. The law – not the corporations.

We live in democracy, and while politics is often infuriating, labor has one key overlooked power it hasn’t been wielding: sheer numbers. There are a lot more workers than employers.

So why don’t people vote accordingly?

Why Web Browsers Are Dangerous

After reading the thousandth click-bait post about politics, I have only one conclusion:

People are idiots.

Including at times, even myself.

Will you admit you – at times – are too? If not, then you’re part of the problem. Call me a jerk, but we all have a finite limit to what we actually know, whether you acknowledge it or not.

The problem is, as Bukowski clearly stated, that idiots are full of confidence, and smart people are full of doubts.

Smart people know what they don’t know, or at least more of what they don’t know. Smart people also handle complexity, and the world is almost never as black and white enough to make good simple headlines.

And there’s the rub. Headlines.

Headlines grab attention. They get clicks. They create ad-views, and thus revenue. Increasingly, the most profitable headlines either make you angry, and thus more likely to comment, refute, flame – or they’re in the realm of confirmation bias – agreeing with your pre-existing beliefs, proving to yourself that yes, you are smart and “right” (right as in both morally superior and factually correct).

Web browsers, facebook, and search engines have the power to save us from ourselves.

Facebook won’t do it. It’s too profitable for them to not do it – they’d rather you get angry, and keep checking your rebuttal twenty times in two hours to see the flame-fest updates – creating more ad views.

Google and Chrome could, barely. It’s an interesting challenge from an AI perspective, requiring something close to general intelligence capable of finding actual data sources and correlating them back to the article or post in front of us.

For society’s sake, we need a browser that’s perfectly neutral and non-judgemental, but with the wisdom and perspective of a monk.

Without it, for economic reasons, I see nothing more even more Brexits, as people fall into polarized camps, and eventually, WWIII as beliefs are hardened through thousands of videos, articles, and friendships that reinforce whatever belief fits the user’s view.

Until we get this, check your sources. Assume everything you read is an attempt to get you to click – to make you angry, or fit your existing biases.

Twenty years ago, mass media was mostly created by professional journalists who vetted articles – cross-checked facts, cited sources, and did their best to present truth.

These days there’s more money in un-truth.

And therein lies the problem. If you spread that un-truth or half-truth, you become part of the problem, and given our schedules and barrage of media fighting for attention, even smart people end up reposting something that weakens the collective intelligence of the world, not improves it – gently polarizing the world into camps that will inevitably end up fighting.

And yet not posting anything leaves only the idiots speaking.

Slack: Another Phone Call

Managers love Slack.

They get instant answers.

CEOs and other top level people, and the impatient love it. “Driver” sales types who are happy to interrupt if it means a faster answer love it.

Engineers hate it, unless it’s part of a scheduled meeting that absolutely cannot be avoided. Thinking deeply requires focus, and focus is fragile. In order to solve certain problems, I need to hold the business-logic equivalent of 10,000 lines of code in my head. It’s hard enough to keep out my own internal distractions without someone asking me something trivial that could easily have waited 3 hours.

As a CEO, I can’t help but be jealous of Slack’s meteoric rise to glitter-covered unicorn status in just months. I wish them well, for what it is, it’s a truly great tool.

That said, in the end, people loved email in the beginning too. Now, not so much.

Slack and others (Hipchat, etc.) are quick to tout “network effects” to their investors. Personally, I’ll never allow open distraction to our staff. Most companies do not: it’s why they have a receptionist, to weed out those sales calls. Phone companies touted network effects too.

Obviously the phone is a useful tool, and so is #IRC or any other reincarnated business chat platform.

But tools cut both ways.

What’s the solution? Personally, I’d like to see “scheduled escalation”… guarantee an answer within X hours or N days: if no response, escalate method, first with successive emails, then chat, then phone calls. Usually it’s not needed – emails I truly need often get returned.

Except cold sales pitches.

See the pattern?

If you’re a surgeon and a patient might die on the table, or in a real estate closing and you need an immediate answer, then phone calls – and slack – are warranted.

If you want to use Slack, Hipchat, or any other chat solution that turns all conversation into a limitless never-done quasi-meeting that creates one more subconscious loop of undone-ness in my head, fine. But don’t expect there’s no price to pay – and the price is far beyond whatever they charge.

To me, it’s another phone call, which I’ll ignore if I can.*

* to clients: Just as I “go dark” on others when I’m with you, it’s not personal when I go dark on you. We’ll have staff escalation policies if a server truly is on fire to get you immediate help, but these firewalls are designed to keep us effective, so if you want to break through them, expect to pay. That’s intentionally designed – we want to be as effective as possible for us and you.

Sheep & Wealth Creation

I’m at my core an inventor.

While this is easy to romanticize in the age of Sergei Brin and Mark Zuckerberg, these highly successful stars are the visible tip of an iceberg, in which, fitting the metaphor, many more are underwater.

The problem is historically, inventors are more likely to end up like Nikola Tesla (brilliant, broke) than Thomas Edison. Extracting the value from inventions requires the attitudes of Carlos “Slim” Helu or at the very least, Steve Jobs whose cash motivation was far greater than his co-founder, Steve Wozniak. Steve Jobs’ genius was his ability to shape Apple products enough, then stir consumer desire enough to “overpay” for them, i.e. engineer products worth far more than the sum of the required parts.

May we all learn from his model – RIP.

Peter Thiel in Zero to One mentioned he has an interview question in which he asks founders where the world is mistaken. I think this is more than just an interview question – it’s critical to thinking about founding a business.

Since I’m already over-using metaphors, I need to drop another: Wayne Gretzky’s now over-used but still true cliché “skate to where the puck is going to be, not where it has been” – and this is where it comes together.

In short, there’s only a few ways to get this metaphorical puck: (1.) execute faster, so you simply reach it first, or (2.) the competitors are all mistaken about where the puck is in fact going, which happens, or (3.) be lucky and simply already in the right position.

While none of the above are inherently defensible, they can of course lead to a short term gain which can be capitalized into a working moat.

Steve Jobs believed the world was mistaken, and actually did want a tablet computer, contrary to Microsoft’s previous endeavors.

Mark Zuckerberg had the forsight to believe MySpace and Friendster were both mistaken in their execution of connecting people.

Larry Page and Sergei Brin believed Yahoo’s human curation, Alta Vista’s crude spidering and other players were all mistaken.

None started as obvious successes. A steady capitalization of wins led each to dominance.

So, in your business, what is the world mistaken about?

To date, I’ve been bootstrapping SwiftCloud, patiently building component applications, which stand on their own. Individually, they’re just innovations, not truly disruptive. The value will become clear as multiple separate components (all in the B2B space – CRM, marketing, e-signature, etc.) come together into a tightly integrated whole and mini-brand.

AI for Business – the Disruption Kit

Until recently, the ability to distill meaning, patterns, and relative importance have been uniquely human tasks.

At SwiftCloud, the next generation of our code is built to  handle 9 billion human record datasets, i.e. the population  of the planet. While this may sound ambitious, it’s the inevitable outcome of any marketing software. Tech-heads like me see not just massive data as inevitable, but new correlations within it as beautiful, fascinating, and a land of limitless possibility.

As you can see in this video from Palantir, software is moving up the pattern-recognition and thus meaning-extrapolation quickly. Moore’s law means AI gets exponentially closer, not linearly.

It’s probably no secret to think every business on the planet will be affected by a transition to machine-intelligence driven decisions, and it’s happening faster than you think. This is the “internet in 1999” level close. Buy Intel Stock, because we’re all about to start consuming CPU time by factors of 10x or 100x distilling this data.

From a programming perspective, true intelligence is a solvable problem. It’s an input sent into a hierarchical decision tree which itself is a recursively self-optimized nonlinear weighted signals series of trees based on previous dataset multiplied by bias or values.

So by adding a testing mechanism of input and output data, any rule can quickly be recursively self optimized, further refined based on nonlinear value weighting.

Let’s walk through “what should I eat for lunch? – but the input question can be anything.. what stock to buy / sell / short / option, who to hire, etc.

Step 1: Pick a few signals and ballpark a weighted importance*

*In the real world, importance is usually nonlinear, usually following a few simple math equations (i.e. binary, exponential, logarithmic, etc.)

In the lunchtime decision, input factors include:

  • Procurement difficulty (time, effort…)
  • Health
  • Taste
  • Values (Vegan, etc.)
  • Cost
  • Social factors (eating alone? with a date to impress?)
  • Emotional status (stressed, depressed, or motivated and inspired to finally get that six pack?)

These are various priorities. If you have $50 in the bank, cost is a factor, but importance is logarithmic – having $50mil in the bank won’t likely change what you eat day to day vs. $5mil in the bank. Values like vegan are binary inputs – some foods are out.

Step 2: Create an Input-Output Feedback Loop

Here’s an example: In SwiftTasks, we monitor time-to-completion to estimate a given worker’s turnaround time based on task-category, weighted by previous accuracy scoring. In SwiftCRM, the overly optimistic sales rep who continually overestimates his closings by 83% will be discounted by 83% in the reporting to the manager / CEO.

This loop self corrects, as the sales rep learns from scoring, unless he/she is delusional. The goal of this loop is learning, and given more data, the simple average rule can be distilled with patterns – retail foot traffic following seasonal patterns, then later aligned with weather patterns from another dataset to predict store inventory needs or staffing requirements for the next 14 days. True AI for Business then chains this prediction to actual scheduling and inventory ordering. The inputs get increasingly automated, more accurate, and able to do more.

The loop is then closed when tied to employee time clocks and actual sales data to then correct the algorithm.

True AI for business will then consider other additional inputs on its own – traffic construction, macroeconomic data, marketing spend to get increasingly more accurate.

This is where more data is crucial, and independent small businesses and sole practitioners will be at a real disadvantage.

Capitalism is about to get even more polarized.

Step 3: Start Connecting Inputs (Signals) to Outputs (Automations)

Here’s where things get interesting – implementation. At SwiftCloud, we’re heavily into helping lead-gen businesses who sell offline (real estate, finance, etc.), so the desired output is quality leads. While ambitious business owners usually want to “floor it”, a healthier choice is to treat operational availability as an input, affected by lead time, which affects your media buys programmatically. Totally maxed out? Bring down your spend until you hire help, but the moment you hire help, kick it up again. While this is management 101, what’s new is the simplicity of managing these once the input (% of operational availability) is tied to the output (ad spend, thus affecting incoming leads and sales).

In staffing, things like someone updating their LinkedIn profile may be an indicator the person is thinking of leaving. Alone, it’s just one signal – but combined with others, say, anonymous candidates with similar skills, similar cities showing up online may correlate into an employee ready to move. If that’s your employee, trigger a retention script – conversations, bonus, personal attention, promotion, etc. – if you’re looking to hire, pounce quickly.

Step 4: Optimize toward Self-Optimization.

All this fancy sounding automation may start with a crude google doc, or hacked together php app at first – but any business can start moving in this direction, and profiting from it. For a while – maybe even a few years – you may be the connector, but you’ll have clear data on one side (the inputs), and easier controls on the other (the output).

Crafty coders (including me) can then connect beta software that starts in “Simulation Mode”. The software would calculate what it thinks should be done, and you can review, accept, decline, or be advised by it.

Important in any design is that the accuracy-score of each output can recursively affect the input-weighting, so that accuracy itself is another input into the meta-algorithm affecting the design of the primary algorithm.

We do this in the real world, via simple checks and balances, which shows up via disapproval, loss of money, discipline from parents, physical pain, etc. – a corrective input to modify the algorithm.

This is over simplified, of course, and the code will “fly off the rails” yielding useless data without things like value dampening and vector isolation, but if you’re still reading, you get the idea.

As the optimization loop flows through, any well designed system will become increasingly accurate, provided the signals are correct, and weighting starts at least in the ballpark.

Infants throw food on the floor (input), triggering an exciting and interesting reaction from parents (output), gravity, mess, leading to conclusions about their world, each of which builds on another. Auditory symbols are further symbolized into written symbols, leading to a hierarchy of ideas, when combined with value and bias, equal a human, whom we experience via input (approval experienced through a smile) based on output (a smile). While some believe in an ephemeral soul, it may well be we’re simply our “coding + a hard drive of experience”, and a soul could be simply a concept created by self aware intelligence uncomfortable with mortality. Self awareness and mortality are heady concepts to think a robot could comprehend – but that’s because humans are wired to predict in a linear fashion.

We might be in a computer already. Why not let our own computers do some of your work?


Startup Strategy: War Games

I love history, and find specifically war history fascinating. We are incredibly fortunate to be living in a time of relative peace, at least in the USA.

Yesterday, while both working and watching “WWII From Space“, a history channel special, my mind drifted to analogies of business.

One of the key turning points of the war was the U.S. effectively taking out the oil supplies, leaving german tanks and aircraft stranded. It wasn’t enough to have these incredible weapons – they were slightly worse than useless. They cost the germans money (resources – time and money that could have been applied elsewhere), so each tank, gun, ship, plane was effectively a mini project at a net loss.

Cash Flow is the life blood of a startup.

This is startup 101, but there are deeper lessons here:

  1. First, as Eric Ries pointed out, failure to create the code required is rarely the cause of death in a startup – more likely is failure to reach meaningful clientele. In war terms, the Germans made real progress in the invasion of the USSR, but failed to reach the critical oil fields in the balkans – and that one problem left them vulnerable.
  2. You need a Britain before you storm Normandy. You need a safe base (cash flow + feedback from clients) from to base your operations. Had Britain fell to the Germans, the US would have had a much more difficult time helping retake the continent. Even a tiny base of clients – a dozen in B2B software like us – can help mount an offensive against a well entrenched competitor.
  3. Tactics shape strategy, and strategy defines use of tactics. If you’re strong on customer passion, tapping into social media and referrals is sound strategy. Some industries (say, life insurance) are a lot less likely to get meaningful traction, at least until someone has something truly worth talking about. The germans started strong at sea (via U-boats), but the americans later overwhelming dominated the sky. Each played to their tactical strengths.
  4. Focus & Timing are critical in choosing what battles to fight. One well entrenched indirect competitor who dominates a certain space is leveraging their awareness into a core space of ours. Frankly, we’re not ready to fight that battle yet head-on, so we are flanking them by attacking from the side, i.e. building awareness over other messaging. Initially, the U.S. more or less ignored Japan, despite a direct attack at Pearl Harbor, choosing to mostly focus the beginning of the war on Europe.
  5. And last, a single massive 10x improvement can end the war – for a while. The A-Bomb capped of the war, effectively, even though the tide had already turned. A single massive disruption, with application and consumers who know about it, can kick your startup into the hockey-stick growth curve every entrepreneur dreams about. If you don’t have enough mind-share and marketing for the disruption to buy you perceived dominance, cross the chasm, with enough of a lead on the competition, you’ll end up as Nikola Tesla (brilliant, but broke) instead of Thomas Edison (possibly a thief, but rich, and a hard worker).

I’m sure there are dozens of other lessons – comment below if you care to throw yours in.


Sales Automation Consultant

Recently, I was doing some sales automation consultant work designing a workflow, and it got messy.

“Messy” in this case means “ambiguous”, and that ambiguity in a sales workflow costs time and performance, since it then means reps leave leads in “stalled” status, unclear as to what, precisely, to do.

“Stall Status” is as important in sales automation
as is zero in base 10 mathematics.

By distinctly clarifying, we can help engineer success, and create a platform for useful, powerful, and effective sales automation. Below is a series of steps that may help you work with any sales automation consultant – and these are not respective to any tool.

Paper & Pen is the best tool here.

And a few colored highlighters.

  1. First, map the steps of your general sales flow from “prospect” or “suspect” – someone who you think is a good match, but may have not even raised their hand and said they’re interested, through to paid, closed and referring you business as a raving fan.
  2. Add in the possible outcomes (i.e. left voicemail, and thus trigger a loop to call back 3x or 5x or 20x), also things like interested or not interested, need to sell an additional stakeholder (i.e. wife, husband, biz partner)
  3. Separate previous-dispositions from the next steps. In Swift CRM‘s configuration files, we have “stall status” as one possible outcome – file does not advance, client didn’t answer phone, didn’t review proposal, etc., so that disposition then triggers a loop – call back in a few days or pre-scheduled time. Currently, our CRM / sales automation software is configured on
    1. Next Steps – General steps to the sale – i.e. initial call, needs assessment, product-needs fit, verbal commit, paperwork, closed transaction, etc.
    2. “Stall Status” – some outcome happened that did not advance the file i.e. left voicemail. This is an outcome, but needs to be tracked – but it stalls the sale. Frankly, stalled sales is why you need a CRM, but it’s usually part of the game for any sale over a few hundred dollars.
    3. Simple “goto” style commands – if the prospect got the proposal, is she qualified and interested? Stuck on price? Ready to apply? If you don’t know your best next step, your sales reps have to slow down and invent their own flow. Our XML is simple logic like “goto 200”, but you just need to always clarify what is the next step. If there is no next step, then it’s move on to the next deal, or work on marketing.
    4. Note contextually relevant needs – usually the calendar. If a callback is requested, the specific date to call back is immediately scheduled. Looping call backs, with attempt-number-logging, can be built in – i.e. try 5x then abandon lead, which gets escalated to company “shark tank” anyone can later take over and is also incubated via email.


By clarifying previous disposition (left voicemail, 3rd attempt) from next step (confirm contract receipt) and “stall status” loop-triggers (deliverable X is not yet ready, credit repair, gathering funds, etc.) you can help your sales team close more deals.


Our deep philosophy at SwiftCloud is that software should conform to human patterns, not the other way around. Whether you call your clients “patients” or “borrowers” or “patrons” is how your software should look to you – and this includes the sales flow. Whatever your culture, don’t make your team conform to software.

How to solve messy startup code in tech startups

The short answer: Don’t. Not right away.

As the Navy Seals say, get comfortable with being uncomfortable.

The longer answer: Wait until your audience validates what you’ve created. Features and single pages can also be looked at as a minimum viable product.

When Twitter launched, it famously had serious uptime problems. The core app was whipped together in literally a weekend, using Ruby on Rails. As usage grew, they stabilized, cleaned up – and tweaked direction using real-world use data.

At SwiftCloud.io – my startup – and more specifically, SwiftCRM and Swift Marketing, my CTO / lead programmer is frequently not happy with the specs given, and/or code that has a bit more duct tape than he likes.

For better or for worse, this is startup life. Perfect is the enemy of done. Slap it together (provided you’re not leaving security holes and/or destabilizing core functions) until your clients are truly getting value.

If everything seems under control, you’re not going fast enough. — Mario Andretti

As the audience grows, code will get rebuilt and refactored for stability and real-world needs. In other cases, the UI and needs evolve after some real-world use, and everything gets tweaked anyway.

Buffer aims for about 10% of their time to be spent on refactoring, and I think that’s a good loose guide. More practically, it gets balanced into priorities, and when we refactor, it’s usually for a specific reason – to make things higher performance (i.e. faster to the page), add features, solve a bug or mis-configuration, etc.

After we’re clear the function is valuable, and in use, and not likely to change much, only then do we go back and develop the nice clean waterfall style specs every coder dreams of.