问题描述
问题:
我的经理目前认为设计很重要,但对除了最雄心勃勃的项目之外的所有项目都至关重要.在我看来,他认为设计很重要,但不是必须的,而且大量的泥巴编程可以"完成工作".
有哪些方法可以讨论(主题、示例等)规划和设计的重要性?我正在寻找在我作为"代码苦工"的能力范围内可以做、说或改变的事情,所以诸如雇佣另一位资深人士、解雇弱成员等答案对我没有多大帮助.
或者,他是对的吗?我是应该重新考虑我的开发方法的人吗?
一些背景:
从本质上讲,我们的团队由三个实力雄厚的开发人员、几个实力较弱的开发人员以及一些在我看来甚至不应该在该领域工作的人组成.
我们没有专门的架构师,因此在某种程度上,作为非官方团队负责人的三位最强大的开发人员在某种程度上被视为设计除了最琐碎的项目之外的所有项目,除非经理认为"泥球"足够好.他们还负责自己(有时是多个)正在进行的项目,同时指导和帮助他人.这导致这些人每周的工作量可以接受,但工作量很大.
我对这个团队的背景描述有三点:
- 几乎没有时间进行同行计划、提供培训课程,而且代码审查已经不在地图上.换句话说,弱者必须自学.
- 如果给实力较弱的成员一个项目,让他们不假思索地开始编码,开发时间就会更长,花在 QA 上的时间也更多,而且后期维护如此头疼,高级三人都不敢碰它.
- 实力弱的团队成员一般有态度但没有能力,反之亦然,但似乎没有人兼得.
总结一下:
经理是个聪明但固执的人,他会听道理,但你必须彻底说服他"为什么".
目前没有足够的时间来注入任何可以消除日常开发职责的培训方法,而且短期内可能不会雇用任何人来减轻一些负担.
与团队中可用的个人一起创建更好的代码的唯一当前方法是为他们设计项目并指导他们完成实施过程,因此,我们有这个问题.
编辑
我想巩固到目前为止我从答案中得到的信息;其中一些是直观的,但不是大多数人在日常 (imo) 中想到的:
经理喜欢指标. 没错,但正如 M. Fowler 认为(我同意)生产力和质量是无法衡量的.此外,我没有办法将指标累积为"peon".(感谢 Novelocrat 和 duffymo).
总会有各种各样的人才,你必须提供一个学习环境我们支持这种态度,但我认为需要其他工具来创造这种环境.(感谢 duffymo).
让弱者参与,减轻强者的工作量 除了(作为结果?)展示学习环境之外,让较弱的开发人员参与加强他们的设计技能,为他们提供小的、原子的自行设计(经批准)的项目部分.这免除了较强的开发人员的责任,教较弱的人,并且可能是经理可以接受的解决方案,因为它不需要高薪员工的时间.(感谢达菲莫和汤姆安德森)
推荐答案
2字:记事本架构
在大多数情况下,除非你成为老板,否则你无法改变老板的思维方式.
你说没有"时间"进行设计,考虑分配的项目,进行深入的设计会议和代码审查等......我同意.
您需要做的第一步是让您的"潜在客户"更容易接近.成为领导者最重要的部分就是成为领导者,这意味着他们必须得到信任和尊重才能成功领导任何事情.
下一步是开始获取jr.开发人员在行动之前思考.对于大多数开发人员来说,只想深入研究代码是很常见的,但多花几分钟甚至可能意味着成功而不是失败.我会假设你得到了关于要完成什么工作的口头或书面"东西",在这个假设下,尝试以下操作.
在记事本中:
写下需要完成的任务(程序、功能等).
写下为了在组件级别完成此任务需要完成的事情.
- "向表中添加新字段"
- "用新字段更新现有对象"
- "添加从刨丝器获取奶酪的新服务调用"
在他们指出他们认为需要做的事情之后,让他们去找其中一位领导并询问他的想法,然后领导会花几分钟时间,要么同意他们的笔记,要么提出不同的建议处理事情的方法,并通过询问 jr. 检查是否有任何遗漏.开发人员对他们正在工作的领域提出问题,而不是通过查看并为他们做这件事.
现在您有了一个半详细的项目任务列表以及系统的基本设计.
接下来让您的潜在客户在早上花些时间喝咖啡休息一下,询问 jr 项目进展如何,并向他展示一些设计.如果设计可以进行一些改进,请多花 5-10 分钟来解释更好的方法并提出实施建议,不要为他们做,引导他们取得成功.
因此,总而言之,如果您的潜在客户可以每天多花 20 分钟,那么您的 jr.开发人员在深入研究之前多花 30 分钟,您应该在噩梦般的维护和 QA 周期中节省大量时间.
问题描述
The question:
My manager currently believes that design is important, but not crucial for all but the most ambitious projects. It is my opinion that he thinks it is important to design, but not necessary and that big ball of mud programming can 'get the job done.'
What are some methods of discussing (topics, examples, etc) the importance of planning and design? I'm looking for things to do, say, or change that are within my power as 'code peon', so answers such as, hire another senior, fire weak members, etc. aren't very helpful to me.
Alternatively, is he right and I'm the one who should rethink my approach to development?
Some background:
Essentially, our team consists of three strong developers, a few weak developers, and some people who, in my opinion, shouldn't even be in the field.
We have no dedicated architect, so the three strongest developers who act as unofficial team leads are somewhat looked to in order to design all but the most trivial of projects, unless the manager decides that 'ball of mud' is good enough. They are also responsible for their own (some times multiple) ongoing projects while mentoring and helping others. This leads to an acceptable, but full work-load from week to week on these individuals.
My point of describing the background is three-fold for this team:
- There is little time to peer-program, give training sessions, and code reviews have fallen off the map. In other words, the weak must learn on their own.
- When the weaker members are given a project and allowed to simply start coding without thought, the development takes longer, spends way more time in QA, and is such a maintenance headache later, the senior three are scared to even touch it.
- The weak team members generally have the attitude but not the aptitude, or vice versa, but no one among them seems to have both.
To summarize:
The manager is an intelligent, though stubborn man who will listen to reason, but you must convince him thoroughly of the 'why'.
There is not enough time currently to inject any training methods that take away from daily duties of development and no one is likely to be hired anytime soon to alleviate some burden.
The only current method of creating better code with the individuals that are available on the team is by designing their projects for them and guiding them through the process of implementation, thus, we have this question.
Edit
I wanted to consolidate what I've taken from the answers so far; Some of these are intuitive, but not something most think about from day-to-day (imo):
Managers like metrics. True, but as M. Fowler believes (and I agree) productivity and quality is immeasurable. Besides, I don't have the means to accumulate the metrics as 'peon'. (thanks Novelocrat & duffymo).
There will always be a mix of talent, you must present a learning environment We are supportive in this in attitude, but I think other tools are needed to create this environment. (thanks duffymo).
Engage the weak, alleviate the workload of the strong In addition (as a result of?) to presenting the learning environment, engage the weaker developers in strengthening their design skills by giving them small, atomic parts of the project to design (with approval) themselves. This removes responsibility from the stronger devs, teaches the weaker, and may be an acceptable solution for the manager as it doesn't take time from his higher paid employees. (thanks duffymo & Tom Anderson)
推荐答案
2 words: Notepad Architecture
You can't change the bosses way of thinking, unless you become the boss, in most cases.
You say there is no "time" for design, and thinking about the projects that are assigned, for in depth design meetings and code reviews, etc... I would agree.
The first step you need to do is get your "leads" more approachable. The biggest part of being a lead is being a leader, which means they have to be trusted and respected in order to successfully lead anything.
The next step is to start getting the jr. developers thinking before acting. It is quite common for most developers to just want to dive into code, but taking a few extra even minutes can spell a success over a failure. I would assume you get "something" whether verbal or written about what work to get done, with that assumption, try the following.
In Notepad:
Write down the task that needs to be done (program, feature, whatever).
Write what things need to be done in order to accomplish this task at a component level.
- "Add new fields to table"
- "update existing objects with new field"
- "Add new service call for getting cheese from grater"
After they have finished pointing out what they think will need to be done, have them goto one of the leads and ask him what they think, the lead would then take just a few moments and either agree with their notes or suggest different ways of handling things and check to see if anything might be missing by asking the jr. developer questions about the domain they are working in, not by looking through and doing it for them.
Now you have a semi-detailed project task list as well as a basic design for the system.
Next have your leads take a coffee breaks worth of time to go in the morning and ask the jr how there project is going, and show him some of the design. If the design could use some improvement, take an additional 5-10 minutes to explain the better way and suggest an implementation of it, don't do it for them, guide them to be successful.
So, in conclusion if your leads can take an extra say 20 minutes a day, and your jr. developers take an extra 30 minutes before diving in, you should save tons on the after end in nightmare maintenance and QA cycles.