深思熟虑地写一篇博客文章

工程团队的博客帖子

更好的React/Rails架构

在Stitch Fix的造型团队中,我们正在通过向使用微manbetx万博体育app 官方下载服务和微前端(通过一个中央API连接)的应用架构转变,减少开发人员在任何给定时间需要的状态量。

远程文化中的技术决策和对齐

在一个异步通信的世界中,它比以往任何时候都更重要,以创建包含的包容性和远程友好的协作,决策,对齐和文档进程。

我和工程经理妮提卡·达加一对一通话

节选自Code Climate和Codecademy对如何从IC过渡到工程经理的采访,以及对新经理的建议。

TypeScript + React =❤️

从TSCONF 2020的谈话视频录制教学如何使用类型的强大类型可以防止React Apps中的错误。

人们如何在Stitch Fix中取得成功manbetx万博体育app 官方下载

当回顾我在职业生涯中所参与的各个团队时,我经常会想是什么让某些团队取得了成功,为什么其他团队会更加挣扎?了解Stitch Fmanbetx万博体育app 官方下载ix团队是如何建立成功的。

负责任的创新框架

如何成功的技术组织平衡需要创新的必要性,以维持精益,一致的技术堆栈?

三年的工程经验

今年12月以来,我加入了针针修复工程以来的三年。manbetx万博体育app 官方下载在那段时间里,我目睹了我们成立以来我们经历过公司的大部分增长。例如,2014年12月,大约有10名工程师,现在我们近100岁。这是我们在我们的SF总部的人们曾经坐在小型会议室桌上的时候,这是我们所有的掌握会议。同样,我们只需要一个稍微较大的表格,当我们的次级工程峰会期间我们的远程工程师(大约50%的团队)来到SF时略大。

欢迎来到可用电影之夜@ Stitch Fixmanbetx万博体育app 官方下载

灯光变暗,宾果牌发了出来,爆米花的香味(嗯,融化的黄油…)弥漫在走廊里……现在是可用性电影之夜,邀请所有人!

面向服务的体系结构模式:数据库事务

我一直没及时更新“面向服务的体系结构模式”系列文章,所以这里有一个关于历史悠久的关键技术的新文章:数据库事务。这是大多数SQL数据库的一个强大特性,允许您以“全有或全无”的方式对数据库应用一系列更改。

它是缝合修复的开发人员manbetx万博体育app 官方下载

最近增量发表了一篇关于成为一名开发者是什么感觉像fast、Lyft和DigitalOcean这样的大公司。我们认为写一篇博客来回答在Stitch Fix是什么样子的问题会很有趣。manbetx万博体育app 官方下载

内部软件:内部软件和数据科学

在Stmanbetx万博体育app 官方下载itch Fix我们当然有足够的数据,它是合格的,但自从我们收集数据以来,我们专注于使它成为丰富的尽可能。

了解基于消息和事件的系统中的失败模式

在基于消息或事件的系统中,系统可能会出现多种故障,处理这些故障所需的技术也各不相同。您不能仅仅切换消息传递基础设施或使用框架来处理所有故障点。即使底层基础设施是完美的,了解哪里可能发生故障也很重要。就像承认没有幸福的道路,你打算失败的方式影响产品决策。

密码生物学

似乎终端中无穷无尽的数据流是离活人最远的东西。纵观Stitch Fix代码库,我想到的manbetx万博体育app 官方下载是结构、信息系统、交换方法——而不是遥远的加拉帕戈斯群岛上的一群雀。

内部软件:为什么要构建内部软件?

软件将很快主导并彻底改变每个人生活的方方面面的观点,已经变得如此普遍,如此频繁地重复,以至于我们这些科技行业的人把它视为事实的陈述。一个不太明显但更具体的事实是,由于引进计算机技术而预期的生产力提高大部分还没有实现。

面向服务的体系结构模式:非规范化缓存

接下来是“面向服务的体系结构模式”我们将讨论如何处理跨多个表和服务的高度规范化数据,或者通过缓存非规范化版本的数据库来处理超出简单数据库范围的大型对象图。

面向服务体系结构的模式:等幂键

在我们的这一部分“面向服务的体系结构模式”系列,我们要讲一个复杂的概念叫做幂等性和一种可以应用于服务设计的技术,以确保所请求的工作只执行一次。

SOA模式:后台工作

在我们的“面向服务的体系结构模式”是一个很常见的问题,但它值得讨论。它在后台进程中运行代码,而不是在消费者可能正在等待的同步请求中。

我们讨论的是工程学

你可能已经听说了,我们分享更多关于缝线修复的信息manbetx万博体育app 官方下载。我们也在分享我们的专业知识。我们一直在忙着讨论我们如何在Stitch Fix构建系统。manbetx万博体育app 官方下载以下是我们团队在过去2-3周所做的一些演讲。

SOA模式:异步事务

这是第一部分“面向服务的体系结构模式”系列文章中,我们将从一个广泛应用的模式开始异步交易。当您的服务必须在向其使用者提供确定的结果之前执行长时间运行的任务时,可以使用这个简单的模式。

面向服务的体系结构模式

这是“面向服务架构的模式”系列博客的开始,它是基于我在Stitch Fix (themanbetx万博体育app 官方下载第一篇文章如果你想直接开始的话,它就会出现!)在过去的四年里,我们从一个由两名开发人员和一个Rails应用程序组成的团队,发展到近80名开发人员管理着40多个应用程序。这些应用程序是面向用户和无头服务的混合物。虽然我们的技术架构并不完美,但我们遇到的主要问题相对较少。部分原因是,我们在识别和重新应用模式以解决类似的技术挑战方面做得很好。

Tech Radar Spring 2017更新

我们一直试图使用雷达技术的概念作为一种记录我们正在使用的技术以及我们当前对方向的思考的方式。它被视为文档,而不是猜测,所以我们的技术雷达不应该包含没有实际生产中的东西。

不要重复发明轮子:快速的电子邮件验证

在自行车运动中,一个不摆动的轮子被认为是“正确的”。我们很满意我们在这里找到的电子邮件验证解决方案-这是*同样*正确的,并且不涉及重复发明轮子。

持续集成和部署iOS

如果我们没有强大的测试过程的纪律,我们就不可能有持续部署的奢侈。测试可以帮助我们确保每个新版本的应用运行良好,而不需要经过大量的手工QA过程。测试帮助我们持续自信地部署。

我和时间管理人员,独自待在雷雨圆顶

今天,我对自己与时间的关系感到很舒服。这对我来说是件新鲜事。我成年后的大部分时间,感觉就像一场与时间的死神之战。

与陌生人远程配对

在德克萨斯州的一个壁橱里,放着一张桌子,隔绝了孩子们的吵闹和碗碟的叮当声。从这里,我振作精神,与外面的世界联系。我接触其他开发者。

1:1从会议到乘数|

如果有一件事我们可能有共同点,这两者都有“1:1”。与您的经理有某种定期办理入住手续。如果你不这样做,我敦促你解决这个问题。

把“Erch”放在商品销售中

我的团队在缝合修复为我manbetx万博体育app 官方下载们的商品制定者构建了内部工具,他们负责规划和购买客户的库存。在内部,我们被称为“erch”团队。这是一个有趣的名字,缝合历史悠久,但我会保存这个故事另一个时间。manbetx万博体育app 官方下载相反,我有一个自己分享的故事。在加入ERCH工程团队之前,我在徽章队的缝合队开始了。manbetx万博体育app 官方下载

避免过度设计

很容易知道你是否处于工程阶段,因为你在生产草率的工作。要知道什么时候是过度工程就困难得多了。这一问题的根本原因是扩展了手头的问题,从而使解决方案比解决方案更有趣实际问题。

构建软件的永恒方式

1977年,20世纪一位重要的建筑师和多产作家克里斯托弗·亚历山大写了一本书,模式语言:城镇、建筑、建筑1979年又出版了另一本书,“永恒的建筑方式”。这些书都是关于建筑思维的,书中深入讨论了模式、模式语言和建筑的“方式”。

共享数据库

在Stmanbetx万博体育app 官方下载itch Fix,我们目前正在解决一个在快速增长的创业公司扩张过程中非常普遍的问题。我们的应用程序过度依赖于共享的数据库,为了让不同的工程团队彼此分离,并将我们的应用程序发展到下一个层次,我们需要取消共享。这篇博文将讨论我们正在尝试解决的问题,以及我们正在采取的逐步解决方法。

管理技术变革

成长工程团队的最大挑战之一是处理技术选择。一些组织在他们选择当前堆栈时停止时间,拒绝添加任何新技术。其他人允许每个人都使用他们想要的任何东西,导致爆炸不可分割技术。这两者都是可怕的,但替代方案是什么?

营销日历

由于Stitmanbetx万博体育app 官方下载ch Fix是一个零售公司的核心,我们操作的商品日历。商品销售日历是零售业用来核算销售、库存和工资的日历。它起源于20世纪30年代,在20世纪40年代被广泛采用。创建它的主要原因是为了保证在相同的月份中拥有相同的周末数量,因为大部分零售销售发生在周末。此外,日历还确保一个时期的任何结束日期落在一周的同一天。

部署HTTP服务时需要考虑的12件事

现代软件体系结构倾向于将功能划分为多个应用程序和服务,而不是将所有域逻辑放入单个应用程序中。这两种设计都有优点和缺点;这篇文章的目的并不是要详细说明什么更好以及为什么更好。然而,人们普遍认为,使用服务的一个缺点是它带来的复杂性增加。具体来说,有更多的故障点,而构建一个健壮的系统意味着预期系统的节点可能在任何给定的时间点发生故障。这些故障是不能忽略的,您不能期望能够等到所有节点都变为绿色后才能正常运行。为了解决服务带来的一些额外的复杂性,我编译了一个重要元素的清单来考虑:

我们的Git分支模型2016

早在2013年,我描述了Stitch Fmanbetx万博体育app 官方下载ix的git flow作为对流行职位的反应成功的Git分支模型。最近,Jussi Judin发布一个反应使用经典的被认为是有害的标记线。我满怀热情地读了这篇文章,但发现上面描述的过程仍然太复杂。这感觉是一个很好的时间来刷新我之前的帖子,关于Stitch Fix目前如何做分支和Git(它甚至比它在2013年更简单)。manbetx万博体育app 官方下载

你知道你要解决的问题是什么吗?

这是我将来要讲给我孙子们听的故事。但由于我没有孙子孙女,亲爱的读者,就只能由你来做了。现在坐下,把这块硬糖放进嘴里,表现出你的兴趣。

通过Heroku的预启动

PrebootHeroku提供的功能可以帮助你实现吗零停机部署。也就是说,当你推送一个新版本的代码时,你的用户没有一瞬间会觉得你的应用关闭了。

iOS代码签名-第3部分

更新(10/31/2016)我们已经写了一个更新博客关于我们如何测试,集成和部署我们的iOS应用程序。它补充了这里的信息,并包括关于我们当前进程的最新细节。

在编程中没有愉快的路径

讨论“快乐路径”通常是有益的,它是通过一个系统的理想或最简单的逻辑流。虽然它是一个很好的交流和识别需求的工具,但我发现,当思考实际的实现时,尤其是涉及到分布式系统时,它的问题越来越多。规划和设计通常会更好全部路径从一开始。

iOS代码签名-第2部分

更新(10/31/2016)我们已经写了一个更新博客关于我们如何测试,集成和部署我们的iOS应用程序。它补充了这里的信息,并包括关于我们当前进程的最新细节。

我最喜欢的技术谈话(和文章)2015年

我是一个技术演讲和博客上瘾者!晚上我经常在跑步机上跑步,看至少一场科技讲座。在我们最后一次在旧金山的异地会议上,我的几个同事鼓励我写一篇我最喜欢的2015年的技术讲座和文章。以下是它们,排名不分先后:

我们的iOS布局之旅

manbetx万博体育app 官方下载Stitch Fix最近发布了第一款iPhone应用程序!最初的简单、单故事板应用程序现在是一个具有完全编程视图的复杂应用程序。从故事板到程序视图的转换并不是直接的——我们经历了故事板、.xib、程序视图和中间混合的好与坏。

使用消费者驱动的契约来减少集成测试的需要

在Stitch manbetx万博体育app 官方下载Fix,我们有很多不同的应用和服务。随着基础设施的增长,创建和定义更多的“微服务”以集中和隔离重要的共享行为和数据的需求也在增长。测试是我们开发过程中非常重要的一部分。随着我们开始创建越来越多的服务,我们意识到,当涉及到服务时,我们必须改变考虑集成测试的方式。下面是一个你可能很熟悉的典型工作流程:

当碎片在夜晚碰撞时

我认为可以肯定地说,待命周从来都不是我们软件工程师热切期待的。从过去的经验中我知道,我的压力水平趋于上升,我个人的生产力期望下降,我的眼睛总是盯着我的电子邮件,希望可怕的寻呼机警报不会从阴影中跳出来。但我得问问自己,是什么在驱动这些负面情绪?更重要的是,他们是否指出了我们作为软件工程师应该实施的可能改进,以减轻打电话工作的负担?在Stmanbetx万博体育app 官方下载itch Fix,我们已经认识到这些问题,并在最近实施了一些策略来帮助减少电话工作的压力,提高工作效率。

在Stitch Fix面试manbetx万博体育app 官方下载

我知道这是老生常谈的工作面试真的有压力但我希望你能放我一马。这种经历还有些新鲜。今年夏天,我六年来第一次直面求职的挑战。我听过很多关于等待我的事情的噩梦般的故事:谜语和谜题,有技巧的问题,白板代码练习,还有让人筋疲力尽的小组面试。如果你要逼我说实话的话,我是被吓得要死。

与我们的客户一起开发新功能

作为Stitch Fix的软件工程师,最伟大的事情之一就是我们的大多数应用程序都是面向内部的。manbetx万博体育app 官方下载这意味着我们的许多“客户”也是我们的同事,甚至可能和我们在同一栋楼工作。例如,我在我们的工程团队中工作,他们支持我们的销售组织,负责计划、购买、设计和分配我们的库存。我们的商人和我们在旧金山市中心市场街的总部合作。

iOS代码签名-第1部分

更新(10/31/2016)我们已经写了一个更新博客关于我们如何测试,集成和部署我们的iOS应用程序。它补充了这里的信息,并包括关于我们当前进程的最新细节。

带有缝线的简单Rails api

我们没有单一单一的应用,我们有许多特殊用途的应用。最初,只有几个人,由几个开发人员管理,我们使用RubyGems在他们之间共享逻辑。现在,我们有超过33名开发人员,业务规模更大,有更多的代码投入生产。所以,我们转向了HTTP服务。我不想详细说明这种架构的优点,我想谈谈我们如何使用Rails实现这一点,使用不到1000行代码调用的共享gem

测试需要,TDD可选

最近,我一直在与一些初级软件工程师和Rails训练营的毕业生进行交谈和采访。因为测试是我们在Stitch Fix工作的核心,所以我通常会问他们关于测试和TDD的问题。manbetx万博体育app 官方下载通常,人们会不好意思地回答说,他们并没有真正地首先编写测试,但他们知道应该这样做。有人告诉我,他们的训练营班读“TDD死了。测试万岁”发布,并带走了测试不是必需的教训。我百分百确定这不是正确的解释。也许它指出了Rails开发文化中的TDD的一个问题:测试是一种需求,而TDD是一种选择,但这两者常常被混为一谈。

最佳科技工作文化

Facebook, Uber, Lyft, GitHub, Pandora——一份令人印象深刻的公司名单。现在,Stitcmanbetx万博体育app 官方下载h Fix,一家致力于用创新技术颠覆零售业的公司,我在那里做软件工程师,和这些组织直接竞争。

轨道服务对象的解剖

我们已经放弃了“胖模型,瘦控制器”作为Rails应用的设计风格——事实上,我们在开始之前就放弃了它。相反,我们将代码分解为特殊用途的类,通常称为服务对象。我们已经详细讨论了应该如何编写这些类,所以这篇文章将概述我认为最成功的创建服务对象的方法。

选择有趣的工作,而不是“有趣”的工作

几年前,我和一个开发人员朋友讨论我们理想的工程工作。我并不清楚我的想法是什么,但我知道对大多数人来说这听起来很无聊。不到一年之后,我发现自己在Stitch Fix做的就是这样,我不能更快乐。manbetx万博体育app 官方下载

manbetx万博体育app 官方下载缝合修复。UNIX

I❤UNIX和使用命令行;他们在Stitch Fix帮我解决问题。manbetx万博体育app 官方下载我不是一个人。在数据科学和工程团队中,我们一直在用UNIX和命令行解决问题。

恭喜你成为一名软件工程师

现在你知道了整数如何哈希表是有序的(或者不是有序的)。你知道如何与JSON API对话,用3种不同的语言(或者3种不同的JavaScript框架)构建Twitter克隆版。您的天资、技术知识和一般的勇气帮助您获得了第一份真正的软件开发工作。祝贺你。这并非易事。我知道你们花了很多时间学习,经历了很多挫折才取得今天的成就。通过知道如何编写软件,您已经为自己打开了一个充满可能性的世界。

Rails中的ElasticSearch和非规范化

这些连接快把我累死了

假设用户是正确的

正如前面提到的以前,我们在Stitch Fix做的很多事情就是创建软manbetx万博体育app 官方下载件运行manbetx万博体育app 官方下载缝合修复。虽然我们有一个致力于(外部)客户体验的团队,但大多数工程师都在为内部用户开发软件。

一些预先设计

成为一名优秀的开发者意味着两者都要了解什么构建和如何构建它。在Stmanbetx万博体育app 官方下载itch Fix,我们没有专门的产品团队,所以我们花了比大多数人更多的时间来搞清楚要做什么1

冰山一角:称赞内部应用

在公开的网站上工作可能是一大堆乐趣。您可以向朋友和家人展示您的工作,看看它被一吨人使用,并感受到世界各国作为公司“产品”的骄傲。但这只是冰山一角。

anigularjs的应用程序

在我的个人博客上,我做了概述Rails前端支持的一些问题。关于这篇文章的很多讨论都与Rails不适合构建客户端繁重的“雄心勃勃的”应用程序这一概念有关。更进一步的想法是,对于不太雄心勃勃的应用程序,“Rails方式”(服务器生成的JavaScript)和JQuery是很好的™。

我们应该使用多个输入域来防止用户的错误吗?

在Stmanbetx万博体育app 官方下载itch Fix,我们正在改进我们的注册流程。在这个过程中,我们讨论了我们是否应该有一个单独的密码字段,或者像许多站点那样,有两个——第二个是“密码确认”。

我们如何处理失败的Resque工作

石斑鱼工程博客贴了一个很好的描述在heroku上举办resure:

最小的价值,灵活的系统

我们称之为“旧管理”。一个基本的管理界面(类似于Rails的主动管理员)在当前的工程团队到来之前,由外部团队建造。有一段时间,它经营着我们的整个业务。我们最初的工程师的首要任务之一就是用更复杂的东西取代它。然而,由于它在许多方面的局限性,它无意中教会了我们一些关于设计内部系统的有益经验。

Resque Brain -一个更好的Resque web

我们使用Resque在Stmanbetx万博体育app 官方下载itch Fix…很多。对于后台处理或从web请求/响应循环中获得工作,Resque是我们的首选技术。

Rails应用程序模板

快速创建和部署应用程序的能力对于避免单一体系结构至关重要。我在我的在RubyNation,以及我的帖子在这里,这种能力的关键部分是编写实际创建应用程序的脚本,以便为您的基础设施和团队准备好。在Stmanbetx万博体育app 官方下载itch Fix,我们在大多数应用程序中使用Ruby on Rails,幸运的是,Rails提供了一个方便的特性,称为应用程序模板这允许您使用所需的任何样板编写创建新应用程序的脚本。

演示者:委托vs仅仅制作一个Struct™

像大多数优秀的Rails开发人员一样,我们在Stitch Fix中使用了演讲者。manbetx万博体育app 官方下载我们通常使用委托来实现它们,但是我发现这种方法节省的时间比仅仅使用一个结构体类是可以忽略的,导致代码难以更改和使用。

创业工程团队超能力

manbetx万博体育app 官方下载缝线修复是我工作的第三个启动,第二个启动,第二个我在一个公平的早期阶段加入。到目前为止,我们已经能够避免创建一个单一的单片应用程序,并一直始终向用户提供和部署解决方案。我相信这是因为我们已经开发了一套非常有帮助的“超级力量”,我相信这些权力将使我们的团队和技术保持健康多年来。

我们的Git工作流

一个旧邮政从Linus Torvalds关于使用Git今天突然出现在黑客新闻上,并提醒我复杂gitflow工作流程,以及Scott Chacon的帖子在“Github Flow”,这两个都是优秀的阅读。

让OmniAuth与谷歌应用程序在Heroku上工作

manbetx万博体育app 官方下载在美国,我们几乎都是外包全部我们的主机和技术需要Heroku或他们的附加组件。考虑到我们作为一家公司的现状,这是完全合理的:我们不需要雇佣管理员,我们不需要管理实际的盒子,而且我们可以轻松地添加/删除/更改我们的技术基础设施。如果你是一家小型初创公司,你在摆弄Linode切片,你可能是在浪费时间。

pghrb照明说话

今晚乔恩·迪安将在匹兹堡Ruby用户组提供一个照明谈话,讨论Rails应用程序中的业务逻辑应该从模型中移动,并进入纯Ruby类。如果您在匹兹堡地区,请务必通过并介绍自己!

Magma 2013年

乔恩·迪安Magma 2013年关于适用于面向服务的架构的应用程序间通信和RESTful API。这次演讲的目的是为您的平台创建服务架构的几个原因提供一个基本的概述,并为那些刚刚开始研究它的人提供一些基本的开始代码。请看这里获得更多信息和幻灯片