There Are No Bugs, Just TODOs

栏目: IT技术 · 发布时间: 3年前

内容简介:One of my life’s traumas is the bug trackers, the issue trackers, the project management tools. The toolset that completes the version control log to form the development equivalent ofAs with its accounting equivalent, those tools are actually useful indee

One of my life’s traumas is the bug trackers, the issue trackers, the project management tools. The toolset that completes the version control log to form the development equivalent of double-entry bookkeeping .

As with its accounting equivalent, those tools are actually useful indeed. While we collectively learned to avoid the CEO MBAs that run a company only based on its accounting books and disregard the underlying business. I think we haven’t learned to avoid managers who only run software development through tickets and disregard the underlying software delivery.

Issue tracking became an industry, its software gained consciousness and started becoming a social network, apparently optimizing engagement and time spent in a product as opposed to helping you get things done. This is often coupled with people whose job security is tied to making sure projects are complicated enough to require a project managerto run them and the amount of resulting paperwork is mind-boggling. The wide-spread acceptance of this state is what brought Jira creators public.

I can’t disprove the existence of reasonably-configured and fast Jira, but I am yet to experience it—and I’ve been trying hard. In one of my jobs, we pushed Trelloto the limits and in response, the corporate veterans were pushing for Jira hard. I’ve been ensured the product is now a completely different thing I remember. Well, few months (and some well-paid, fine-tuned configurations) later, I saw the same turn-based accounting strategy that I remembered.

This is not to blame any particular product, but rather what people ask from it.

The Minimal Skeleton

I think there are relatively few properties that are needed in an issue and relatively few rules to make the handling efficient.

Ownership

Critically, the issue needs to find its way to someone who can get it done. This is usually done by putting it to the correct board, but can be tricky in larger companies and often needs a reliable triage by someone from within engineering.

This is not a “component” attribute that I passionately dislike. If “components” are created by engineers, they are often arbitrary, they don’t survive refactoring and can lead to dilution of responsibilities over time. If they are created by product owners, they correspond to customer perception and not necessarily to the internal structure, and the translation layer is needed.

Assign to a single person. If you don’t know who that is, there should be no owner and there should be a clearly assigned person (we used current oncall agent) to process them and assign accordingly.

Position In a Queue

This is the single most important thing for a project organization. Every team must have a single ordered queue of tasks . A lot of project management chaos arises when an engineer has multiple queues to pick from.

It happens often and in opaque form. Of course noone intentionally scatters tasks around. But in practice, there is planning that assigns tickets in priority buckets (like high, medium, low) with unclear sorting inside them. Then a high-priority customer ticket comes in. Then there is an incident. And then we have the internal bug tracker, but also a list of Github issues, and we decided to do both at once. Also, I just got an email from our marketing guy about a typo on our page. Does this paragraph feel confusing? Exactly!

Have a way to put all of those into a single place and make sure every single one of them is prioritized relatively . When sitting down to computer and achieving flow, there should be one top item just looking at them to pick up.

If the flow is more complicated, there should be an algorithm that everybody should agree on. An example may be:

  1. If there is downtime, it’s the top priority of everyone affected
  2. If there is an incident, it’s the top priority for an on-call agent
  3. My deployed issue waiting for my verification
  4. Reviewed pull request waiting for deployment
  5. My pull request with completed code review that requested changes
  6. Outstanding pull request waiting for code review
  7. Customer escalation received through email. For valid ones, create incident and delegate to on-call. For invalid ones, reply, apologize and provide customer support link
  8. Top issue in the sprint backlogs
  9. Any issue in the “when engineers have time” backlog

State

This is where things go ugly. The possible ticket states are often designed by architects and not by people who are actually going to use the thing. I’ve seen a map of issue state transitions that definitely looked Turing-complete.

I advise to start with the “Todo”, “Doing” and “Done” triad and only add more if absolutely required. Moving issues from one state to another needs to be associated with an explicit action. If you add more, make sure that you have an explicit agreement with everyone that the latest-stage ticket has the highest priority unless you are going to get all tickets stuck in the most boring stage, such as “verification”.

Task Breakdown

Every ticket with a state should correspond to a single deployment (which is not large in the continuous delivery environment). If it’s larger, it should be broken down into a sub ticket and the relationship between those two should be recorded.

The Anti-Patterns

That’s it. If you really scale, you may need a few more…but fewer than you think. While the following attributes are common, they most definitely shouldn’t.

Priority

There is no absolute priority of an issue, only a relative priority to other issues. Once you start assigning priorities from a list, anything else than “Highest” is a passive-aggressiveway of saying “No”.

If priority is just an attributed with a list of values, it becomes the most abused field very quickly. Sooner or later, you will also start adding additional “really highest highest immediate” priorities, also known as “CEO called”.

Resist the temptation.

Ticket Type

The type is usually a list that contains values like “Enhancement”, “Bug”, “Task” and “Documentation”. My question would be: why do you want to have this information and what is it going to be used for?

The “Type” field led to one of the most unproductive discussions of my life. The “it’s not a bug, it’s a feature” saying means I am probably not alone. We collectively shouldn’t care . When people scream “this is a bug”, it is irrelevant what it is caused by. It is a scream of a significant expectation mismatch. The team should work on resolving it, regardless of whether it was caused by a developer diverging from the designed intent or because of the original intent going wrong.

The most significant pushes for this field I have experienced from:

  • Perfectionists who like to procrastinate by sorting things While I support everyone in having hobbies, it is unfortunate if the team suffers because of it. Find a way to agree on the usefulness and help the perfectionists manage the imperfections. I recommend buying them a portable zen garden to compensate.

  • Top-level managers who like pie charts. This is often to compare the quality of the teams by comparing the number of defects they create. The only thing that remains is to tie your bonuses to it and you can make “this is a feature, not a bug” saying your official company anthem. In a less dysfunctional and more valid case, it is to estimate “how much effort we are burning for upkeep versus developing new things”, which I find valid in certain circumstances—but then “upkeep” and “new” should be the ticket types.

  • Customers. “Bug” is used to mean either “high priority” or “your fault, fix it and don’t even try to bill us”.

Whenever the push comes, pay attention and dig out the actual root cause for the request which is better resolved by other means.

Software Version

Tracking the version makes sense for shipped libraries and on-premise packages. It makes no sense for continuously delivered SaaS.

For assessing whether the bugreport still makes sense, the reporting date is usually enough.

Severity

Severity begs to be perceived as equal to a priority. But severity is very different for different roles and its priority is always a decision on relative priorities that take laboriousness into account.

Consider a typo in a text on a page. How do you handle it when it’s in the middle of the page? When it’s in the main call to action on a landing page? When it’s fixed trivially and when does it require five-person approval and an access to a 3^rd^ party system?

This is usually duplicate to priority.

The Ticket Swamp

The most challenging thing is to have an issue hygiene. Saying “no” is hard, but without it, the issue system becomes an unmanageable mess. The system should be designed to encourage closing issues aggressively and easily . This is ultimately the appeal of Kanban boards: the goal to have is the lowest time possible for an issue to be open and to provide an incentive to prune the queue aggressively.

Otherwise the amount of tickets becomes unmanageable and starts to resemble a swamp. You carefully walk in only to be sucked, never to resurface again.

One way to recover is to automatically close tickets after a certain period of time. This may be a subtle way of saying “no”, but I think it has its place, especially if we are talking about public trackers.

There is one good argument in its favor: the software continuously changes and hence old issues may be invalid. In order to put them into a sprint, they need to be checked—in some cases, that’s actually more work than the issue itself.

Giving up is a reasonable response in order to keep having a tracker instead of a database .

The Separation of Internal Support

In order for this to work, there needs to be a separate system for handling questions for the development team from the rest of the company.

This is crucial for communication culture. What I’ve seen as an alternative is to write a message to a random engineer or their team lead, which leads to abuse. It’s important to make that channel more responsive and reliable than any other individual inbox.

The other alternative is to open badly-specified development tickets. This road leads to a swamp. It’s easy to overpower the team’s ability to triage all tickets, at which point the whole queue is going to be ignored and you have Ticket Swamp on steroids.

Thanks to Steven Mizell for editing and feedback.


以上所述就是小编给大家介绍的《There Are No Bugs, Just TODOs》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

左手打工,右手创业

左手打工,右手创业

韩垒 / 东北师大 / 2011-4 / 29.80元

《左手打工右手创业》内容简介:打工一族,不能没有激情,不能没有梦想,激情能让你战胜困难,勇往直前;同时,要让梦想变成现实,你还必须具备务实的态度和实干的精神,一步一步向目标前进。创业不是简单的乌托邦式的理想,不是仅凭一腔热血加美好梦想就能顺利到达胜利的彼岸。个人创业更多的是要依靠前期科学的规划、多角度的观察、理性的分析、有效的资源分析与整合、成熟高效的运作技能、良好的商业心态等。 《左手打工......一起来看看 《左手打工,右手创业》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试