跳到主要内容

技术领导力雷达

· 阅读需 4 分钟

如何评估技术领导者的表现?每个公司或个人都有自己的工程标准。而这些标准通常专注于特定角色 - IC(软件工程师、产品经理、设计师)或工程经理。是否存在一个统一的框架来评估技术领导者可能带来的潜在商业影响?以下是要求:

  1. 全面覆盖
  2. 可操作性
  3. 可参考以建立强大的团队

我自己和我的朋友们的回答

  • 决策能力:战略、战术和更快地做出基于事实的决策。从小胜利逐步推进到更大的胜利,惠及个人和组织。收集信息,诊断以获得见解,制定指导政策并采取一致行动。区分事实与观点,确保选项具有可信度。探索整个过程中的创新,创新意味着做出改变,使事情变得更好10倍。在时间窗口内快速做出初步决策,反思结果,然后在生命周期/年/季度/周的层次中迭代。

  • 执行引擎:建立系统以提供更多并提高质量,而不是为少量交付物感到自豪。关注细节。推动跨职能团队朝着你的独特愿景前进。根据客户的要求平衡速度、质量和范围。

  • 领域专业知识:追求不可教授的特殊知识。亲身经历。市场奖励独特性。

  • 产品意识:培养对优秀产品的直觉。用数据感知市场和行业。以适当的流程构建和运营产品。在大局中与其他元素综合。发明和简化。计划和管理变革。以客户为中心。

  • 人员与文化:与他人合作:与人共同塑造世界。以身作则。团队合作。让人们快乐,然后提高生产力。经常对人和项目进行分类/保持专业判断。用内在和外在动机激励人们。组织 = 人 + 文化。既有能力又温暖。讲述一个首先激励自己热情的故事。赋权于人们以实现更多。自我驱动。倾听他人并激励他们分享。招聘和指导团队。谦逊,低自我。最佳想法胜出。成长心态。

  • 协同与机智:对资源进行对齐或连接。1 + 1 > 2。优化客户、分销渠道、产品、人员、技术和资本的网络。长期进行声誉游戏。让更多人变成利益相关者,并朝着共同目标对齐。

DC/EP与央行数字货币

· 阅读需 4 分钟

DC/EP 是央行数字货币电子支付 Digital Currency Electronic Payment 的缩写

  • 是:一个双层的研发与试点项目计划
  • 不是:一个支付产品

电子支付的现状

中国一大半的人口已经用上了电子支付,个人消费中一大半的支付手段是移动支付

DC/EP 想要解决什么问题?

  1. 消费者需要更好更便宜的支付手段,核心用例是零售
  2. 手机整合取代了很多东西比如身份证、钥匙、钱包
  3. 商家的应用场景既有线上的也有线下的
  4. 鼓励上层各种机构的竞争与创新
  5. 保护隐私

双层体系

  • 第一层是央行
  • 第二层是商业银行、电信营运商、互联网支付平台

第二层有动机和成本去把工作做好,第一层会确保第二层承担足够的风险和责任。

如何推进?

小国比较简单,一年就能将纸币更换到塑料钞票;而中国每一次人民币更新换代都花了10年左右,而仍然有很多遗留问题。好在多个方案并行也不是不可以,因此方案的持续的可拓展很重要。

央行的主要任务之一是维持币值稳定

  • 研发重点不在数字货币产品本身,而在于结算和清算。
  • 提高不同的支付产品的连通性
  • 准备好应急和替代方案

主要的技术方案

  1. 以账户为基础的电子钱包,商户使用二维码
  2. NFC

其他的比如银行卡,IC卡

隐私保护

既要保护用户隐私,但是不能 100% 匿名,要接受权威机构的监管。

区块链的问题

其中的备选方案区块链和分布式记账还在研发中,但是

  1. 吞吐量不足,无法支持零售的用例
  2. 不可篡改性与把付错钱后冲销 charge back 的需求有冲突

跨境支付

Libra 把跨境汇款作为应用的侧重点是有问题的,因为零售终端不能直接使用导致存在跨境两边的两次兑换的问题。

各个国家国情不一样导致阻力很大,比如国际上大家都关心反洗钱、反恐、反资毒,而中国还会关注反赌博。很多国家有防止美元化的需求。

迈克尔波特的五力分析模型

· 阅读需 1 分钟

分析企业的竞争环境有哪些主要的考虑因素?

新玩家、老玩家、我买的、买我的、其他维度可以替代我的。

竞争力的本质是什么?

不可替代性,即高需求的独特性 (uniqueness in high demand)。

技术领导力雷达

· 阅读需 3 分钟

通常的 engineering rubrics 专注于某个具体的领域,比如 IC (软件工程师、产品经理、设计师) 或者 manager,能否提出一个大一统的框架,以衡量技术工作者的商业影响力?有这样一些要求

  1. 全面
  2. 可执行
  3. 对组建团队有指导意义

我和朋友们的答案

  • Decisiveness 决策力:战略、战术、决断力。为自己或者别人的个人或组织做合适的/赢面最大的决定。搜集信息、诊断以得到 insight、提出有效的策略和执行方案。创新。在机会窗口内/限定时间内/没有所有信息/无法准确预测未来的时候,快速决策,在迭代中改进

  • Execution Engine 执行引擎:打造一个执行引擎而不是执行本身,以有效地影响自己和他人的产出、根据需求精准地调和速度/质量/范围, craftsmenship

  • Domain Expertise:special knowhow, been there/done that, uniqueness

  • People and Culture:Work with others: shaping the world together with people. Lead by example. 团队合作、人力管理、绩效与激励、文化、价值观、能干 + 温暖、心态、热情、自我驱动力、倾听与分享、hiring and coaching team、humility, low ego. best idea wins. growth mindset

  • Product-Sense:好的直觉、对市场和数据的理解、产品管理(包括运营)、项目管理、协同/synthesize、发明与简化、计划与变化、对客户的 obsession

  • Synergy & Resourcefulness: 资源整合力,全局上对客户、渠道、产品、人、技术、资本的网的优化,公司内部结交利益同盟并且有效协调不同组织的 alignment

微服务中的身份验证和授权

· 阅读需 12 分钟

需求

  • 设计一个从简单开始但可以随着业务扩展的身份验证解决方案
  • 考虑安全性和用户体验
  • 讨论该领域的未来趋势

大局观:身份验证(AuthN)、授权(AuthZ)和身份管理

首先,回归基础

  • 身份验证:确定你是谁
  • 授权:确定你可以做什么

在开始时……让我们有一个简单的服务……

  • 分层架构
  • 客户端存储一个cookie或token作为登录状态的证明。(代客钥匙模式)

  • 服务器持久化相应的会话
  • token通常采用JWT格式,由从安全位置(环境变量、AWS KMS、HarshiCorp Vault等)获取的密钥签名

  • 流行的Web框架通常提供开箱即用的身份验证解决方案

然后,随着业务的增长,我们用AKF规模立方体来扩展系统:

  • X轴:水平克隆
  • Y轴:功能分解
  • Z轴:分片

加上康威定律:组织设计的系统反映其沟通结构。我们通常将架构演变为微服务(参见为什么选择微服务?了解更多)

  • 顺便说一句,“微服务与单体”和“多仓库与单仓库”是不同的概念。
  • 对于企业,有员工身份验证和客户身份验证。我们更关注客户身份验证。

在微服务世界中,让我们抽取身份验证和授权服务的功能切片,并有一个身份和访问管理(IAM)团队在进行相关工作。

  • 身份感知代理 是一个反向代理,允许公共端点或检查受保护端点的凭证。如果凭证未提供但被要求,则将用户重定向到身份提供者。例如:k8s ingress controller、nginx、envoy、Pomeriumory.sh/oathkeeper等。
  • 身份提供者和管理者 是一个或几个通过某些工作流(如登录、忘记密码等)管理用户身份的服务。例如:ory.sh/kratoskeycloak
  • OAuth2和OpenID Connect提供者 使第三方开发者能够与您的服务集成。
  • 授权 服务控制谁可以做什么。

身份验证

身份提供者

  • 最简单的解决方案是提交用户的身份证明并发放服务凭证。
    • bcrypt、scrypt用于密码哈希
  • 然而,现代应用程序通常处理复杂的工作流,如条件注册、多步骤登录、忘记密码等。 这些工作流本质上是状态机中的状态转换图。

工作流:用户设置和个人资料更新

Ory.sh/Kratos作为示例架构

2. 第三方OAuth2

OAuth2让用户或客户端经历四个主要工作流(不确定使用哪个?请查看这个),如

  1. Web的授权码授权
  2. 移动的隐式授权
  3. 传统应用的资源拥有者密码凭证授权
  4. 后端应用流的客户端凭证授权

然后最终获得访问令牌和刷新令牌

  1. 访问令牌是短期有效的,因此如果被泄露,攻击窗口很短
  2. 刷新令牌仅在与客户端ID和密钥结合使用时有效

假设在这个工作流中涉及许多实体 - 客户端、资源拥有者、授权服务器、资源服务器、网络等。更多的实体会增加被攻击的暴露。一个全面的协议应该考虑所有边缘情况。例如,如果网络不是HTTPs /不能完全信任怎么办?

OpenID Connect是基于OAuth2的身份协议,它定义了可定制的RESTful API,供产品实现单点登录(SSO)。

在这些工作流和令牌处理过程中有很多棘手的细节。不要重新发明轮子。

3. 多因素身份验证

问题:凭证填充攻击

用户倾向于在多个网站上重复使用相同的用户名和密码。当其中一个网站遭遇数据泄露时,黑客会使用这些泄露的凭证对其他网站进行暴力攻击。

  • 多因素身份验证:短信、电子邮件、电话语音一次性密码、身份验证器一次性密码
  • 速率限制器、失败禁止和异常检测

挑战:电子邮件或短信的送达率差

  • 不要将营销电子邮件渠道与事务性渠道共享。
  • 语音一次性密码通常具有更好的送达率。

5. 无密码

  1. 生物识别:指纹、面部识别、声音识别
  1. 二维码
  • SQRL标准
  • 另一种实现方式:

  1. 推送通知

客户端如何订阅服务器的状态?短轮询、长轮询、WebSocket或服务器推送事件。

4. 市场上的供应商

不要重新发明轮子。

6. 优化

挑战1:Web登录非常慢或根本无法提交登录表单。

  • JS包对于移动Web来说太大
    • 构建一个轻量级的PWA版本的SPA(单页面Web应用)。无论如何使包小 - 例如,preact或inferno
    • 或者根本不使用SPA。简单的MPA(多页面Web应用)与原始HTML表单提交效果很好
  • 浏览器兼容性
    • 使用BrowserStack或其他工具在不同浏览器上进行测试
  • 数据中心距离太远
    • 将静态资源放到边缘/CDN,并通过Google骨干网中继API请求
    • 建立一个本地数据中心 😄

请参见Web应用交付优化以获取更多信息

挑战2:账户接管

挑战3:账户创建耗时过长

当后端系统变得过于庞大时,用户创建可能会分散到许多服务,并在不同数据源中创建许多条目。在注册结束时等待15秒感觉很糟糕,对吧?

  1. 收集并逐步注册
  2. 异步

授权

isAuthorized(subject, action, resource)

1. 基于角色的访问控制(RBAC)

2. 基于策略的访问控制(PBAC)

{
"subjects": ["alice"],
"resources": ["blog_posts:my-first-blog-post"],
"actions": ["delete"],
"effect": "allow"
}

挑战:单点故障和级联故障

  • 预处理和缓存权限
  • 利用请求上下文
    • 假设:数据中心内部的请求是可信的,而外部请求则不可信
  • 失败开放与失败关闭

隐私

1. 个人可识别信息(PII)、受保护的健康信息(PHI)、支付卡行业(PCI)

西方文化有尊重隐私的传统,尤其是在纳粹杀害数百万人之后。 以下是一些典型的敏感数据类型:个人可识别信息(PII)、受保护的健康信息(PHI,受HIPAA监管)和信用卡或支付卡行业(PCI)信息。

2. 差分隐私

仅仅删除敏感信息可能不足以防止与其他数据集相关的数据泄露。

差分隐私帮助分析师从包含个人信息的数据库中提取数据,但仍然保护个人隐私。

3. 去中心化身份

为了将身份与集中式身份提供者及其相关的敏感数据解耦,我们可以使用去中心化身份(DID)

  • 它本质上采用URN格式:did:example:123456789abcdefghijk
  • 它可以从非对称密钥及其目标业务领域派生。
    • 与传统方式不同,它不涉及您的个人信息
    • 请参见DID方法了解其如何与区块链一起工作。
  • 它通过以下方式保护隐私
    • 为不同目的使用不同的DID
    • 选择性披露/可验证声明

想象一下,艾丽斯有一个州政府颁发的DID,想在不透露真实姓名和确切年龄的情况下购买一些酒。

饮酒

一个DID解决方案:

  • 艾丽斯有一个身份档案,包含did:ebfeb1f712ebc6f1c276e12ec21、姓名、头像URL、生日和其他敏感数据。
  • 创建一个声明,表明did:ebfeb1f712ebc6f1c276e12ec21超过21岁
  • 一个受信任的第三方签署该声明,使其成为可验证声明
  • 使用可验证声明作为年龄的证明

总结

本文概述了微服务中的身份验证和授权,您不必记住所有内容才能成为专家。以下是一些要点:

  1. 遵循标准协议,不要重新发明轮子
  2. 不要低估安全研究人员/黑客的力量
  3. 完美是很难的,也不必完美。全面优先考虑您的开发工作

BOZ 个人成长循环

· 阅读需 2 分钟

建筑师通过系统思维对世界进行建模,以优化一切。作为一名工程师和商人,我不断致力于工作与生活的协调,并保持高个人成长率。所学到的经验教训被概括为 BOZ 成长循环。

个人成长循环

BOZ 是一个大循环的缩写,它包含三个小循环:

  • 建造与销售循环。构建产品并销售它们。解决问题并获得报酬。
  • 展望与投资循环。保持极大的好奇心,从事实中寻求真相。优化客户、渠道、人员、技术和资本的网络。
  • 禅 MSEP 循环。保持当下,心怀觉知地做一切。通过运动、睡眠、饮食和与人良好相处来滋养身心。

两种压力来源

压力对人们来说是好事,而痛苦则不是。

  1. 停滞:你在循环的某一步骤中停滞不前。
  2. 摩擦:过多的摩擦阻碍了小胜利的实现。

使用 RACI 和 DACI 明确责任

· 阅读需 2 分钟

当组织规模过大时,谁应该做什么以及谁应该决定做什么变得不明确。RACI 和 DACI 旨在澄清这些责任。

  • RACI:确定谁做什么类型的工作
  • DACI:确定谁决定做什么

这里的假设是,太多项目并行进行,容易失去重点。我们应该更多依赖团队成员之间的相互推动,而不是依赖一个人作为单一故障点。

RACI

RACI 是该模型的首字母缩略词:

  • Responsible(负责):谁负责某些类型的任务?
  • Accountable(问责):哪个人是工作的所有者,并对成功和失败负责。
  • Consulted(咨询):在完成之前,哪些利益相关者应该保持在信息循环中。
  • Informed(知情):谁应该被告知进展情况,尽管他们没有正式被咨询或指导参与项目。

DACI

DACI 是该模型的首字母缩略词:

  • Driver(驱动者):谁在推动决策过程达成结论?
  • Approver(批准者):谁在批准决策。
  • Contributor(贡献者):谁应该对决策做出贡献。
  • Informed(知情):谁应该被告知最终决策?

为什么它们有帮助?

  • 它们使责任和问责变得明确
  • 这些模型引入得越早,它们对项目的帮助就会越长久
  • 它们平衡资源分配,以避免单一故障点或过度疲劳

Dropbox 如何扩展其设计研究

· 阅读需 2 分钟

Dropbox 的设计研究团队从 4 名成员增长到今天的 30 多名。他们如何在团队人数有限的情况下健康地扩展工作?如果研究进行不当,更多的研究通常意味着更多的危害。

扩展过程中面临的主要挑战是:

  1. 未经过培训的研究人员会提出糟糕的问题,误解数据,并做出错误的决策。
  2. 用户研究无论如何都会进行,无论是否有研究运营团队。
  3. 非专业人员应该进行什么样的用户研究,而专业人员又应该进行什么样的研究?

Dropbox 的解决方案

  1. 为无调节研究提供合适的工具。例如:UserTesting、UserZoom、Lookback。
  2. 实际世界星期三。像研究快速约会,5 名研究人员与 5 名用户每人会面 15 分钟。
  3. 提供内部咨询。

如何提供内部咨询?

  1. 文档:物流、模板、隐私和安全、技巧和最佳实践(大量的操作指南)。
  2. 一对一咨询。

结果

  • 对于专业研究运营团队
    • 他们有更多的时间和精力专注于更大的战略项目
  • 对于团队和产品
    • 他们进行更多的研究
    • 他们构建更好的产品
    • 他们受到研究运营团队的阻碍更少
    • 他们更尊重研究运营团队
  • 对于用户
    • 他们获得更多的同理心

风险

  • 仍然,糟糕的研究会导致糟糕的决策。
  • 确保质量很困难。

Dropbox 如何扩大其用户调研的规模

· 阅读需 2 分钟

Dropbox 的用研团队从 4 人发展到今天的 30 多人。在用研团队人数有限的情况下,如何健康地扩大工作规模?如果研究工作做得不当,更多的用户调研通常意味着更多的伤害。

而规模化过程中面临的主要挑战是

  1. 未经培训的研究人员会提出错误的问题,曲解数据,并做出错误的决策。
  2. 不管有没有用研团队,用户调研还是会发生。
  3. 什么样的用户研究应该由非专业人员来做,什么样的用户研究应该由专业人员来做?

Dropbox 的解决方案

  1. 提供合适的工具给未管制的研究.如 UserTesting、UserZoom、Lookback 等。
  2. "真实世界周三"。像速配约会一样,5 个研究员与 5 个用户见面,每人 15 分钟。
  3. 提供内部咨询。

如何提供内部咨询?

  1. 文档:物流、模板、隐私和安全、技巧和最佳实践(大量的 how-tos)。
  2. 一对一咨询

结果

  • 专业的用研团队
    • 他们有更多的时间和精力专注于更大的战略项目
  • 对于团队和产品
    • 他们能够进行更多的研究
    • 他们制造更好的产品
    • 他们被用研团队更少地 block
    • 他们更尊重用研团队
  • 对用户而言
    • 他们得到更多的同情

风险

  • 仍旧是糟糕的研究会导致错误的决定。
  • 很难保证质量。

构建个人基础设施

· 阅读需 7 分钟

为了享受构建软件、媒体和社区的生活作为一个 ==爱好(这里的所有事情与我的工作无关)/ 纯粹的乐趣== - 为什么要构建个人基础设施?有哪些策略和执行方法来发展爱好项目?我目前的进展如何?

一切都从玩耍开始

小学

玩中国版的田宫迷你四驱车

在DOS上玩电脑游戏。

使用Macromedia Authorware进行编程入门

初中

  • 用Microsoft FrontPage建立一个网站来跟踪2003年伊拉克战争
  • 在数字字典上用QBasic制作一个文本游戏

然后你可以在堆满教科书的教室里玩 :)

高中

  • 用乐高Mindstorm RCX为FIRST乐高联赛挑战赛构建
乐高机器人挑战

大学与研究生院

  • 使用SQL注入为我的室友的学校餐卡增加20元人民币的积分。然而,两天后,他们被收银员叫了……哈哈。

  • 嗅探一个有声读物应用,然后基于其API,构建自己的Android应用以获取免费音频。

为什么编程有趣?

… 制作复杂的拼图般的互锁移动部件并观察它们在微妙的循环中运作,体验从一开始就内置的原则所带来的后果的迷人之处。

— 《神话般的人月》

好吧,这很有趣。爱好与个人基础设施有什么关系?

  • 建造者无论如何都是为自己建造的。为什么不与他人分享呢?
  • 建造者无论如何都会建造东西。为什么不把它们做大呢?

同时,我遇到了一些令人震惊的文章。

我得出结论:

  • 亚马逊的飞轮是为高固定成本和优化规模回报的商业而构建的。
  • 我的生活有高固定成本(有限的时间和精力),在这种情况下,规模经济是值得追求的。
  • 我可以通过强大的个人基础设施获得随着时间推移而逐渐增加的优势,达到超出我想象的成就。

此外,我从之前的PMF前创业经验中获得了一些启示

  1. 寻求以留存为先的数据驱动增长。Sean Ellis:“关注客户获取而非‘知名度’需要纪律……在某种规模下,知名度/品牌建设是有意义的。然而,在头一两年,这完全是浪费钱。”
  2. 基本条件就是基本条件。你不需要风险投资来构建初始产品。点子只是点子。建立你的团队,构建你的产品,并与人合作。

发展个人基础设施策略

执行

这是我爱好项目的架构。

技术栈

技术:React、React Native Expo、GraphQL、KOA、TypeScript、AVA、Webpack、Airflow、MongoDB、Python Pandas和Flask、Svelte、Metabase、Golang等。

服务器和API:Heroku、DigitalOcean、Azure、AWS、Github Pages、BunnyCDN。

成为早期采用经过验证的新技术的主流

系统架构

专注于构建,而不是浪费时间在SRE上

示例1

示例2

“这个架构不是未来-proof的!/ 不可扩展!”

好吧...

  • 服务大多是无状态的,水平可扩展
  • 服务协作是一个问题,但你无论如何都必须在与不同的人合作和实现个人IaaS(可单独出售)时将它们隔离。
  • 始终可以演变为Kubernetes。

个人根指标

过上平衡的生活,保持一切正常,通过数据进行衡量

“以留存为先增长”的关键指标是用户群分析。

参考基准:

行业第1天第7天第30天
2C402010
电子商务35155
游戏3015<5
教育科技25105
  • 值以百分比为单位

结果

产品

  • Beancount.io:轻松实现双重记账,过上最佳财务生活
  • touchbase.ai:个人CRM:聪明地参与更有意义的关系
  • coderoma.com:每天一个编码挑战

框架

  • onefx.js.org:快速高质量构建Web和移动应用

帮助我的朋友的项目从零开始

  • CocuSocial: 发现不同的饮食和饮品体验
  • 帮助我在IoTeX的日常工作中构建质押门户、区块链浏览器、桌面钱包等。
  • 更不用说其他一些失败的项目了...

媒体:

社区:

  • github.com/puncsky/system-design-and-architecture

我可以使用你的项目或加入你的社区吗?

👍 当然可以,欢迎!它们大多是开源的或开放注册。感谢您成为我们尊贵的客户或社区成员!

👏 非常感谢您的反馈!

❤️ 喜欢吗?请查看此文章 https://tianpan.co 并在 https://twitter.com/intent/follow?original_referer=https%3A%2F%2Ftianpan.co%2F&region=follow_link&screen_name=tianpan10x 上关注我 :)