martinfowler.com 2014 年末状态报告

2015 年 1 月 28 日



运营 martinfowler.com 网站是我在 Thoughtworks 工作的重要组成部分。传统上,它的访问量一直高于我们的主网站,不过令人高兴的是,随着我们主网站的改进,这种情况将会改变。我的网站是我们影响行业的一个工具,是我们第二支柱工作的一部分。

与为杂志撰稿相比,运营网站的一大好处是,你可以通过分析数据获得一些反馈。过分迷恋跟踪数字很容易,但我发现关注这些数字很有用,主要是为了衡量哪种类型的材料最受关注。

今年年初,我决定花比平时更多的时间来审查流量信息,以便更好地了解正在发生的事情。我利用这次机会与我们的内容策略人员分享了信息,但我相信更广泛地分享这些信息,因此我也在 Thoughtworks 内部更广泛地分享了这些信息(我以后也可能会公开提及)。

网站目标

我对 martinfowler.com 的主要目标是传播改进软件开发的技术知识。我希望找到有用的技术,主要通过我的 Thoughtworks 同事,并以足够清晰的方式解释它们,以便其他人可以尝试和扩展它们。

虽然这个目标主要是第二支柱的工作,但它对第一支柱也有重大影响。在需求方面,它有助于在寻找工作时产生潜在客户和/或提高我们的信誉。招聘人员声称,许多人来到 Thoughtworks 是因为他们通过我的网站了解了我们,或者那里的文章帮助人们认为 Thoughtworks 是他们想要去的地方。在交付方面,有时一篇文章可以帮助我们的顾问说服客户选择更好的道路,或者只是帮助教育我们的客户做得更好,并欣赏我们正在做的事情。

对于第三支柱,我一直在就多样性和互联网自由问题撰写文章和发表演讲。我网站的大多数读者都是来找我获取技术信息的,但我认为同样重要的是要确保他们了解我们面临的重要社会问题,特别是那些技术人员可以产生影响的问题。

除了我自己写作之外,我认为帮助那些有写作倾向的人也很重要。例如,几年前,我花了很多时间与 Jez Humble 联合演讲,既是为了提高他的知名度,也是为了传播持续交付的理念。虽然我很遗憾看到 Jez 离开,但我很高兴能继续这样做。当我刚到 Thoughtworks 时,许多人认为我是 Thoughtworks 在业界的主要代言人,但我真的很高兴看到现在 Thoughtworks 因许多人而闻名,而不仅仅是我。Martinfowler.com 上许多受欢迎的文章都是由我以外的人写的,他们通常是 Thoughtworks 的员工,但也不总是。

除了网站的这些职业目标之外,它还有助于实现一些个人目标,过上令人满意的生活。我讨厌演讲,并努力尽量减少演讲次数。同样,自 1992 年以来,我一直是某家航空公司常旅客计划的精英会员,我更喜欢在自己办公室里度过时光,而不是坐在飞机座位上。网站的影响力越大,我就越有理由把时间花在为它写作上,而不是去参加又一次的演讲。

2014 年总体流量

让我们考虑一些广泛的虚荣指标。

图 1:2012-2014 年每月独立访客比较

就简单的访客数量而言,该网站在 2014 年表现良好,与前两年相比稳步增长,每月访客数量为 18.6 万至 24.9 万。页面浏览量也有类似的表现(从历史上看,在我的网站上,这两者之间的关系非常密切)。[1]

图 2:2012-2014 年独立页面浏览量比较

图 3:自开始收集分析数据以来访客的长期变化图

热门文章

我倾向于对这种广泛的页面浏览信息持怀疑态度。毕竟,担心这个数字是否只会导致标题党,而对我的读者没有任何实际用处?

因此,我一直专注于另一个指标——我有多少篇热门文章。目前,我将热门文章定义为每月独立页面浏览量超过 1000 次的文章。

图 4:每月页面浏览量超过 1000 次的文章数量比较

这一趋势与页面总浏览量和访客数量的趋势非常相似,每年都比前一年稳步增长。这样的汇总数据让我感到温暖而模糊。但如果我想了解更多信息,我需要查看实际的文章。

首先要指出的是,热门文章有很多种。一篇文章如果是新的,就会获得大量的流量。

图 5:文章发布后前 7 天的独立页面总浏览量直方图。箱体大小为 500。文章为 2012 年至 2014 年期间发表的文章。

从直方图中可以看出,大多数文章在前 7 天的浏览量都会超过 1000 次,其中一些文章的浏览量远远超过 1 万次(通常是由于 Hacker News 的关注)。但如果我们看一下 6 个月后的结果,我们会看到一幅不同的景象。

图 6:文章发布后 6 个月内,该月独立页面总浏览量直方图。箱体大小为 500。

6 个月后,大多数文章每月的浏览量都不到 1000 次。我怀疑,那些既有一定年份又很受欢迎的文章才是最有价值的。这些文章的时髦术语是“常青文章”。(由于人们自然想知道,最远的异常值是 James Lewis 和我合著的关于微服务的文章)。

2014 年常青文章

为了确定 2014 年那些有一定年份且受欢迎的 URL,我提出了以下定义

  • 2014 年期间,每月页面浏览量的中位数必须大于 1000
  • 必须至少有 4 个月的页面浏览量超过 1000 次

第二条规则应该会删除大多数昙花一现的热门文章,同时允许我查看相对较新的文章。(3 个月直方图的形状与 6 个月直方图的形状非常接近,但在某些时候,我应该对早期和晚期页面浏览量分数进行一些适当的相关性分析)。

根据这一标准,我在 2014 年最终确定了 86 个常青 URL。

排名路径类型中位数数量发布时间
1/articles/microservices.html文章32391102014-03-10
2/articles/injection.html文章2894612
3/导航2245612
4/articles/mocksArentStubs.html文章1155512
5/articles/continuousIntegration.html文章1141212
6/bliki/CQRS.html博客1061412
7/refactoring/导航779812
8/books/eaa.html书籍766712
9/eaaDev/uiArchs.html文章745012
10/design.html导航717212
11/articles/richardsonMaturityModel.html文章685412
12/articles/is-tdd-dead/导航622582014-05-19
13/articles/itsNotJustStandingUp.html文章596612
14/eaaDev/EventSourcing.html文章582812
15/nosql.html导航5645122012-08-22
16/eaaCatalog/目录552712
17/articles/lmax.html文章5327122011-07-12
18/eaaCatalog/repository.html目录465812
19/articles/collection-pipeline/文章465762014-07-21
20/eaaCatalog/unitOfWork.html目录423512
21/intro.html导航404512
22/agile.html导航401912
23/bliki/AnemicDomainModel.html博客378712
24/articles/newMethodology.html文章362412
25/aboutMe.html导航357712
26/refactoring/catalog/目录350412
27/articles/designDead.html文章320512
28/bliki/TwoHardThings.html博客315912
29/eaaDev/PresentationModel.html文章304712
30/books/refactoring.html书籍294212
31/bliki/FeatureToggle.html博客293012
32/eaaCatalog/index.html目录279912
33/bliki/导航275712
34/bliki/PolyglotPersistence.html博客2617122011-11-16
35/books/导航258912
36/eaaCatalog/dataTransferObject.html目录253712
37/eaaCatalog/dataMapper.html目录253212
38/articles/consumerDrivenContracts.html文章251310
39/eaaCatalog/domainModel.html目录249312
40/articles/enterpriseREST.html文章2488122013-10-21
41/delivery.html导航246612
42/articles/testing-culture.html文章229882014-05-12
43/bliki/TestPyramid.html博客228512
44/bliki/PageObject.html博客2244122013-09-10
45/articles/evodb.html文章219912
46/bliki/BoundedContext.html博客212712
47/bliki/CircuitBreaker.html博客2101102014-03-06
48/articles/rake.html文章208012
49/dsl.html导航206912
50/books/nosql.html书籍2038122012-08-17
51/bliki/FeatureBranch.html博客203712
52/bliki/MicroservicePrerequisites.html博客201652014-08-28
53/books/dsl.html书籍196112
54/bliki/TechnicalDebt.html博客194912
55/bliki/BlueGreenDeployment.html博客190312
56/bliki/FluentInterface.html博客188212
57/bliki/InversionOfControl.html博客184412
58/eaaCatalog/serviceLayer.html目录183512
59/eaaCatalog/activeRecord.html目录179212
60/articles/distributed-objects-microservices.html短篇176052014-08-13
61/articles/asyncJS.html文章1712122013-09-03
62/bliki/ContinuousDelivery.html博客1675122013-05-30
63/bliki/UnitTest.html博客163782014-05-05
64/eaaCatalog/transactionScript.html目录160612
65/articles/useOfMetrics.html文章1580102013-02-19
66/bliki/TolerantReader.html博客152110
67/tags/domain driven design.html导航150210
68/eaaDev/PassiveScreen.html文章146912
69/articles/agileFluency.html文章1441122012-08-08
70/bliki/RulesEngine.html博客141812
71/eaaCatalog/singleTableInheritance.html目录140312
72/eaaDev/SupervisingPresenter.html文章133012
73/articles/vagrant-chef-rbenv.html文章132742014-09-04
74/bliki/DeploymentPipeline.html博客128392013-05-30
75/bliki/BusinessReadableDSL.html博客125512
76/articles/enterprisePatterns.html目录124712
77/bliki/UbiquitousLanguage.html博客119310
78/books/continuousDelivery.html书籍11889
79/bliki/GivenWhenThen.html博客1169102013-08-21
80/books/buying.html书籍111310
81/articles/nonDeterminism.html文章110492011-04-14
82/articles/agileOffshore.html文章10717
83/bliki/BranchByAbstraction.html博客106982014-01-07
84/bliki/OrmHate.html博客104382012-05-08
85/bliki/DDD_Aggregate.html博客101482013-04-23
86/eaaDev/EventAggregator.html文章10128

我已将正在检查的 URL 分类为以下类型

  • 文章:长篇文章,通常包含多个部分,篇幅超过两页
  • 短篇:较短的文章,通常没有章节,字数在 1500 字以内。
  • 博客:博客文章,通常很短[2],并以定义其标题的概念的形式出现
  • 信息图:信息图
  • 导航:导航页面 - 例如我的主页以及各种指南和标签页面
  • 书籍:描述我的一本书(或我系列中的一本书)的页面
  • 目录:属于目录的页面,例如 EAA 模式目录或重构目录。

图 7:按类型分类的常青文章条形图。

从这次分析中,我发现了一件令人清醒的事情。在过去的几年里,我花了很多精力去创建一种新的内容形式:信息图。我曾希望它们能提供一种引人入胜的媒介来帮助解释主题,但 86 篇常青文章中没有一篇是信息图。[3]

近期文章表现

另一种看待这个问题的方式是回顾我过去几年发布的 URL,看看其中有多少进入了常青榜单。我会在发布新文章时做笔记,如果没有其他事情要做的话,我会跟踪它发布后页面浏览量的进展。

路径发布时间类型12 月浏览量排名常青?
1/articles/microservices.html2014-03-10文章372491
2/nosql.html2012-08-22导航524815
3/articles/is-tdd-dead/2014-05-19导航389023
4/bliki/OrmHate.html2012-05-08博客266736
5/bliki/PageObject.html2013-09-10博客232945
6/bliki/TestCoverage.html2012-04-17博客228847
7/articles/enterpriseREST.html2013-10-21文章221750
8/bliki/CircuitBreaker.html2014-03-06博客211454
9/books/nosql.html2012-08-17书籍200855
10/articles/agileFluency.html2012-08-08文章198956
11/articles/collection-pipeline/2014-07-21文章185662
12/articles/asyncJS.html2013-09-03文章173566
13/bliki/ContinuousDelivery.html2013-05-30博客163168
14/bliki/UnitTest.html2014-05-05博客161869
15/articles/useOfMetrics.html2013-02-19文章156870
16/bliki/DeploymentPipeline.html2013-05-30博客132677
17/bliki/GivenWhenThen.html2013-08-21博客129378
18/bliki/MicroservicePrerequisites.html2014-08-28博客126979
19/articles/testing-culture.html2014-05-12文章120782
20/articles/vagrant-chef-rbenv.html2014-09-04文章114684
21/bliki/DDD_Aggregate.html2013-04-23博客113485
22/articles/distributed-objects-microservices.html2014-08-13短篇107594
23/bliki/TellDontAsk.html2013-09-05博客102996
24/bliki/BranchByAbstraction.html2014-01-07博客922102
25/bliki/ImmutableServer.html2013-06-13博客776113
26/bliki/CanaryRelease.html2014-06-25博客743118
27/bliki/ReportingDatabase.html2014-04-02博客743119
28/articles/dipInTheWild.html2013-05-01文章701125
29/articles/workflowsOfRefactoring/2014-01-08信息图684128
30/bliki/SnowflakeServer.html2012-07-10博客652131
31/bliki/SelfTestingCode.html2014-05-01博客613138
32/bliki/CannotMeasureProductivity.html2013-08-29博客588141
33/bliki/StranglerApplication.html2014-06-30转载546150
34/bliki/PhoenixServer.html2012-07-10博客501162
35/articles/schemaless/2013-01-07信息图460172
36/bliki/FlaccidScrum.html2014-01-29博客459173
37/bliki/AggregateOrientedDatabase.html2012-01-19博客458174
38/articles/nosqlKeyPoints.html2012-09-12导航425180
39/bliki/SegregatedDOM.html2014-01-16博客351199
40/bliki/ParallelChange.html2014-05-13博客326205
41/articles/badri-hexagonal/2014-06-05导航305212
42/bliki/MaturityModel.html2014-08-26博客284216
43/articles/eurogames/2013-10-02文章282217
44/articles/go-interview.html2014-03-25短篇263225
45/articles/multiMobile/2012-06-19信息图237235
46/articles/bigQueryPOC.html2012-09-04文章231238
47/bliki/UserDefinedField.html2013-07-23博客218246
48/bliki/OpportunisticRefactoring.html2014-07-30博客197263
49/bliki/Datensparsamkeit.html2013-12-12博客190266
50/bliki/UserStory.html2013-04-22博客178275
51/articles/modernMockingTools.html2012-09-10文章162286
52/bliki/PurposeOfEstimation.html2013-02-27博客162288
53/bliki/BroadStackTest.html2013-04-22博客160290
54/bliki/InternalReprogrammability.html2013-01-10博客159292
55/bliki/NosqlDefinition.html2012-01-09博客138326
56/articles/bigData/2013-01-29信息图128350
57/articles/gap-scms-po/2013-04-23信息图124357
58/bliki/ComponentTest.html2013-04-22博客123359
59/articles/mobileImplStrategy.html2012-05-21文章111372
60/bliki/ComposedRegex.html2014-07-31转载104384
61/bliki/EnterpriseApplication.html2014-03-24博客102389
62/bliki/SoftwareDevelopmentAttitude.html2014-03-11博客101391
63/bliki/ExtremeProgramming.html2013-07-11博客96400
64/bliki/BusinessFacingTest.html2013-04-23博客89417
65/bliki/ExpositionalArchitecture.html2013-04-23博客89419
66/bliki/JavascriptPromise.html2013-04-22博客88421
67/bliki/PrimingPrimeDirective.html2012-10-23博客79446
68/articles/eliminatingSalesCommissions/2013-02-18信息图73459
69/bliki/EmbeddedDocument.html2013-06-04博客71466
70/bliki/UserJourneyTest.html2013-04-23博客56510
71/bliki/PreferFunctionalStaffOrganization.html2014-08-04转载52522
72/bliki/ThrownEstimate.html2014-06-26转载46543
73/bliki/HistoricallyDiscriminatedAgainst.html2013-10-10博客43554
74/bliki/StoryPoint.html2013-07-16博客42561
75/bliki/AlienatingAtmosphere.html2014-02-11博客40568
76/bliki/CloudComputing.html2013-07-11博客38582
77/bliki/StoryTest.html2013-04-23博客33617
78/bliki/ConfigurationSynchronization.html2013-06-13博客30639
79/bliki/NoDBA.html2013-02-25博客29644
80/bliki/FaultyTechniqueDichotomy.html2014-08-06转载27660
81/articles/bothersome-privacy.html2013-07-25短篇26666
82/bliki/CourtesyImplementation.html2014-08-27博客26667
83/bliki/DiversityImbalance.html2012-01-11博客26668
84/bliki/StoryCounting.html2013-07-16博客24685
85/bliki/TransparentCompilation.html2013-02-12博客18757
86/bliki/CharityCodeJam.html2012-01-25博客17767
87/bliki/ThresholdTest.html2013-09-12博客16785
88/bliki/TransMediaApplication.html2012-11-01博客16786
89/bliki/CommunalDashboard.html2012-08-22博客15794
90/bliki/PresentationSmells.html2012-02-09博客10870
91/bliki/ProbabilisticIlliteracy.html2012-11-05博客10871
92/bliki/gotoAarhus2012.html2012-10-16博客9897
93/bliki/Nexus7.html2013-10-08博客6979
94/bliki/API_Copyright.html2013-05-31博客51008
95/bliki/IdealTime.html2013-07-16博客51020
96/articles/201402-call-congress.html2014-02-11短篇41051
97/bliki/Saba.html2013-02-01博客41081

类型分类与之前相同,只是我为旧文章的转载添加了转载类型,我一直在文章发表 5 周年和 10 周年时进行转载。我没有在这个表格中记录所有这些转载,因为我没有始终如一地跟踪它们的发布时间。

此表汇总了我发布的每种类型的数量以及常青内容列表中的数量。

全部2014
类型全部常青内容全部常青内容
文章13844
博客6410164
书籍1100
信息图6010
导航4221
转载5050
短篇4131

查看此表后,我不再那么担心缺少常青信息图。我只发布了六个信息图,而那段时间发布的博客文章中只有六分之一成为了常青内容。因此,目前还没有常青信息图并不能证明这种媒介不太可能成为常青内容。

另一方面,长篇幅文章似乎确实表现得更好,尽管我还没有确定这种差异是否显著。

微服务文章

毫无疑问,今年该网站上影响最大的文章是由 James Lewis 和我共同撰写的关于微服务的文章。它立即成为该网站上的头号文章,每月平均浏览量为 3.2 万次,2015 年的浏览量为 34.5 万次。

然而,比 martinfowler.com 上的任何统计数据都重要的是这张图表。

我们在 2014 年 3 月期间(分期)发表了这篇文章,你会发现,根据谷歌的跟踪,当时人们对这个词的兴趣大幅增加。我并不是说微服务炒作的所有功劳/责任都应该归咎于我们,这个词已经存在一段时间了——最早出现在我们 2012 年初的技术雷达中。我相信,如果没有我们的贡献,谈论这个主题的各路人马也会大大提高它的知名度,但我确实认为我们对它起到了重要的催化作用。

遗憾的是,很难将谷歌的图表与其他软件开发趋势进行对比,因此,为了做到这一点,这里有一张图表将其与我近年来一直试图推广的另一个术语“持续交付”进行了比较。

图 9:谷歌兴趣趋势图,比较“微服务”与“持续交付”

页面浏览量以及相应的谷歌兴趣水平,是衡量文章影响力的有趣指标,但从根本上说,我认为这不是衡量文章价值的真正标准。这取决于它的长期影响——主要是它如何对该术语进行合理的定义,我们希望这将有助于减少从一开始就严重困扰 SOA 的语义扩散。遗憾的是,这很难用漂亮的图表来表示。

字数与持久流行度

我时不时会听到这样的说法:在我们这个患有注意力缺陷多动障碍的现代社会,短篇文章更受欢迎。前面的一些章节表明,至少从长远来看,情况可能并非如此。为了进一步深入研究这个问题,我选取了过去几年(2012 年 1 月至 2014 年 9 月)的所有文章(短篇和长篇)和博客文章,并根据最近的页面浏览量绘制了散点图。

图 10:散点图,比较了 2012 年 1 月至 2014 年 9 月期间发表的文章的字数与其 2014 年 12 月的唯一页面浏览量。(我去除了两个异常值,即微服务文章(37,249:5,746)和测试文化文章(1,207:27,596))

如果你能在这张图上看到任何相关性,请告诉我,因为我肯定看不到。它确实强化了这样一种观点,即成功长篇文章的比例似乎高于短篇文章,但我的统计学知识有限,无法对此进行进一步分析。

投稿作者

除了自己写文章之外,我还热衷于从其他人那里获得文章。这些投稿文章中有许多来自我在 Thoughtworks 的同事,但也有一些来自业内其他联系人。编辑这样的文章通常需要做大量的工作,有时感觉比我自己写文章还要费劲,但我认为对我来说,利用我所拥有的平台来帮助扩大其他有价值的声音是很重要的。

图 11:自 2012 年以来发表的文章的散点图,显示了它们的 12 月页面浏览量、作者类型和文章类型。

常青内容列表中有九篇涉及投稿者的文章。

路径鸣谢浏览量排名
/articles/microservices.htmlJames Lewis 和 Martin Fowler323911
/articles/itsNotJustStandingUp.htmlJason Yip596613
/articles/consumerDrivenContracts.htmlIan Robinson251338
/articles/enterpriseREST.htmlBrandon Byars248840
/articles/testing-culture.htmlMike Bland229842
/articles/evodb.htmlMartin Fowler 和 Pramod Sadalage219945
/articles/asyncJS.htmlPete Hodgson171261
/articles/useOfMetrics.htmlPat Kua158065
/articles/agileFluency.htmlDiana Larsen 和 James Shore144169

脚注

1: 这些数据中存在一个问题。我的谷歌分析分别针对 martinfowler.com 和 refactoring.com 进行报告,尽管我认为它们是同一个网站。因此,这个访客数字不包括访问过 refactoring.com 但没有访问过 martinfowler.com 的任何人。

2: 80% 的博客条目少于 1000 字,只有十几篇超过 1500 字(总共 464 篇博客条目)。

3: 明年可能会有希望,Toby Clemsons 关于微服务测试的信息图在最初的几个月里表现非常出色(浏览量都在 1.4 万次左右)。

重大修订

2015 年 1 月 28 日:发布到 Thoughtworks Town Hall 邮件列表

2015 年 1 月 13 日:分发给 Thoughtworks 内容战略小组