Timlid在2018年工作

在本文中,我将讨论我在网站开发公司中担任团队负责人的经历。 为了使每个人阅读起来都更加有用和容易,本文分为几章,每一章都讲述了一个单独的问题及其解决方案。 尽管,如果可能,将保留事件的时间顺序。


我希望以下所述的经验会成为别人的荣幸,在我自己的评论中,我本人会从更有经验的同事那里汲取教训。


但是没有姓名,公司,客户,同事的名字。 保密协议,所有事情。


背景 我如何以及在何处成为团队负责人


这是我立即带队领导的第一家公司。 对我来说,这是职业发展方面的一次巨大飞跃。 我以中间人的身份上一份工作(1.5年),并在那里长大。 但是开发人员的等级过于主观,通常仅取决于他们工作的公司。 一段时间以来,我研究了很多评估程序员的问题,从本质上讲,这全都归结为以下事实:如果“他们选了中高级/高级/高级,我就成为中高级/高级/高级”。 当我开始寻找工作时,我会担任足够的高级职位(而且我一直在寻找它),但提供lid窃的提议使我胜过,并有些受宠若惊。


实际上,当我在寻找职位空缺时,第二天我被吸引到一家在Bitrix上开发网站的大都市公司(因此所有事情都发生在Bitrix上开发网站的背景下)。 相反,我早就梦想着离开Bitrix,但是有机会以崭新的品质和高薪水实现我的潜力,所以我没有机会拒绝。


有趣的事实:雇用我的唯一条件是我可以自己选择技术堆栈,但是如果客户坚持要求,我决不应该拒绝Bitrix。


在一个新地方


在新的地方,有一个非常好的技术老板,可怜的经理,June,Middle和Bitrix上的几个非常大的项目。 这是一个非常奇怪的情况,我仍然不知道它是如何发展的并且没有立即崩溃。 但是也许我只是受邀去做事情。


在刚开始的日子里,许多“儿童”的问题引人注目:


  • 项目信息存储在一个或两个人的脑袋中,而没有其他地方。 也没有说明和文档,要弄清楚该功能是如何工作的,有必要折磨制造它的人,如果我们创建了它的话
  • 没有任何既定的系统和流程,一切都是“以某种方式”,“出于习惯”完成的。 因此,虚荣,困惑,未能按时完成任务,压力
  • 任务是用语言来考虑的。 跟踪器仅具有任务名称,只是为了能够在某处保留时间(您必须每周输入40个小时)
  • 开发本身也不是那么热门:
    • 某个地方,甚至在gita之外也正在开发一些东西
    • 某个地方,程序员轮流在一个服务器上编辑文件
    • 在某个地方有测试站点,但没有一个地方(但无论如何,它们并没有太大帮助)
    • 另外,到处都有非常非常多的govnokod。 不幸的是,Bitrix自己预料到了这些评论,与它无关。

  • 所有通信均在Skype上进行。 但是我只是对他个人不喜欢

总的来说,一切都很糟糕,无需进行初步研究就可以立即开始改进。 这甚至在某种程度上让我感到高兴,因为您可以影响最初几个月的指标。 确实还没有考虑过它们,但是由于Pareto,这还不重要。


令我感到失望的是,在最初的几个月中,流程进展缓慢。 首先,我本人作为程序员必须每天处理8个小时的客户任务,因为我没有足够的人手。 其次,在这种时间压力的条件下,进行较大的更改非常危险,这可能导致混乱和代码或时间的浪费。


现在,我们直接转到文章和问题解决。 新公司的第一件事就是以某种方式定位。


从员工目标中获取信息


当我到达时,我对项目或客户一无所知,并且该信息没有存储。
文字形式无处 。 因此,我首先开始从课文中同事的目标中获取信息。


本质上,一家开发公司有两个重要的和/或有用的文本大子集:


  1. 说明,法规,文章,功能说明,用户案例,...
  2. 任务及其名称,描述,注释,时间日志,提交的签名,代码中的注释,自动测试,...

一开始,我只是要求我的新同事为我写下第一段中的具体内容,但是当然每个人都比较懒惰,尤其是因为编写说明并不是要减少的功能。 但是由于起初我仍然是完全不吸烟的外观,因此我不得不研究这些项目,并且第一次看到它们,所以我才开始将研究成果翻译为文本,从而创建了功能说明和描述。


幸运的是,与此同时,公司开始积极地转向scrum(只是一个巧合),正在工作的软件正在改变(也是一个巧合),分别从头创建了业务流程。 出于某种原因,我最初在同事们的眼中拥有极大的权威。 因此,我刚刚开始自己​​(在能力范围内)编写规则并在其上重建人员,也就是说,实际上只是规定了这些规则并成为其实施的一个示例。


任务制定和管理问题的解决方案被推迟了一个多月。 原来这是一个瓶颈,在以后的章节中,我将不止一次提出这个主题。


在我开始工作时,经理非常费力地设置任务。 示例:任务的名称是“修复网站上的错误”,仅此而已:没有描述,没有屏幕截图,只有项目的名称和引用。 当然,我们曾尝试过传达SMART的原理以及向经理描述任务的重要性,但是所有的工作都因“我没有时间来绘制任务”而中断。


一次我试图承担设置任务的责任,但具有讽刺意味的是,我也没有足够的时间来完成任务,因为我几乎一直都在编写代码。


但是,有关随时获取任务当前状态的相关问题,我们决定通过当天的协调电话和计划来绕开。


人员补充,团队整合


几乎一开始就很清楚人们非常缺乏(我本人编写了全职代码,但我们仍然没有时间)。


第一个决定走在前面的原因是,公司中的两个专家都支持(我也很认同后端),并且有足够的任务,尤其是在布局方面,反应和主观的任务开始浮出水面。


非常幸运的是,我拥有(并且拥有)一个朋友阵线,同时又开始考虑离开自由职业者,因此我们能够迅速填补空缺,并且在此之前,我因带一名员工(另外一个带给当局)而获得了奖金。见小时奖励)。


紧接在前部之后,立即发现了2个贝克。 在同一时间的某个地方,琼走了(他的代码在他离开几个月后戳了我一下)。


总的来说,出现了以下情况:


  • 一位“老人”
  • 三个绝对的初学者
  • 尚未建立工作
  • 一些知识已经丢失

作为团队负责人,很自然地有来自新移民的许多问题立即落在我身上。 基本上,这些是关于代码生命周期的问题(在哪里编写代码,如何显示以后发送到哪里,如何收集发布),关于任务管理(如何使任务投入工作,如何显示状态,如何确定优先级)以及如何使用git的问题。 。 另外,这些家伙还在试图问“ A是如何工作的?”,“我们的网站上有B吗?”的问题,但是那时几乎所有内容都只限于学习代码。


首先,重要的是使程序员有机会进行基本的工作并自行编写代码。 我与他们进行了介绍性对话,回答了他们的问题,然后我当然决定将所有问题和计划简化为一篇文章,然后将其转变为讲座,然后转变为公司中全新的工作计划,我将在下一章中进行讨论。


这里值得一提的是关于我们公司的招聘过程的信息,该工作仍在进行中。


招聘流程


首先,我们有吸引员工的奖金,这是非常好的做法。


其次,我们决定不在面试中安排考试,而是要完成一项非常繁重的任务,接近我们的日常任务。 这样做的便利之处在于,仅在寻找合适的简历并与求职者进行面试以检查是否足够以及有关测试任务的故事,以及直接检查任务之前,才减少雇用时间。


6月实际上可以在几个晚上解决问题,大量的工作使它在实施,改进和明显筹码方面具有很大的自由度。 正是这种实施的灵活性帮助我们评估了申请人的水平。 我们立即说,对我们来说最重要的事情是在解决问题的截止日期之前(执行者自称),最后在存储库中显示工作代码。 我们没有规定使用任何方法和技术,而是由表演者选择的,但是为了满足并给出提示,我们在列表中列出了可能的改进,例如带有星号的任务,例如通过Ajax,ext进行的工作。 返回验证,垃圾邮件防护,模块设计,使用D7,...


总计:


  • 根据总结和访谈,我们可以判断人的本性
  • 在完成任务的截止日期,代码正在运行的事实以及gita的使用方面,我们就聘用做出了最终决定
  • 根据绩效质量,我们确定水平,并据此确定我们可以提供的薪水
  • 加上已经完成的测试任务,我们将说明在新位置必须解决的任务

建立代码开发和交付系统


当时,我们有几个项目是随机开发的:


  • 在战斗中某处有一个高手,其他地方有一个分支
  • 某处有测试站点,某处没有
  • 如果有,那么每个人的地址都不同
  • 原则上,git很少使用且带有吱吱作响的声音
  • 手动数据库更改
  • ...

最初,我试图一小部分纠正这种情况,以便程序员减少重新学习的时间,因此感到困惑。 例如,我从gita下取出bitrix文件夹,将主分支重命名回master。


但是,当我们收到大量资金时,情况就变得严峻。 因为当前的开发结构根本不是很直观,所以我不得不做很多解释,提醒和编写不合逻辑的说明。


我不喜欢这样的指示,我相信指示的存在本身就指示问题,因此决定为所有需要创建一次的项目创建一个通用系统,并从其结构上消除许多问题和疑问。


系统如下:


  • 每个开发人员都有一个远程的个人工作平台
  • 有一个平台,可以在下一个版本中积累功能
  • 如有必要,有一个演示平台来演示所有功能的开始
  • 一项任务的所有代码都保存在一个单独的分支中,该分支的名称等于跟踪器中任务的名称
  • 在一个通用平台上填充代码,您只需要将分支放在某个位置并推送即可
  • 对数据库的更改将作为迁移文件存储在任务分支中

我就该系统的主题进行了大型演讲,然后我们在一个项目上开始了向该系统的试点过渡,在该项目中,我们将新收购的高级人员扔了出去。


当然,将所有项目转移到该系统的过程都被延迟了(例如,在一个项目中,我们第一次无法神秘地移交给主项目),并且仍然继续进行,但是结果至少是:


  • 仅释放必要任务的能力,不释放未完成功能以及有用代码的能力
  • 在不涉及代码作者的情况下发布任务
  • 表演者之间的项目并行工作
  • 不要丢失代码
  • 测试彼此隔离的功能,并且不要停止程序的工作

所有这些根本就不存在。 另外,由于所有操作都是通用且直观的,因此您无需现在就向新程序员说明使用git或测试站点的额外细节。


Scrum,通讯,法规


当然,在这篇文章中,我打算谈论我作为团队领导者如何帮助公司发展,但是如果您不提及老板和他的主动性,就不能谈论我们公司的发展,否则这将不是很诚实。


首先,他介绍了scrum,在我到达时,公司的流程开始被积极地修改。 也是在那一刻,她从Bitrix24转移到了吉拉。


Scrum无疑为公司带来了更多的节奏并减少了混乱。 经理的再培训,他们的协调电话的执行,冲刺的打开/关闭/计划都由作为此链接中的上级的主管亲自监控。


他还为经理本身做了大量工作,尤其是在经理与客户和程序员沟通方面,因为他们的大部分工作(但不仅限于此)都在于沟通:将程序员与客户隔离,将客户的愿望传达给积压和冲刺中的任务,查找并讲述用户故事。 所有这些都导致了许多法规:与客户沟通,设置任务,处理积压订单,接受错误进入工作。 高度重视沟通,管理环节确实显示出进展。


当然,过渡到Scrum本身非常困难,在撰写本文时,我们还没有成为它的专业人员,尽管这一切都取决于这一点。 我很高兴收到关于Atlassian灵活方法和产品的大量新知识。


新经理。 文本,任务设置,积压


在某个时候,另一个人来帮助我们实现巨大的飞跃-一位新经理(在我们之前有一位经理)。


我没想到这一刻,因为我们没有那么多项目和程序员,从理论上讲,只有一名经理就足够了。 此链接是公司的薄弱环节,但我们尝试通过发展现有员工来解决此问题。 碰巧,一位我非常了解的优秀经理决定更换工作,我的老板发现了这一点,因为她突然采访了我们的承包商,我提到了这一有趣的事件,我们自称是她。 另一个奖项)


起初,新经理重复了我的部分工作,因为她遇到了同样的问题(她一无所知,无处阅读)并重新开始,但是区别在于她没有接触代码,开发基础架构和程序技能,而是与设定目标,与客户沟通,清理积压的订单,还勤奋地从老总的负责人那里获取信息。 特别是,我首先提取的是客户和承包商的联系清单。


我们曾经邀请她担任讲师,向我们介绍时间安排,因此团队已经了解她。 另外,钢铁的任务开始变得更加详细,她没有增加消极情绪,也没有从客户那里传递出去,任务的状态在任何时候都变得越来越重要。 因此,我们立即对她寄予厚望。


在最初的几周内,他和他的老板清理了一个项目的积压,特别是,他们发现逾期2个月,而且史诗还没有开始。 另外,原则上,许多任务需要一个月前完成。 当然,清除积压很好,但为时已晚。


她本人确实是从混乱中“挂了起来”,并反复尝试离开,但是我们以一种或另一种方式改善了管理联系。 任务在积压中丢失的可能性较小,程序员再次发出请求的可能性较小。


故事的寓意将在结尾。


危机


开始工作将近半年后,我不得不去度假。 顺便说一句,由于是蜜月旅行,我什至在申请工作时也同意休假,所以我的缺席时间是很早就知道的。 但无论如何,当然,我最后一次还是很紧张,因为我们只是最近才停止“穿衣服”工作。


在假期前的一周,我完成了任务委派,教会了选定的人员执行代码外的特定任务,分配了每个程序员对特定项目的责任,完成或转移了我目前的所有任务(我大部分时间仍在编程)。 7月中旬没有发生灾难。


在假期的头几天,也没有什么预示着麻烦。


然后发生了危机。


在一个项目中,客户由于对任务的期望(截止日期,清单,优先级)与案例不符而失去了耐心。 不久前,我们自己就注意到了待办事项的完整处理以及与客户(新经理的章节)之间的积极沟通,但这已经为时已晚。


在第二个项目中,他们终于接受了一个非常期待已久的任务,完成了测试并将其发布。 但是新功能突然使重负下的战斗现场瘫痪了,中间和前中间在一周之内什么也做不了。 .


, . , . , , .


vue, ( , ).


— , , , - , “ / / / ”.
, , , , .


, , , , , .


, . , - . , - .



. ( ), - :



- , - , - , . .



, . , , , .



. , , , . , , .


, vue, .


, - 5. -, . , .



, : , , , .


, - , - . , , , , , .


.


. , , , - , , .


, , , 1 , - , , , , , . , .


,


. .


, , 3-4 “ 3 ”, 40.


, , .


/ — ( ). , . , . , , -, 8 .


. :


  • ,

- :


  • -
  • -
  • -
  • ...

( ), :


  • , -
  • , - -” ” .
  • , .
  • , ,

— . :


  • 1
  • , . ,

:


  • , , , .
  • ,
  • ,
  • , , , ,

, . , .
, . .




, , , , , “ ” , .


, , “” - .



, , , , , 2 . , , .


, , / , . , , .


, . , , / - , , - .


(, )


- . , , , , , , , .


, , . , , .


: , , , , . , .



, - , . , .


:


  • ,
  • -
  • 1

, , , .



, , , ( ), , , .


, ( , 2 , ).


, , . “ ”, :


  • , , -
  • - .

, .


第二部分


本文涵盖了我担任新职位约六个月的工作。 在第二部分中,我想谈谈如何借助以下方法实现目标:


  • 我们刚刚开始实施的自动测试。 奇怪,但是由于某些原因,Bitrix上没有值得的例子。
  • 摆脱代码中的继承
  • 进一步加速和简化开发
  • 我将从这些评论中学到什么
  • 还有很多其他秘密的东西(突然我的家伙读了我)

谢谢大家的阅读。 我非常乐于评论,特别是如果您知道解决我们遇到的问题的最佳方法。


祝工作和生活中的所有人万事如意!

Source: https://habr.com/ru/post/zh-CN423457/


All Articles