Tag: 敏捷

认识我们的厨师:뱅크샐러드iOS팀을만나다

与我们的厨师 Chef见面레이니스트지엔지니어링리즈입니다。 App Store更新日期2018年5月14日,在iOS上添加了사내(aka기사네)。 안녕하세요? !기자소개다! 찬울:안녕하세요! 만사한지는되었지만,1分3分째iOS팀에서김찬울입니다。 iOS的첫젝트의게。 보영:나이는가아니지만,입사5개월차이자박보영입니다。 했었는데로벌했었는데했었는데。。일하고일하고일하고일하고다。。있습니 主题:간편결제서비스P앱,서비스개발하다레이 니스 안관수입니다안관수입니다。 레이니스트엔지니어링되셨나요되셨나요되셨나요? 内容: Web팀이사용하는 기술스택 이인상깊어서 Web팀으로합류하게。 중,iOS자원해서이새롭게다는기얘iOS자원해서기될가있었습니다。 없는관련된관련된식하나도없는없는같은데같은데같은데같은데적인적인적인가가가가있나요? 内容:제가서비스를,좋아하는같아서같아서원하게원하게원하게원하게원하게원하게원하게 관수비슷한데요비슷한데요비슷한데요 비슷한데요관수비슷한 데요비슷한 데요비슷한 데요비슷한 데요비슷한 데요비슷한 데요。。。。。。。。。。。。。。。 양한다양한가계부이나와있는데,뱅크샐러드를이유가있나요? 主题:iOS的복사계부붙여넣사-붙여넣기를사실상기로로。 들었어요다뱅크샐러드를용해용해용해입력해주는입력해주는입력해주는들었어요들었어요들었어요들었어요들었어요들었어요 회회는는니니니있던원하게원하게원하게원하게원하게원하게원하게원하게원하게원하게원하게원하게원하게원하게원하게 보영:관수님이랑。 라는이라는,존에는개발라는유유었어요었어요었어요었어요었어요었어요었어요었어요었어요었어요 배우고,배우고사에가면다지사의。 产品6가상용하고용하고용하고앱앱고고서비서비스 。 。로바다。 😆😆 아닌적으를를니니니니아닌아닌니의의의니니니원하게 iOS팀을! 보영:음떠오르는이미지는말로는잘잘잘。 iOS등장한초기부터있고있고,른를를를를를고고고처음처음팀팀팀팀팀팀팀팀팀팀 찬울:이게바로온고지신? 😆 있어요영님영님양한양한술을술을술을도입하고도입하고도입하고도입하고도입하고도입하고도입하고도입하고도입하고도입하고도입하고있어요있어요 在iOS平台上100%Swift升级,在RxSwift가가上。 고리고MVVM향하고향하고향하고향하고。 술적인만만만만만만만만만만만만만공유하고공유하고라고라고라고라고라고라고라고라고라고라고라고만 主题:관수로서로에이피드백이되게이라고。 부분부분부분서피드백을두려워하두려워하두려워하않고않고같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요같아요 内容:iOS版모두금금랑하고너무사랑하고。 […]

StackRank 1.3.1的新功能

发布日期2017年2月28日 StackRank是一个iOS应用程序,可通过将积压工作与客户,合作伙伴和利益相关者联系起来,帮助您确定积压工作的优先次序。 StackRank的更新每月发布两次。 下载iOS版StackRank 此版本中包含的新功能: 登机/欢迎屏幕 :更强大的登机体验。 StackRank现在将引导您创建堆栈,邀请参与者,添加项目并对其进行排名。 单人游戏模式 :堆栈所有者模式的用户体验,它允许堆栈所有者通过拖放方式以他们喜欢的任何方式对堆栈进行优先级排序。 新的入职体验 入门很重要…虽然第一个版本的StackRank确实有一个欢迎屏幕,该屏幕允许用户通过输入主题并上传图像来创建堆栈,但这还不够。 我们发现我们的第一批早期采用者并没有超越他们在欢迎屏幕中完成的第一项任务。 是因为他们不知道该做什么或怎么做? 还是当时不准备使用新创建的堆栈? 我们不知道 但这不应该使我们无法找到答案。 本着“精益创业”的精神,我们决定重新设计入职培训,以使用户完成整个过程,不仅要创建他们的第一个堆栈,而且还邀请参与者,为堆栈添加种子并对其进行排名。 如果我们的假设是用户根本不了解与应用程序进行交互的方式或方式,那么我们应该会在用户与应用程序的初始交互中看到明显的增长。 我们希望它将推动重复的互动。 单人游戏模式 StackRank允许您从其他人那里获得有关堆栈中项目的反馈。 该应用程序的大部分价值都取决于您必须邀请参与者与您互动的事实。 但是,如果您还不准备邀请任何人呢? 在此版本中引入了单人游戏模式,该模式侧重于“堆栈所有者”,即使他们还没有准备好邀请任何人,也可以提供价值。 现在,使用此版本的StackRank,我们允许您通过将项目拖放到您决定的堆栈等级优先级中来自己管理堆栈。 准备就绪后,您可以邀请参与者了解他们的想法,只需在视图栏中单击“社交”即可获得反馈。 同时,单人游戏模式将为您带来非常好的StackRanking体验。 堆放它!

峰值和稳定仅在以下情况下有效:

如果您正在练习敏捷,您可能知道峰值 。 这是一个有时间限制的代码实验,目标​​是学习。 丹·诺斯(Dan North)提出了一个新的概念,称为“ 峰值和稳定”。 这是一种高纪律模式,目的是通过不花时间在不重要的功能上进行测试,重构和设计,从而快速创造价值。 我们的想法始终是从一个高峰开始,我们将向用户学习,并承诺以后例如使用测试驱动开发 (TDD)来稳定它。 它可以帮助团队将重点放在对客户重要的问题上,并且如果代码没有带来任何价值,也可以避免丢掉代码。 我发现这种方法非常有效,另一方面,我对将凌乱的代码创建到生产代码中并在以后使其稳定的想法感到不满意。 我是Robert C Martin如何描述专业开发人员的忠实拥护者: 专业开发人员切勿推动任何未经测试的代码生产线。 -罗伯特·C·马丁(鲍勃叔叔) 我认为只有将尖峰与生产代码隔离开,S pike和Stabilize才能起作用。 当需要稳定它时,使用TDD,SOLID原理并对其进行清理很容易将实际代码移入生产环境。 在iOS开发中,使用Swift Playground可以很容易地将尖峰与生产代码隔离开。 苹果在博客文章中将其描述为: 交互式游乐场可以帮助您快速原型化和构建应用程序,并提供另一种与代码交互的好方法。 通过与生产代码隔离的原型来探索新功能,使开发人员可以从可行的投资中寻求可行的回报 。 肯特·贝克(Kent Beck)在他的3X概念中对此进行了描述: 冒险寻求可行投资的可行回报。 成功的勘探是无法预测的,因此最高的期望值策略是降低实验成本,并为许多不相关的实验投入少量资金。 如果您幸运的话,这些实验之一证明是出乎意料的成功 最后,我认为所有iOS开发人员都应始终从Swift Playground页面开始,然后将代码拉成看起来像是首先经过测试驱动的形状 🤫。 丹·诺思(Dan North)在GOTO会议上谈论尖刺和稳定(15:50至27:30) 肯特·贝克(Kent Beck)谈论3X概念(始于20:21) 布兰登·威廉姆斯在FrenchKit会议上谈论操场驱动开发 如果您认为这将有助于其他开发人员更好地开发产品,请随时发表评论和分享。

我们的健康编码惯例以及它们如何为您提供帮助

在Mobile First,我们以成为快乐的编码员而感到自豪。 在鼓励实验的同时,我们也认识到有时最好遵循我们自己的久经考验的指南以获得最佳结果。 为了保持平台独立性,我们寻求遵循的通用规则,并且不允许自己陷入诸如制表符缩进或语言功能之类的细节中。 我们是快乐的编码员,对我们来说,这意味着…… 复制代码行时,可能是在复制错误(错误),非最佳方法或外部依赖项。 如果有问题的代码分散在您的整个应用程序中,您将无法轻松进行改进。 查看高度重复的代码也将给您带来真正的déjàvu! 始终使代码起作用并注入依赖项/参数。 在创建,理解,测试和错误修复代码时,在一堆中做太多事情是无法管理或维护的。 这就是为什么我们使用单一责任原则。 从功能到对象,甚至到整个应用程序(例如Facebook Messenger),都可以转换为各个级别。 始终将任务分解为更小的简单组件,这些组件只能访问其所需的信息。 不要让人们在您的实现内部获取肮脏的手套! 仅公开已设计并经过测试的要更改的内容。 确保您的实现已通过单元测试针对这些更改进行了测试。 从外部角度查看对象,它的协议有意义吗? 始终使用访问级别的保护,将所有内容设为私有,并在需要时进行升级。 寻找定义明确的协议。 具有全局范围的变量和函数的全局文件(称为“常量”,“助手”或“ utils”)倾向于链接系统的不相关部分,从而使代码难以重用。 单例有相同的问题。 大量使用单例使理解对象依赖性变得很困难-因为您将必须检查实现以查看其使用方式。 由于难以模拟单例依赖关系,因此很难进行单元测试。 始终倾向于依赖注入而不是全局范围和单例。 常量应保存在其所属类的范围内。 这样可以更清楚地了解哪些对象需要运行,从而使代码更易于进行单元测试。 考虑一下对象的生命周期,不要在不需要时不挂对象。 幻数和文字使我们更难理解它们对代码的影响。 它们是非描述性的,并且经常在一个以上的位置需要相同的值,因此,当您要调整该值时,需要在多个位置进行调整……而总是忘记一个位置! 参数化常量/文字,并为元素赋予有意义的名称。 我们编写的所有代码都意识到会被同行评审。 清楚地布置代码,以使其易于阅读,理解和使用描述性名称,以便您的同事可以解密所有内容。 当您在那里时,请先查看自己的拉取请求,然后再添加对等项。 使用源代码管理时不遵循某个过程可能会导致提交未经测试的代码。 它还可能导致提交遗失,进而破坏同级的构建。 遵循 git Flow :使用功能分支,重新设置基础并使用拉取请求。 创建发布分支,仅允许错误修复,并禁止从dev分支进行合并。 一遍又一遍地执行相同的代码会变得很老,因此我们在代码中寻找有用的模式。 如果有人注意到我们面前的一种模式,为什么还要重新发明轮子呢? 将通用代码拆分为可重用的可测试框架。 寻找现有框架,进行审查并做出贡献。 在事后看来,通常会有更好的方法来做某事,我们对此表示欢迎。 我们认为重做组件化代码的各个部分应该是常见的做法。 识别何时该重构。 如果一段代码偏离了其原始意图,那么重构比将其击败来提交要好! 可能只是适当地重命名的情况,但是如果有更好的方法可以将其标记为重构。 重构是件好事,这就是世界的运作方式。 相当于生活圈的编码! …因此,我们认为自己是快乐的编码员。 我们鼓励您尝试一下并创建自己的准则。 […]

我见过的iOS开发最佳实践在GrubHub上

鉴于GRUBHUB是我工作过的第一家技术公司,所以我分享的一些实践可能会受到限制。 在加入GRUBHUB之前,我曾在企业公司工作,这些公司通常在业务和技术实践之间存在分歧。 他们不一定彼此一致。 通常,企业拥有更大的发言权,因为它们控制着公司的财务方面。 因此,我喜欢在技术驱动的公司工作。 这也是我第一次体验真正的敏捷开发过程。 以下几节是我作为开发人员的经验。 团队架构 为了使该过程正常进行,每个人都必须在同一页面上。 在我们的案例中,利益相关者包括开发人员,产品所有者,分析代表和质量检查工程师。 有时,设计师需要参与。 在GRUBHUB,我们非常重视产品的质量。 因此,我们选择以高质量实现较少的功能。 产品管理 在GRUBHUB,我们与产品所有者紧密合作。 产品所有者负责管理其票务的优先级,我们将其作为一个团队进行梳理。 修饰过程每周进行一次,持续30分钟,偶尔会召开临时会议来修饰需要紧急完成的其他票证。 在会议期间,开发人员可以确定需求中的任何差距,并在组合中添加任何单元测试和功能测试,因为开发人员还负责实施自动化测试(单元测试和功能测试)。 我们的质量检查团队会进行更多的探索手动测试,以检查整个应用程序的运行状况。 他们有更全面的看法。 这就是质量检查团队参与修饰过程的原因。 它们有助于确保票证包含需要由开发人员自动化的用例。 产品负责人负责提供足够的详细信息,包括验收标准,设计模型,API请求,流程和测试数据。 在计划过程中,开发团队的负责人将根据产品所有者的优先积压工作,获取冲刺门票,并进行相应分配。 在这一点上,任何经过修饰且可用于计划的票证都将具有开发人员要处理的所有详细信息。 由于我们的冲刺周期大约为两周,因此我们所有人都在确保票证上有足够的信息以在一周的短时间内完成开发。 发展管理 除非包含单元测试/功能测试并通过代码更改,否则不会创建任何请求请求。 为了使开发团队能够做到这一点,我们在工作开始之前进行了设计审查,编码风格指南,持续集成系统以及代码审查流程。 开发人员在其各自的分支机构工作,并负责在合并到主分支机构之前从其分支机构创建临时构建,以完成所有验证。 验证包括与设计人员进行的任何视觉质量检查测试以及与负责任的产品所有者进行的功能测试。 开发人员需要完成的其他其他任务包括在登台环境中进行实验。 需要注意的一个重要关键是,我们有很多时间专注于开发而不会受到任何干扰。 所有会议均安排在中午12点之前和下午4点之后。 因此,这段时间之间的任何时间都致力于开发。 发布管理 我们的发布周期为每两周一次,因此每天都会举行发布会议,以对任何新缺陷进行分类并检查发布状态。 与会人员包括质量检查小组和开发人员主管。 在这段时间里,他们还会优先处理需要解决的所有关键错误。 任何超出范围(包括产品所有者期望的其他更改)的提议,都会将它们放入待办事项列表中,以优先考虑将来的冲刺。 我们的目标是最终将发布周期缩短至一周,随着我们完善上述流程,我们将能够实现这一目标并更频繁地发布到应用商店。 我们的流程是可预测的,为开发人员完成工作以及按时按计划交付提供了一定的稳定性。 然后去哪儿? 您是否在团队中经历过类似的最佳实践? 您是否发现其他有价值的东西可以提供质量。 最初发表于《如何在Swift中做到》。

如何在2个月内启动移动应用并执行敏捷转型

我将向您介绍一个故事,我的团队如何在短短2个月内启动iOS和Android应用的票务服务,如何轻松完成从Waterfall到Agile的过渡。 首先,我将描述项目的起点,软件开发流程之前的工作方式,并将重点介绍有助于我们取得成功的关键活动。 本文无意取代Jeff Sutherland的《敏捷宣言》或《 The Scrum》。 相反,我将告诉您,我们如何改变工作流程以更快地交付产品,而无需雇用大量敏捷教练和Scrum大师。 对于想开始自己的家庭项目的人们来说,本文也将是有用的。 我将向您展示在特定时间值得关注的重点,而不是重点。 所以,让我们开始🙂 这一切始于大约5年前。 我刚刚加入了一家俄罗斯的大型媒体公司,该公司有很多不同的产品:很少的在线报纸,娱乐服务,体育门户等。此外,我还向您介绍了这项票务服务。 该服务的主要功能是销售在线电影院,剧院,体育赛事的电子机票,使用户无需预定现金平台即可预订最佳座位。 幸运的是,我们已经在运行桌面和移动网站。 服务非常成功。 与往常一样,有一些限制。 不想打扰您的数字,只会说移动网站的表现不如预期。 这样做的主要原因是: 过时的UI设计 可用性问题 无法查看座位图 当然,可以解决第一个和第二个问题,但要提供功能齐全的座位图并进行离线票务存储肯定需要使用移动应用程序。 您应该在这里询问用户如何在不查看移动网站上座位图的情况下购买机票。 这是一个很好的问题。 后端团队的同事开发了一种算法,该算法会自动选择尽可能靠近中心的座位。 有时效果很好,有时效果不佳,有时客户想在最后一个“亲吻”行预订座位,而无法这样做。 但是,将应用程序与网站进行比较的好处是另一篇文章的绝妙主意,因此,在此我要说的是,我们很确定需要启动该应用程序。 除网站外,我们还有一个用于合作伙伴网站的XML API,可让他们获取地点,事件和时间表的列表,并能够在弹出窗口中购买门票。 现在您应该了解我们项目的起点。 如上所述,我们在工作中广泛使用了Waterfall方法。 我们将iOS,Android,设计,质量检查,后端团队和项目经理大军分开了。 因此,当我的项目经理首次与我联系这个令人兴奋的新项目时,我很高兴从头开始在这家公司开始我的第一个产品。 但是初次见面后,我所有的幸福都消失了。 发生了什么? 这次会议的主要目的是根据我们只有很少的UI设计来估计发布日期。 我们发现 用户界面设计不完整,缺少很多屏幕 我们获得的用户界面非常复杂,具有许多复杂的手势和动画,用户难以理解和使用,并且难以实施 技术要求甚至还没有接近完成 后端团队在接下来的几个月里很忙 这就是为什么我们发现我们无法进行估算来为此项目保留移动开发人员的资源。 老实说,我们实际上无法预测发布日期。 当然,我们可以说大约需要6个月的时间。 但是,如果您对如此庞大的应用程序的整体数量和复杂性一无所知,那么您的估计将非常不准确。 对于瀑布队来说,这是很平常的情况。 为了解决这个问题,我建议首先使用我们自己的UI设计并在第一个版本中启动少量重要功能,然后再发布最低价值产品(MVP),其余所有功能都留给我们应用的下一版本。 这个想法看起来很新鲜和令人兴奋,我们决定尝试一下。 技术要求和我们提供的UI设计屏幕中有很多功能。 我们清楚地了解到,我们无法开发出能够保持最高质量的产品。 敏捷来了! 我们写下了所有功能的列表,并问自己:“哪个功能最重要? 如果没有我们的应用程序的哪些功能,将无法使用?” 以下是为我们的产品定义的关键功能的列表: 电影院名单 […]

行动应用程式品质

创业理念 在初创企业中,突然产生了一些想法,每个公司都必须将其应用到: 快点,快点失败! 尽快发布产品,以便我们获得客户反馈! 如果您考虑大型公司以前所做的一切,那么所有这些都是好主意。 每隔几个月发布具有许多功能的应用程序。 该应用程序必须执行所有操作,如果缺少需求列表中的某些部分,则发布会延迟。 顺便说一句,该列表包含1474或更多要求。 因此,比以前的事实上的标准更快地发布是一个好主意。 不幸的是,大多数时候人们忽视了全局,导致了维护的噩梦。 我见过带有8000多行Objective-C ++代码的MVC(大型视图控制器)。 添加功能不需要花几天时间,而是要花几周甚至几个月的时间,开发速度就停止了。 这是技术债务的结果,由于专注于发布和截止日期而积累了债务。 总之,质量再次出现在公司眼中。 他们开始要求制定不合理的规则(例如,我以前的公司之一将该规则落实到位,“ 70%的新代码需要进行单元测试”)。 有了这种违反逻辑的规则,开发人员往往宁愿忽略它们并按原样进行。 这没有任何改善。 我们如何改变它? 为了追求更好,开发人员爬网。 更好的程序员,更好的架构师,任何更好的东西。 他们经常偶然发现每个超级/ rockstar-ninja-程序员都应该知道的有关应用程序体系结构,编程模式,新范例或其他特定主题的帖子,但他们很少能找到有关质量的信息。 是的,了解(并应用)最新的开发趋势绝对是一件非常棒的事情,但这是否可以帮助您在一两年内维护该应用程序? 最初开发应用程序后会发生什么? 谁来照顾它? 你如何释放它? 您修复哪个错误? 在维护应用程序的同时,您还能如何开发新功能? 所有这些问题都不是开发人员通常关注的部分,但它们仍然是他的日常生活。 越早接受它越好。 随着您开始提供更高的质量,它对您的公司或客户也越好。 由于您正在阅读本文,因此您可能遇到与我一样的问题。 这个博客 该博客的目的是回答以上问题,甚至更多。 由于遵循结构化的方式要比仅几个松散耦合的帖子更容易,因此我们将创建一个应用程序,并在每个新帖子中改善质量观念。 这将引导我们经历不同的阶段,需求和想法,所有这些(希望)将帮助您减少捷径,并可能在非功能性需求上花费更多时间。 如果您像我一样,就讨厌编写演示应用程序了。 因此,该应用程序将没有直接代码。 相反,我们着眼于创造最好的特定要求和采取的步骤。 由于此应用程序需要一些实用性,因此我们收集一些要求。 它需要: 有一个用户界面(没有一个,应用程序的用途是什么?) 从后端请求数据 从后端解析数据 显示来自后端的数据 将数据发送到后端 与用户互动 无需全面的手动回归测试即可发布 在短时间内发布(在Scrum中,我们每2周讨论一次新发布,具体取决于冲刺周期) 哦,别忘了: 一个团队(至少2个)正在为此工作 这是我们目前的清单。 当然,如果您有更多要求,请发表评论。 […]

软件估计:最低可行产品

所有想要创建移动初创公司的受启发的企业家,总有想法,在最早阶段就有很多想法,而在开发过程中却有两倍。 构想这些想法至关重要,每个项目都要从确定成本和交付期限开始就很合逻辑。 换句话说,有一个估计。 必须将整个项目分成较小的块,直到每个块都可以理解并可以评估为止。 自然,它看起来很简单。 现在,我们将带您更深入地了解这一过程。 由于我们专注于移动开发,因此我们想讨论最流行的启动解决方案-为iOS应用程序开发MVP(最小可行产品)。 什么是MVP? MVP是用最少的成本和时间创建的产品,但是它为用户提供了一定的价值和某些功能。 重要的是要记住,MVP并不是未完成的产品。 这意味着用户将获得一个可行的版本,该版本将来会收到更多功能。 MVP可以帮助您解决与常规产品相同的问题,尽管方法更简单。 例如,一个人必须在现实生活中从A点移到B点。 滑板将是一个良好的开端。 当这个人开始赚更多的钱时,他们会购买更好的车辆。 两种估算方法 可以对敏捷或固定开发方法进行估算。 敏捷开发的评估是对项目的近似评估,取决于当前可用的需求。 这不是最终的估计,而是初步的计算。 它有什么优势? •整个过程或多或少完整时,可以在开发过程中轻松修改需求。 •即使对需求进行了概念描述,也可以给出此估计值。 •它提供迅速,这意味着较早开始开发。 •开始之前不需要深入说明; 每个产品负责人都知道,当这个想法还没有形成时,要想将所有事情都付诸实践是很困难的,而您却想不时地进行改进。 主要缺点是,该估算值可能比最终成本小几倍,因为产品所有者发起的需求变更几乎是不可避免的。 固定开发预算是根据详细要求对项目进行的精确评估。 它有什么优势? •要求很明确,每个人都知道结果必须是什么。 •因此,期限和成本也是已知的。 缺点是: •必须在项目启动之前就已形成所有要求。 •要求是固定的。 任何更改都会导致重新估算和基于这些估算的新合同。 换句话说,失去了灵活性。 •此估计需要更多时间。 •如果没有UI / UX设计,验收标准和产品规格,则无法进行此估算。 这会使事情变慢。 应该选择哪种方法? 这是每个产品所有者的决定。 可以肯定地说一件事:详细的需求意味着更精确的估算,这可以实现最佳的预算计划。 定义的需求越早,实现起来就越简单和便宜。 在分析过程中,更改它们非常容易。 但是随着项目的进行,它变得越来越难。 如何准备估算要求 完美的情况是,当有设计,应用程序图或可单击的原型,并附有包含应用程序一般说明和每个屏幕或功能的文本说明的文档时。 一个示例:典型应用程序中的登录屏幕。 我们将从描述开始: 登录名必须在屏幕顶部包含公司徽标,2个输入字段(“电子邮件”和“密码”),以及“登录”,“ Facebook”,“使用条款/隐私政策”按钮, “注册”和“忘记密码?”。 点击“登录”后,带有帐户数据的请求将发送到服务器,在服务器上执行字段验证,应用程序将根据服务器的响应显示有关此操作成功或失败的消息。 轻按“ […]