前端不止:Web内容的无障碍性

网民统计报告

根据2017年7月份发布的第40次中国互联网络发展状况统计报告:

截至 2017 年 6 月,中国网民规模达 7.51 亿,中国手机网民规模达 7.24 亿, 中国网民中农村网民占比 26.7%,规模为 2.01 亿。

截至 2017 年 6 月,中国网民通过台式电脑和笔记本电脑接入互联网的比例分别为 55.0% 和 36.5%;手机上网使用率为 96.3%,平板电脑上网使用率为 28.7%;电视上网使用率为 26.7%。

截至 2017 年 6 月,我国非网民规模为 6.32 亿。上网技能缺失以及文化水平限制仍是阻碍非网民上网的重要原因。调查显示,因不懂电脑 / 网络,不懂拼音等知识水平限制而不上网的比例分别为 52.6% 和 26.9%;由于不需要 / 不感兴趣而不上网的比例为 11.2%;受没有电脑,当地无法连接互联网等上网设施限制而无法上网的比例分别为 9.3% 和 6.2%。

提升非网民上网技能,降低上网成本以及提升非网民对互联网需求是带动非网民上网的主要因素。

信息无障碍

今天,我想讨论一个关键的词语——信息无障碍。

信息无障碍,英文词语来自“Accessibility”,是指任何人(注意是任何人,无论是健全人还是残疾人,无论是年轻人还是老年人等等)在任何情况下都能平等地、方便地、无障碍地获取信息、利用信息。

首先,我们要对Accessibility(无障碍)的一些错误认识进行一些纠正:这样一个词,很多人自然地跟残障人士联系起来,因为经常可以看到无障碍坡道、无障碍洗手间这样的词语。

信息无障碍更多强调的是对所有人都平等,方便的获取信息。比如:键盘上的F和J的凸起基准键。它的作用就是方便任何人可以精准的找到键盘字母的位置,从而可以在不看键盘的情况下,快速的打字,俗称“盲打”,大家都知道它的含义,没有人会把这个词理解为“盲人打字”吧。

(键盘基准键)

我国非网民规模为 6.32 亿,由于个人主观意愿,比如:不需要 / 不感兴趣而不上网的比例仅仅占11.2%。

那么,剩下的88.8%,也就是大约5.612亿人,是有上网需求的,但因为其他各种原因而不能上网。信息的公平使用和访问,是所有人的基本权利,如果你不能像身边其它人一样公平的获取信息,那意味着你不能公平接受教育、就业、独立生活等等。

我为什么会注意

我是谁?我为什么关心这些?这不是个哲学问题。每个人身上都有很多的标签,但在这里,我的标签是一个普通的Web开发工程师,一个新科技产物的使用者,一个信息的生产者和使用者,一个能“无障碍”获取信息的个体。而我的生活和我的工作让我开始关注“无障碍”这样一个词。

在互联网的大环境下,所有人的生活都方便了不少,我们可以远程办公,远程接受教育,网上购物,现在甚至连买菜、买水果都不需要出门,就这段时间,我妈有时都会直接在网上买菜和水果。

在我们享受这种生活便利的同时,我们也常常听到一些声音,比如:“这些都是年轻人的东西”,“我家小孩手机app玩的可溜了”。

前几天,我去办理港澳通行证,其实已经比我五年前办护照时方便很多,然而,在市政府政务中心的自动办理出境机器旁边,我会听到有几位年长的人说“这个机器不会用,怎么办?”,另一个人说,“没事,有个警察在旁边帮你操作”。这就意味着,如果旁边没有那个警察帮着操作,那么就不方便使用了,至少不是对所有人都方便。

科技的便利性看来还不是对所有人都便利,其实它还是需要一定的学习成本。

因为在外企的缘故,我有幸参加过一些海外的项目,在需求的实现过程中,客户对应用的无障碍性都会有一定的要求,于是我从中学习到了不少的相关知识。当然我也去过一些其他国家,跟不同国家的同事讨论过这方面的问题,也听他们介绍了一些做的不错的项目。所以我来举个例子:

比如,澳大利亚政府的“网络可访问性国内过渡战略”(NTS)规定,所有政府网站及其内容必须在 2012 年 12 月 31 日以前达到 WCAG 2.0 的 A 级合规要求,并在 2014 年 12 月 31 日之前达到 AA 级合规要求。

WCAG是万维网联盟(W3C)发布的一套名为“Web Content Accessibility Guidelines (WCAG) ”的网络内容可访问性指引。该指引目前是网络可访问性的国际标准。合规等级分为三级(A、AA 和 AAA)。

相关达到 WCAG 2.0 的 A 级合规要求的网站,例如:澳大利亚官方政府网站澳大利亚政府留学网站等,体验一下他们在Web内容无障碍性的一些实践,比如:只通过tab和enter来导航到不同的网站区域。

如果反观一下国内的一些相关网站,无障碍访问的体验感一下就降低了不少。

是能力问题还是被忽略了?

有时候,我在想这样一个问题,到底是我们的能力问题,还是问题被忽略了,当然大部分人的答案会是后者。

但我有时候会认为是前者,因为我们忽视了这个问题,所以导致其实我们也缺乏这方面的能力,无论是开发还是设计。

“目前我国99%的网站,由于没有实现无障碍,盲人难以正常浏览访问网站。”省盲协主席、中山大学工学院教授富明慧于2013年说的。富明慧本身就是一名盲人,他失明后发明了电脑盲文输入法。他说,加快网站无障碍改造,政府部门网站应该先行一步。

如果你在一个互联网公司工作,你大可在周边一问,比如:你听说过Web Accessibility?或者你知道怎么做才是最佳的方式吗?我们的产品里面有做这个?会作为代码和质量审核的一部分吗?

从哪里开始

连续追问这几个问题,的确会让不少人哑口无言,包括我自己在内。首先,我要承认这个不是一件容易的事情,否则不会有今天这样的一个讨论和思考。

我认为无障碍性的实现,应该是一个端到端的过程,不是设计师(UX/XD),不是开发(Dev),不是质量分析师(QA)某个人的责任,而是整个产品研发过程中所有人的责任,也许从产品构思的那天的就要开始考虑(比如:用户群体)。

其实这是个如何去做的话题会比较大,但是我想在这里举几个简单例子,让大家产生一些共鸣,也许从明天开始,在写代码和设计的过程中,你就会注意这些小的细节。

例子:通过Tab切换聚焦的的顺序

由于行动障碍而无法使用鼠标的人,会使用键盘进行页面的浏览。而页面上DOM的顺序会决定Tab切换时聚焦(focus)的顺序,我们知道CSS可以改变DOM在页面上的显示位置逻辑,但是DOM本身的顺序没有改变,这就容易导致Tab切换时给键盘使用者带来困惑。比如:

<div style="width:200px">
  <button style="float: right">右边菜单按钮</button>
  <button>左边</button>
  <button>中间</button>
</div>

当使用tab进行切换时,并不是最先聚焦到“左边”这个按钮,而是右边菜单,这就和页面上看到的逻辑产生了冲突。

例子:通过tabindex聚焦弹出框

你有没有注意到Bootstrap的模态框是这么写的:

<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  弹出
</button>
<div class="modal fade" id="myModal" tabindex="-1" ...其他属性省略>...</div>

当tabindex=-1时,表示当前元素必须要被聚焦,如果是元素弹出框,就需要使用tabindex,这样才能保证使用键盘的用户可以理解通过tab切换到模态框中的各个元素。如果你没有使用像Bootstrap这样的框架,那么当用其他前端框架实现自定义的模态框时,请务必考虑这个细节。

例子:请自定义元素的outline样式

你知道CSS中{ outline:none }对于网站的无障碍访问性是一个致命的做法吗?为什么我们还会这么做呢?因为元素在被聚焦时,会有一个蓝色的轮廓,而出于视觉效果的考虑,被认为是“不好看的”,所以被去掉了。

于是,当通过tab进行页面浏览时,很难立刻知道光标当前聚焦在哪一个元素(链接或者输入框)。这种情况,我们需要为它的聚焦效果提供一个另外的设计,以便同时保证它的功能性和视觉效果。更多关于{ outline:none }的内容,大家可以参考:http://www.outlinenone.com/

例子:设计页面时,请满足文字上的前后景颜色的对比度

(文字和背景的颜色对比)

WCAG 2.0 的1.4.3条对页面上文字的对比度有一个最低的要求4.5 : 1,目的很明显是为了保证色盲/色弱人群可以无障碍的访问网站的内容。假如说你是产品经理,有一天设计师告诉你,这个设计可能导致10个用户里面有1个用户存在访问障碍,阅读困难,你能接受吗?我想谁都接受不了。

有什么工具可以帮助检测网站的无障碍性吗?

对于普通使用者,可以使用Chrome的审计功能和Accessibility Developer Tools(Chrome插件),它能帮助你自动的检测网页的的可访问性问题,以及帮助你提供相关的修正信息。

(Chrome的审计功能)

Accessibility Developer Tools(Chrome插件)

对于开发人员,可以做一些自动化的检测,比如:使用pa11y这样一个工具,它是基于HTML codeSinffer以及PhantomJS制作而成的网站内容A11y(Accessibility,无障碍性)自动化检查工具。pa11y出现在ThoughtWorks 2017年3月的技术雷达中,我的同事写过一篇详细的文章来介绍这个工具:《无障碍性测试工具 Pa11y》

当然,最重要和最有效的检验方式是用户测试,比如:假设你自己是一个纯键盘的网站浏览者,尝试一下用键盘浏览自己开发的网站,是否能够方便的导航到网页的各个部分,并进行无障碍的阅读和交互。

还有其他一些重要的关注点吗?

有的,比如:基本HTML的语义化,alternative text的使用,ARIA标签属性的使用,都可以帮助屏幕阅读器有效的告诉使用者当前的元素类型和作用。

不要小看这些细节

​不要小看这些细节或者说基础功能,它涵盖的人群非常大,根据国家统计局最新数据,在中国,单是65岁的老年人已经超过1.5亿人口。加上其它障碍人群,以及第二语言学习者,等环境障碍人群,粗粗一算,这么简单的特性就能方便好几亿的用户,为什么要省略呢?

我在写这篇文章的时候,也去查了不少的资料,我觉得知乎上有一个人说很好:对无障碍性一个最大的误区是,将信息无障碍,当做产品的情怀功能,而非基础功能或Bug去对待。


更多精彩洞见,请关注微信公众号:思特沃克

Share

我们为什么做社区?

很多同学在加入ThoughtWorks之后,会频繁的听到和提起“社区”这个词,以及越来越多的参与到“社区活动”中,无论是自发的还是被影响的,都会对社区有更深的接触和体会。那么,追根溯源,ThoughtWorks为什么和社区结合这么紧密,社区到底对我们、组织、乃至社会意味着什么呢?

我想通过这样一篇文章,和大家一起回归到社区的本源,与更多的社区工作者、参与者、热爱者,共同探讨社区的意义和价值所在。

社区是什么

按你们读书人喜欢的方式,先从定义开始,一番资料看下来,原来中文“社区”和英文“community”其实是存在一定差异的。

中文里,“社区”一词有140多种定义,尽管社会学家对社区下的定义各不相同,但在构成社区的基本要素上认识还是一致的,比如人口、地域、设施、文化、组织等。比较常用的定义还是在强调这种社会群体生活是建立在一定地理区域之内的。

而英文community一词含有公社、团体、社会、公众,以及共同体、共同性等多种含义。我想这个理解更贴近在ThoughtWorks语境下的“社区”。

A community is a small or large social unit (a group of people) who have something in common, such as norms, religion, values, or identity. Human communities may share intent, belief, resources, preferences, needs, and risks in common, affecting the identity of the participants and their degree of cohesiveness.

所以从英文的释义来看,最重要的动词关键词,莫过于“Share”分享。而最重要的名词关键词,也是目标之一,莫过于“cohesiveness”粘结性。

听起来这样的社区好像是从国外传进来的,其实咱们的文化中也有啊,比如——华山论剑,被认为是公开比试和学术争鸣之经典,比起现在的社区交流,华山论剑可能更像是场奥运会。还有春秋时期的“百家争鸣”,也可看作是社区典范,思想的碰撞为中国哲学的进步和发展都垫定了重要基础。那现代社会,尤其是中国,为什么呈现出越来越繁荣的社区景象呢,按照我的理解:

  • 一方面是过去的信息化不足,想交流也找不到对象在哪,所以更多是同宗同教或者同聚居区的互动,而现在就容易多了,国际化的社区平台也比比皆是,同道中人不再靠偶遇。
  • 另一方面,我想和知识飞速发展关联巨大,更多的新知识和新实践在近几十年得到关注和研究,而且速度惊人,不同于已有正确答案的经典理论,当今大量新知识也是我们在不断学习和探索的,而且掌握知识的程度也直接决定了企业的生命力,所以彼此的沟通和交流便成为了促进知识快速迭代和应用的催化剂。

当ThoughtWorks的社区负责人在一起交流时,发现大家在提到社区时,其实脑海中所指的事物并不相同,我们不妨在这里也聊一聊社区的形式和载体。

狭义的“做社区”,大家经常指的一个是内部交流,一个是线下活动,大家面对面的分享交流确实最有“社区”的味道。

而广义上,我认为“社区”蕴含的形式和载体非常丰富,只要是以促进分享、交流、学习、体验为目的的动作,都可以称之为“做社区”,所以除了线下活动之外,比如线上互动、原创内容、共同翻译、对外合作、发表演讲、比赛竞技、参观走访、课题研究、内外培训,等等等等,极其多样。

社区和公司的区别

在ThoughtWorks的官网上,你可能会看到这样一段话:ThoughtWorks不仅是家公司,更是个社区。那公司和社区之间又到底是怎样的关联和区别呢。

首先,从目标来看,公司以盈利为目的,社区显然没有这样的价值定位。ThoughtWorks有三大支柱,之一是可持续的业务,这是赖以生存的经济基础;之二是追求软件的卓越,这在ThoughtWorks不仅仅是口号,而是真正的践行,从招聘的关注点到行业的口碑,从年度考评的标准到客户真正认可的ThoughtWorks与众不同的价值,无不与之息息相关,也正是因此,社区才不断自发的涌现,这是在技术卓越追求道路上最天然的聚合;之三是追求社会与经济的公正,这在大部分公司可能是放在社会责任和企业公关部分来做,而在ThoughtWorks,我更愿意称之为信仰,同样也非口号,实实在在的探讨、思考、文章、项目都在行动着。

其次,传统意义上的公司内部大多存在着一定的竞争关系,无论是资源、预算的竞争,还是从部门墙来看信息的壁垒,都是明显的竞争思想的体现。而社区显然更倾向于分享信息、共享资源和透明交流。从这点上,我们又不得不提到ThoughtWorks一向引以为豪的扁平,以及直接、快速的沟通方式,内部信息的传递以解决问题为出发点,提倡信息的分享和透明。

再次,从组织形式和文化属性来看,社区因其自愿、平等的内部关系,更自然的会营造出志趣相投的人之间惺惺相惜的环境,从两方领导者/组织者的行为方式更可以看出显著的差异性。在ThoughtWorks,你可能会见到一个嘘寒问暖、惜“才”如命的领导者,也可能见到一个忙忙碌碌、时刻在提供帮助和服务的领导者,还可能见到一个明明可以自己做决定却要广泛征求意见的领导者,但你应该很难见到颐指气使、命令强制或者用流程捆绑你的“老板”或“上司”。

我们为什么做社区

读者朋友中一定有很多同学时常在各种社区活动中游走参与,甚至成为组织者,我们不妨先看看在如今信息爆炸、互动高频的社会环境下,市场上大多数公司做社区的动因是什么,并以此来谈谈ThoughtWorks的特别之处。举一个当下非常典型的例子:工具类app公司,或者更广泛一点说,产品类公司,显然是希望通过营造社区提升用户黏性,从线上独立使用、线上自建社区延伸到更深入的线下互动,比如金数据组织过的俱乐部,还有很多时间管理、思维引导、生活体验、消费平台等等类型的app,都在持续运营社区,而效果如何,可能也要视具体情况,从目前听到的声音来看,长期维护的挑战还是不小的。

我们再来看看在ThoughtWorks,发展社区从个人到组织层面的价值又是什么,或者,我们在动因上又有什么与众不同。

上述这幅图,是做社区对组织和个人可以带来的价值,我们可以从对个人和对组织两个不同的角度来看:

对于个人而言,现在的学习方式不同以往,前面我们多番论述过现在的能力提升方式靠单一的读书和个人思考已经很难满足,信息更迭的速度逼迫我们不得不快速的向外部探求,去汲取别人已经实践出的知识,进而快速获取并演进,而非反复造轮子。所以,与他人交流来提升自己知识储备的速度已经蔚然成风。在彼此交换信息的过程当中,我们不仅在获取能力的提升,也在铸就影响力,这种影响力可以是在组织内部的,也可以是代表组织向外输出的,无论是哪种,在当下互联网思维炙手可热、组织形式趋向共创式的时代,“影响力”可以带来的资源和机会不必多说,最典型的就是广泛的职业机会。而我们在发生上述的社区动作的同时,我们其实不仅带给自身更多的存在感和成就感,也不知不觉中为行业的进步和发展留下了足迹、谱写了历史。

对于组织而言,也许有人会说,那不做社区又怎样,公司也可以照常运行,大家也可以照样工作,没错,确实如此,社区的存在,绝不仅仅是为了公司的运转,做社区也不是某些人的KPI,经营社区的原动力是来源于对自我发展的更高要求,对同侪沟通的迫切渴望,和对改善行业的赤子之心。所以,社区的活跃一定无法仅仅来源于公司的强制,而是当个人的社区热情获得了组织的平台支持,才能构建出社区的繁荣。有社区的公司,比如ThoughtWorks,呈现出的企业文化和氛围与没有社区的企业一定是不同的:

  • 社区的存在对于构建学习型组织至关重要,发起者的学习热情,会催生出极大的同侪压力,从而影响和带动更多人的学习动力和参与;
  • 社区内部的交流和分享,会为学习者提供良好的信息交互平台,提高学习和解决问题的效率,并让知识得以传播和沉淀,将一个人的能力逐步转化为一群人的能力;
  • 社区带来的归属感和安全感,以及优秀的人在一起的优越感,都让这个企业的吸引力、凝聚力变得妙不可言,让身处其中的人也充满自豪和活力;
  • 这一切都为提升组织的外部影响力带来了正向影响,无论是吸引更多慕名而来的候选人,还是潜移默化的商业机会,社区都是一张值得信任的企业名片。

这里还想再着重强调一点——就是那条虚线箭头,组织对外影响力的提升,对于个人的影响力和职业发展,必然起着非常正向的影响作用。比如说当某个公司的测试团队时常组织行业内的探讨交流、发表观点和文章时,这个公司的测试团队在业界一定会积累良好的声誉,那很显然会为这个测试团队中的个人带来良好的职业背景。这其实和我们说某个大学的专业特别好是一样的道理,当这个学科发表文章多了、科研成果多了、学术交流多了自然带动了学生视野广阔了、实践丰富了以及就业更受欢迎了。

我们愿意看到越来越多的个人、组织、企业参与到社区生态的构建中来,我们相信千千万万的社区互动带来的不仅仅是技术的成长和交流,能力的提升和发展,更使得追求卓越、共同进步的社区精神得以弘扬,而这种精神在行业发展乃至社会进步中都将产生历史性的意义。


更多精彩洞见,请关注微信公众号:思特沃克

Share

为低资源地区建造数字化医药库存系统

撒哈拉以南的非洲国家在抗击疾病和延长寿命方面的指标远远低于世界平均标准。医护人力资源的短缺和医疗信息系统的落后是导致人民无法获得医疗保障的两个重要原因。

对于发展中国家来说,一个良好的信息系统对计划实施医疗服务至关重要。医疗服务的决策人需要利用系统中的数据来理解目前的医药需要,评估供需缺口,制定更好的策略。在数据缺失的情况下,他们很难计划接下来应该调配多少的资源来满足一个地区的需要。然而,对于撒哈拉以南的国家来说,当前的医药数据大多存在于纸质的表格上,这使得制作数据汇总和提供决策建议的报表非常困难。

莫桑比克总览

莫桑比克位于非洲东南部,一共有约2400万人口。它于1975年从葡萄牙独立,尽管最近几年国家经济得到了发展,然而,大部分莫桑比克人仍然生活在贫困线以下。这个地区的HIV感染率非常高——在2014年,有超过150万人口携带HIV病毒。这对莫桑比克的医疗规划,尤其是提供HIV测试以及反逆转录病毒药品的医药物流供应链带来了挑战。

我们在实地勘察中发现,得益于来自NGO的药品捐助,很多非洲地区在国家层面上的基本药品(Essential Medicine)短缺情况并不严重。然而由于无法合理地预测和分配,很多基层医疗站都出现了药品短缺情况,导致病人无法及时获得药物治疗,而这些药品可能在旁边一个地区的区级仓库里堆放着直到过期被扔掉。

医药电子库存系统

为了让莫桑比克的病人能更快更好得到适当的药物治疗,ThoughtWorks与一家国际非营利组织合作设计开发了医药电子库存系统(ESMS)。它是一个安卓平板系统,后端采用开源的医疗物流平台OpenLMIS。ESMS主要有两个目标:

  • 作为一个容易使用并且自动化程度高的数字化解决方案,它能减轻医护人员的行政工作负担,使他们将更多的时间投入到医治病人上。
  • 收集准确、及时的药品数据并且生成报表来帮助卫生部更好地计划、分配和派发药品,降低药品的浪费情况。

减轻负担、提高效率

世界卫生组织定义的医药分配方式有两种:推送方式和请求方式。莫桑比克大多数的药品是通过请求方式来得到补充的。在请求方式中,药品需求由下层单位计算,并一级一级向上提出。上层单位接收到请求表之后对药品进行分配和运送。在一些情况下,也有下层单位自己到上层单位的仓库中去提取药品。

莫桑比克已存的药品请求流程通过纸张请求单来完成。每个基层医疗站需要维护很多药品库存卡片,其中每个药品对应一张库存卡片。每个月有一个请求药品的窗口,期间医护人员对库存药品进行清点盘查,记录清点的数量,然后根据库存卡上每天记录的数量和清点数量,在请求单上填写当月的收到、发出、清点值、差值、预估请求量等等数据。

在ESMS中,我们设计了一个电子库存卡,每月到了请求提交窗口,系统会根据日期自动把电子库存卡上的所有信息汇总并填写到电子请求单上。医护人员只需要清点每月的药品库存量,系统会自动计算差值和预估请求量。通过系统的自动化计算填写,为数不多的医护人员得以把更多的时间投入到医治病人身上。

ESMS的另一个优势是能够将库存数据和请求单数据及时地传到上层计划分发单位。纸张表格往往需要人工投递并且有丢失的风险,而电子单能够在有网络的情况下及时可靠地传送数据。 在用户测试中,受到许多医护人员亲睐的另一个产品特性是ESMS的库存告警功能。在库存中有药品快要过期或者存量过低的情况下,系统会发出相应的告警。这些告警帮助医护人员更好计划分配仓库中的药品,以减少浪费。例如,对于同类可替代药品,医护人员可以优先分发存量高、过期日期近的药品。

及时收集数据

实时的库存信息报表可以帮助政府部门和捐赠者更好的可视化莫桑比克的药品状况,作出更好的计划分发决策。然而,当这些库存信息只存在于纸张上时,它们并不能及时地被分析。

在ESMS中,我们记录了每个基层医疗站所有的库存历史。系统在有网络的情况下会每小时把最新的库存数据上传至中央服务器,然后服务器会根据最新的数据生成报表。这些信息帮助政府官员更好地追踪药品使用情况,认知所有医疗站的药品库存量。这带来了三大好处:

  • 更好的追踪和报告减少了药品的浪费;
  • 各层级官员能看到最新的库存信息、更快做出药品配送决策;
  • 历史数据趋势能够帮助预报未来的药品项目需求。有学术研究表明,历史数据的采集和分析能提高未来药品需要的预报准确率达到30%。

我们从中学到的经验

在低资源地区与政府合作实施的技术项目中存在很多与商业伙伴合作不同的挑战。我们从中学到了一些有价值的经验。

设计挑战之一是如何平衡政策的强制执行和基层的现实状况。举例来说,莫桑比克的卫生部要求在18日到25日之间开放药品请求提交窗口。然而,在用户调研中我们发现,部分用户由于地区偏远、基础设施差或者人员短缺等原因并不能在这个窗口及时提交。我们设计的系统既需要遵守政府规定的请求窗口政策,也要存在一定的灵活性来允许所有信息的收集和提交。最终我们决定允许用户在提交窗口过了之后也能上传请求表,然而,表上的数据和请求数量都由系统根据18至25日的数据自动生成而无法被编辑。通过这种方式,我们既收集了数据也没有违反相关政策。 在这个设计中我们参考了“数字化发展原则”中“理解已有生态系统”和“与用户一起设计”的两个原则。我们在开发需求前先理解卫生部的现存规范(理解已有生态系统),并且进行用户调研观察真实的用户场景(与用户一起设计)来保证方案的可持续性和可用性。

另一个重要的决定是我们如何把库存表、请求表等设计成电子表格。这里我们有两个选择:第一是根据已有的纸质表格设计一个样式几乎完全相同的电子版;第二是使用Android推荐的移动端用户体验设计标准和规范。使用现代的移动界面设计既能优化页面性能也能带来我们认为的更好的用户体验。然而,在现实场景中,我们所面对的用户很多没有任何移动设备使用经验(有些甚至不知道如何打开平板),使用我们所熟悉的移动端设计标准需要进行大量的培训。我们最终选择模仿纸质表格来设计电子表,同时加上一些方便用户的特性,例如搜索、自动采集数据和计算、提醒和告警等。这里我们仍然使用了“与用户一起设计”的原则,并且在此基础上考虑了“为扩展性设计”,避免用户培训在系统扩展的过程中成为瓶颈。

从技术上来说,网络连接是基层医疗站面临的主要问题。在大多数时候,我们的系统需要以离线的方式工作,当移动网络存在的时候系统往服务器上传数据。在这个过程中,我们遇到过一些问题,与大家分享以下的经验:

  1. 在初始化的时候,平板需要从服务器上下载所有的医疗站相关配置和药品数据。在网络非常迟缓的情况下,下载无法顺利完成、导致用户登陆出现错误。针对这个问题,我们把数据分成了两部分:首次登陆必需数据与补充数据。必需数据包括用户身份、药品清单、医药项目信息等。对于必需数据,我们设立了一个比较长的timeout;如果在这种情况下必需数据的下载仍然无法完成,系统将告知用户无法登陆,并且记录下载完的数据种类,当用户下次登陆时从下一个数据种类开始下载。而对于补充数据,系统在用户登陆后在后台进行下载,允许用户使用不涉及这些数据的功能。
  2. 当用户键入正确的用户名和密码时,由于时断时续的网络,用户验证仍然可能失败。在一开始的系统设计中,我们只考虑了两种情况:在线或者离线。用户在线的情况下我们把用户验证信息发送到服务器进行验证;离线的情况下我们使用系统自带的认证(当不是首次登陆时)。然而现在,我们必须加上第三种网络迟缓或者不稳定的情况。在这种情况下,当在线验证在一定时间内无法得到应答,系统启用离线验证机制。
  3. 有些系统功能依赖于历史数据。当网络差、后台历史数据下载未完成的情况下用户使用这些功能会导致系统错误闪退。对于这种情况,我们disable了有历史数据依赖的功能直到这些数据下载完成。在用户想使用这些功能的时候我们对用户进行提醒,并且在数据下载完成的情况下重新激活这些功能。
  4. 上传数据完成之后网络突然中断,app端无法得到服务器已收到上传数据的响应,导致数据重复上传。针对这个问题,我们在接收数据端添加了重复数据校验。当发生重复数据上传时,服务器忽略这些数据并通知app端数据已上传成功。

另外,我们使用了一些工具,例如Network Link Conditioners来模拟莫桑比克的网络情况,测试在莫桑比克的数据上传和下载场景。它帮助我们在开发中定位可能出现的网络问题并且对设计进行调整,以此来支撑不稳定和缓慢的网络状况。

ESMS现在已经部署在莫桑比克的三十多个医疗站,并且在医护人员中收到了良好的反馈。我们希望这样的系统能够作为标准化的工具在低资源地区得到扩展使用,帮助决策人员更好地制定计划,最终使这些地区的人民得到更好的医疗保障。

参考文献

  • World Health Organization. “Life Expectancy increased by 5 years since 2000, But Health Inequalities Persist”. 2016 June.
  • Yohannes Kinfu, Mario R Dal Poz, Hugo Mercer et al. “The Health Worker Shortage in Africa: Are Enough Physicians and Nurses Being Trained?” Bulletin of the World Health Organization 2009;87:225-230. doi: 10.2471/BLT.08.051599
  • Bryan Lowell, Michael Conway, Tineke Keesmaat et al. “A Practical Approach to Health System Strengthening in Sub-Saharan Africa”.
  • M.C. Azubuike, John Ehiri. “Health information systems in developing countries: Benefits, problems, and prospects”. J R Soc Promot Health. 1999 Sep;119(3):180-4.
  • Fraser HS et al. “E-health systems for management of MDR-TB in resource-poor environments: a decade of experience and recommendations for future work”. Stud Health Technol Inform. 2013;192:627-31

更多精彩洞见,请关注微信公众号:思特沃克

Share

三根柱子

Martin Fowler

11 May 2011

ThoughtWorks是一家不寻常的公司, 这也是为什么像我这样反集团化的人可以在这里一下子工作十几年。ThoughtWorker有一个很重要的共识,就是我们并非把公司看做是一个纯粹的商业实体,而是拥有更远大的格局和视野。在过去的几年中,我们一直在用“三大支柱”的模型来描述我们对自己的设想。

这个模型是从一家叫做“Ben&Jerry’s”的冰淇淋公司借鉴而来的。描述的是一家公司的三大核心支柱:可持续的业务、软件卓越以及社会公正[1]。关于成功,每个支柱都有其自身的定义,不过对于整个公司而言,成功意味着必须去平衡这三大核心支柱。这些支柱本身并不冲突,在通常情况下恰恰是相辅相成的——这也就是“平衡”的意义所在。

可持续业务

“可持续的业务”这一支柱指的是要确保我们有可持续的商业收入。这么多年来,我们在这点上一直做的很好,也正是因为这样,我们才可以继续在这家公司工作。我们已经经历过两次经济衰退期,我认为一个公司在经济衰退期的表现,最能体现出它在商业上的健壮性。在过去的十几年里,我们也同样成长了很多,在我刚加入时,ThoughtWorks在美国办公室有大约300人,而现在在全球范围内已有超过4500名员工。此处应有掌声给到我们的运营管理团队。

然而,商业成就并不能代表一切。这里我引用一个比喻:

收入就好比氧气,你需要它来保障自己的生存,但它却不是你生存的目的。

软件卓越,在广义上我喜欢叫它专业卓越支柱,就是说要把你的事情做得很好。对于Ben&Jerry而言,这个就是指要做出非常棒的冰淇淋。而对于我们,这里指的是交付有价值的软件。我对这个支柱有很多的共鸣,因此我们也一直致力于改进我们做事情的方式。

软件卓越

第二支柱“软件卓越”和第一支柱“可持续的业务”之间有一些有趣的分歧。对于客户而言,我们是一群难相处的咨询师。我们来到他们的公司,使出浑身解数,用我们认为更好的方式,来帮助他们改进开发软件的流程 。这种做法有时会导致一些IT员工强烈不满。记得我们的同事Trevor Mather(曾出任ThoughtWorks的CEO) 对比过ThoughtWorks和他工作过的Accenture,他说ThoughtWorks在软件交付方面做得比Accenture好多了,但是客户更喜欢与Accenture合作。一个同事把我们比作总是不能建立融洽关系的、苛刻的私人教练。

另外一个分歧是关于产品的。我们的产品部门经常接到一些对“卓越软件交付”没有帮助的业务需求 。如果置之不理,我们将会丢失很多业务机会;然而我们也不想耗费人力、物力来增加一些无意义的工作。此外,相比其它供应商,追求第二大支柱——软件卓越会让我们错过许多赚钱的机会。许多咨询公司虽然获得了很可观的收入,但都是来自于一些需要付出大量人力却没有给客户提供足够价值的商机。

更进一步讲,我们认可的软件卓越不仅仅是交付好的软件,还希望能够推动整个软件行业的发展。这就是为什么有那么多的ThoughtWorker愿意在公开场合不停地探讨或者出版图书,去分享我们的工作方式和学到的知识。[2]

社会公正

“社会公正”这一支柱关注的是,我们作为一家公司如何才能对社会产生更广泛的影响——我们可以让世界变得更加美好吗?很多人都认为这跟一家公司是没有任何关系的,一家商业公司就应该赚钱,仅此而已。如果这样的话,只要有人买、卖任何东西就可以,哪怕这个东西会对消费者和社会造成伤害。我不能认同这样的观点——我也很乐意赚钱,但我认为收入应该来源于给消费者和社会提供有价值的事物。

虽然我们为公益事业付出了越来越多的有偿或无偿的工作,但对我来说,“社会公正”并不仅仅意味着这些,它还关乎于我们的核心工作并探索如何造福社会。开发一个软件,可以让一个公司更有效地销售有用的产品,是值得的。尽管改善美国二手车市场的运作并不像在自然灾害中帮助找到孩子那样具有社会魅力,但我仍然认为这是人类在过去几个世纪里更加繁荣昌盛的原因之一。

关于是否为某些客户工作,公司内部因为社会公正支柱产生了很多辩论。这与我们的第一支柱和第二支柱产生了明显的矛盾,我们拒绝了报酬丰厚并且技术上很有趣的工作,只是因为我们认为这些客户不符合“社会公正”的标准。同时,我们也失去了很多优秀的ThoughWorks员工,他们加入了那些认为“社会公正”无关紧要的公司,以便于更好的追求其他。

关于什么是对社会有益、什么是对社会无益,在ThoughtWorks员工中存在非常大的争议。我很高兴我们遵循这样的原则,当我们的员工认为某个客户对社会不负责,而拒绝为他工作时,我们会尊重员工的意愿。在这些决策上,尤其是随着我们的发展,在ThoughtWorks整体上想达成共识就变得更加困难。

我很关注这些支柱之间的矛盾,平衡它们是一件很有趣的事情,而相互促进也同样重要。许多人正是因为我们对社会公正的关注,选择加入并留在ThoughtWorks。我们对软件卓越的专注也造就了“ThoughtWorks”的品牌,使我们更加容易度过衰退期。我们许多的非盈利性工作都是在商业价格的基础上完成的。并且我相信,从长远来看,支柱之间的相互促进会胜过彼此的矛盾。

作为一家公司,我们拥有很多目标,三大核心支柱塑造了一种高效的思考方式来考虑和平衡这些目标。当我们进行决策时,可以从每个支柱自身的角度去评估,最终形成圆满的决策。但还有更多的事情要做,尤其是怎样去评估每个支柱的成败。评估可持续的业务这个支柱相对容易,因为可以跟踪资金流[3]。但是对于其他两个支柱而言,挑战在于找到类似的评估标准,从而更全面地了解我们的进展。

注释

1:我们经常在公司内部用数字来标示这些支柱(在没有想出名字之前)。可持续的业务是支柱1,软件卓越是支柱2,社会公正是支柱3。这些数字并不意味着任何排序。

2:除了营销目的,大部分的咨询公司不会公开谈论他们的工作。这是因为商业计算表明,像写文章和参加会议这样面对公共的工作会减少个人收费时间,造成额外的开销。并且,将关键技术分享给竞争对手和潜在客户是一种愚蠢的行为,因为这使得他们可以在不通过咨询的情况下使用这些技术。

3:实际上这是不容易的。很多公司通过分析其短期的财务状况,比如季度报表,来评价其商业的成败。但是如果我们想要公司能够长期发展,就需要找到一个长期度量的标准,这往往更难。

边蕤 刘丹 井寒 李亚娥 聂桂伶 刘杰凤 张兰兰 石园杰(译)


更多精彩内容,请关注微信公众号:软件乌托邦

Share

Bahmni,公开的敏捷项目

Bahmni是什么

在ThoughtWorks,我们有三个重要的使命,其中第三个支柱“推进社会和经济公正”让我们有机会去改变这个世界,让更多的需要帮助的人得到信息化技术的帮助以改善生活。Bahmni(读作“巴姆尼”)正是在这个使命下孕育的一个项目,其目标是让Jan Swasthya Sahyog(人民健康扶助团,简称“JSS”)、以及其它成千上万类似的医院实现信息化。

ThoughtWorks印度公司从2013年开始做这个产品,其核心是一个开源的电子病历(Electronic Medical Record)系统OpenMRS。这个软件内建了一套标准的医疗信息记录数据体系,在北美和南美的一些医院里应用并收到了很好的反馈,并且有一个活跃的社区(包括医学专家、公共卫生专家和IT专家)在不断完善它。我们组建了70余人的团队,分布在印度的4个城市和中国的成都以便支持整个项目的开发。(部分摘自《印度儿童诗雅拉尔之死》)

Bahmni产品目前在印度、不丹、孟加拉国等国家均有实施,最为耀眼的是在孟加拉国,Bahmni会作为整个国家的HIE(Health Information System 医疗信息化系统)。

更多的介绍请见:

我们的敏捷实践

Bahmni是一个开放的敏捷项目,世界上任何一个人都可以对该项目做贡献,而不仅仅局限于ThoughtWorks内部。为了能够让更多的人参与,ThoughtWorks选择了开源的工具、开放的敏捷管理方式,这些管理、实践、工具和ThougtWorks的其他内部项目和客户项目均类似,参与者参能够用到最佳的敏捷开发方法。

公开的知识管理

一款开源的产品如果无法很方便的使用,则失去了它大部分的价值。在Bahmni项目中,团队很重视文档,采用AtlassianWiki进行知识管理。Wiki涵盖了产品的特性、社区、实施指南、开发指南、项目管理等方方面面。ThougtWorks内部对文档进行了持续的更新,保证文档的健全,为项目的参与人员提供了最大程度的便利。

公开的需求管理

在Bahmni项目中,客户是医院的工作人员,他们会提出各种各样的比较模糊的需求。同样在技术上Bahmni也会有自身的一些需求。Bahmni在管理这些需求的时候,采用了Trello将所有的需求管理起来,所有人都有权利看到并对需求提出自己的看法。每过一段时间,产品经理将会对所有的需求进行Review,包括对需求澄清、进行进行优先级的划分。

每一年,Bahmni团队会召开一系列的会议对Trello内的需求进行梳理,制定出一年的Roadmap。所有的人包括来自于OpenMRS的开发者、自由开发人员都可以参加Roadmap的制定过程,提出自己的意见和建议。但这个Roadmap并不是一成不变,敏捷总是拥抱变化,所以在变化产生的时候,Roadmap也会做及时的调整。

公开的迭代管理

迭代计划会根据Roadmap进行制定,我们使用mingle对项目进行迭代管理。

使用这套系统,任何人都可以看到卡的状态及内容,持续跟踪整个项目的进度。开发的人员提交的代码会和卡根据提交记录中的编号进行关联,方便事后对卡片的内容进行追踪。每个迭代都会有一系列的会议,对于ThoughtWorks之外的团队、个人,我们提供了Events Calendar以便他们参加会议。

技术实践

Bahmni项目使用了多种技术实践来保证产品的质量。

我们使用TDD,为每一个业务价值书写单元测试,测试覆盖率高于80%。我们用Gauge对页面进行端到端的测试,每天进行产品的回归测试。我们用GoCD对产品进行持续集成及版本发布,保证发布管理的自动化,减少人工干预导致的各种问题。产品发布并部署到到测试使用的云环境以及Demo环境,全程只需要很少的界面点击即可完成。

活跃的社区

Bahmni是基于OpenMRS的一套医疗管理系统。基于OpenMRS的客户群,我们在OpenMRS Talk中专门开辟了Bahmni的版块,对Bahmni相关问题进行解答。我们深知活跃的社区对于一款开源产品的重要性,所以团队内部有专职的人员对社区进行追踪,尽最大可能及时的回答用户的问题。为了更好的帮助用户快速入门,我们还准备了Youtube的频道进行了大量的讲解。

同时,我们还有IRC Channel对用户进行实时的帮助。Bahmni团队所有的开发人员都被鼓励去回答用户的问题,只有开发人员和用户有最近的距离的时候,开发人员才能理解用户的需求以及诉求,从而设计更好的系统。

我们也积极参与OpenMRS的开发和讨论,每周OpenMRS都会有开发人员的会议,基于OpenMRS的产品团队、开发人员都可以参与到会上进行交流。每年OpenMRS都会举行OpenMRS Summit,Bahmni作为其发布版也参与到其中贡献数个话题并寻求积极的反馈。

总结

Bahmni项目的公开运作方式从产品的设计到需求的获取到最后的开发得到了大量的社区用户的积极参与,线上线下的结合拉近了和用户的距离。ThoughtWorks一项以技术实践为骄傲的敏捷开发方式在产品的生命周期内展现的淋漓尽致,可以说是敏捷项目的一个标杆。


更多精彩洞见,请关注微信公众号:思特沃克

Share