有时拒绝变化:用香农恶魔理解软件产品策略

古老的交易所为每位坐在橡木办公桌前的商人提供了两种投资选择:

  • 一个用来装硬币的保险箱。
  • 掷硬币者,给定一定数量的硬币,要么回馈两倍或一半。

每天,每位交易者都可以选择投资。

普鲁登斯无视了掷硬币的动作。整天坐在办公桌前看报纸,谨慎减轻压力,却代价浪费机会。

鲁莽无视了保险箱。下注并观看(有时)回报,让交易变得值得。鲁莽的硬币堆像悠悠球一样上下波动(尽管悠悠球还没发明)。

SD(香农的恶魔)坐在中间,异常忙碌。每次抛币后,他们都会重新平衡硬币——一半放进保险箱,一半放进翻转器。

过了一会儿,发生了一件奇怪的事。普鲁登斯的硬币堆积完全没变。鲁莽的堆积金币时而增长又缩小,一半时间上涨,一半时间下降。但SD的筹码随着时间增长。

同样的投资。结果不同。到底发生了什么?

什么?

在讨论长期波动率软件开发时,到目前为止,我说的好像我们总是想保持长期波动率(“拥抱变化”,有人愿意吗?)敏锐的读者兼好友Kunal Bhalla指出了例外情况,即何时以及如何做空波动率。

他还向我介绍了一个关于围绕波动率构建直觉的有力隐喻——Shannon的恶魔。(我喜欢这种直觉锐化器——另见多臂强盗.)

我的第一个目标是建立对SD战略如何运作以创造价值的直观理解。然后我们将将其应用于软件产品开发。

想象一个连续两天的连续比赛,一胜一负。Reckless最终会回到起点。而SD则会上涨。赢后SD会“存入”部分奖金,使第二天的损失比Reckless的更小。

如果Reckless下注100枚硬币,他们最终会得到100枚硬币——(100 * 2 / 2)。SD在第一天后会得到50 + (50 * 2) = 150,然后是75(再平衡)+ (75 / 2) = 112.5。

换天,输了再赢。鲁莽的数字完全相同,(100 / 2 * 2)。SD的50 + (50 / 2) = 75,然后是37.5 + (37.5 * 2) = 112.5。

以下是所有四条路径。

鲁莽最终会有大胜和大败,但通常收场平稳。SD放弃上升空间,避免下跌,通常赢。鲁莽希望翻转器运行热。SD希望翻转器继续翻转。

3X:提取

处理这种抛硬币(双倍或半)的默认策略是不断重新平衡。提取是软件产品开发中最像这样的部分。你做出改变,也许能获得一些客户或收入,也可能失去一些。

在这样的环境下,SD产品战略最为合理。保护收入流。投资一些增长。降低成本。尽可能保持变更可逆性。

3X:探索

如果我们把翻转器改成赢了三倍,输了只输三分之一呢?

“鲁莽”的标准比你赢什么输什么更复杂。以结果对——赢了然后输,输了再赢。在之前的回报方案中,这没有利润。而在不那么平衡的翻转器中,我们通过全押在翻转器上看到更好的回报。

只有当我们连续输钱时,结果才会更差,谁在乎呢?

  • 我们继续考虑下一个想法。
  • 而且,潜在的提升空间太大,我们会转向另一款游戏。

+300%/-33%的翻转看起来像是探索收益(实际数字由你自行选择)。所以在探索中,我们全力投入翻转。鲁莽可能是鲁莽,但它们并非不理性。

注意我们并不是在做基于投资回报率的决策。我们应该玩这个翻转器/保险箱组合吗?它能提供正期望值吗?这不是有趣的问题。有趣的问题是怎么会这样我们应该玩。

3X:扩展

扩展模式需要让模型更丰富。在扩展模式中,每个“回合”有3个结果:

  • 成功克服下一个增长瓶颈。(胜利的结果。)
  • 死去。失去一切。(失败的结果。它真的这会让你付出代价,因为它抹去了所有可能的未来收益。)
  • 切换到提取模式。(这个是新的。)

Explore纯粹是Reckless,Extract是纯粹的Shannon's Demon,而Expand则提供了一种创造价值的新策略:工程和运营投资以降低死亡概率。

可能是性能调优、保障未来资源,甚至是改进备份和恢复程序。通过以下方式创造价值:

  • 降低死亡风险,或者
  • 这增加了跨越下一个增长障碍的机会。

在扩展期间,需求正在吸引客户/使用量/收入。推动会增加风险。减少摩擦能让增长更持久。而这一切都发生在一个只能模糊看见和理解的系统里。

总有一天,旋钮和杠杆会变得清晰。那时你可以让香农的恶魔掌权。

附录:模拟器

我是程序员。我理解世界,这样我才能编程。我编程是为了理解世界。这里一个小模拟器我创作并玩弄这些作品,帮助自己直觉理解香农恶魔的主题。

再次感谢Kunal Bhalla提供推荐。我职业生涯中的一个幸运是,非常聪明的人愿意和我交流。

玩吧,朋友们!这是一种理解的方式。

const trade = (strategy) => {
  let coins = 100;
  for (let day = 0; day < 100; day++)
    coins = strategy(coins, Math.random() < 0.5 ? 2 : 0.5);
  return coins;
};

const prudence = (coins, flip) => coins;                  // all in the box
const reckless = (coins, flip) => coins * flip;           // all in the flipper
const demon    = (coins, flip) => coins/2 + coins/2*flip; // half & half, re-split daily

const median = (strategy) => {
  const results = Array.from({length: 1000}, () => trade(strategy)).sort((a, b) => a - b);
  return results[500];
};

console.log(`Prudence  ${median(prudence).toFixed(0)}`);
console.log(`Reckless  ${median(reckless).toFixed(0)}`);
console.log(`Demon     ${median(demon).toFixed(0)}`);

大多数球队没有策略问题。他们有适应性的问题。

你的计划根本无法经得起现实的考验。问题是,当你的组织没有弯曲时,它会不会弯曲或崩溃。

我帮助团队弯曲。适应以茁壮成长。

预订几张定制谈判以及咨询活动现在。我采访你们的团队,衡量你们的真实软件流,然后告诉你们真相以及该怎么做。

好奇它合不合适?跟我说说你的团队吧。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论