大多数技术问题实际上是人为问题。
Most technical problems are people problems

原始链接: https://blog.joeschrag.com/2023/11/most-technical-problems-are-really.html

一个过去的经历强调了一个关键教训:大多数技术问题,本质上是人际问题。面对大量技术债务——过时代码在不同平台重复出现——作者尝试了一种重构方案。然而,项目停滞不前,他们的影响力减弱,揭示了一个更深层的问题。 核心问题不是代码本身,而是开发团队对变革的抵触以及管理层对解决技术债务的价值缺乏理解。开发者对现有做法感到舒适,承认需要重构意味着承认更广泛的系统性问题。 作者意识到,仅仅“完成工作”是不够的。有效沟通进展*以及*技术清理的必要性至关重要,尤其对于非技术利益相关者。成功需要驾驭“政治”并展示商业价值,而不仅仅是技术改进。最终,这段经历将作者的重心从纯粹的技术专家转变为“居高临下”的程序员——一个能够预见和缓解项目中的技术*和*人际风险的人。

## 黑客新闻讨论摘要:技术问题是人问题 最近黑客新闻上的一场讨论集中在大多数技术问题源于人为因素,而非技术限制的观点。用户普遍同意,并指出工匠精神的衰落、优先考虑快速/廉价的解决方案,以及雇主和员工都缺乏真正的关心。 许多评论员指出系统性问题,例如停滞的工资未能跟上通货膨胀,公司将利润置于人之上(通过大规模裁员体现),以及面对人工智能进步时感到自己可以被取代。这导致了脱离和“仅仅为了工资”的心态。 对话还涉及开发团队内部的沟通障碍、根深蒂固的内部政治,以及清晰需求的重要性。一位用户强调了阿德勒心理学,指出它认为*所有*问题都是人问题。另一些人则认为将人归咎于问题是不妥的,认为这是一种为用人工智能取代人类而使用的策略。最终,讨论强调,即使拥有先进的技术,成功的实施仍然取决于解决潜在的人力和组织挑战。
相关文章

原文

 

I once worked at a company which had an enormous amount of technical debt - millions of lines of code, no unit tests, based on frameworks that were well over a decade out of date.  On one specific project, we had a market need to get some Windows-only modules running on Linux, and rather than cross-compiling, another team had simply copied & pasted a few hundred thousand lines of code, swapping Windows-specific components for Linux-specific.

For the non-technical reader, this is an enormous problem because now two versions of the code exist.  So, all features & bug fixes must be solved in two separate codebases that will grow apart over time.  When I heard about this, a young & naive version of me set out to fix the situation....

People Problems

Tech debt projects are always a hard sell to management, because even if everything goes flawlessly, the code just does roughly what it did before.  This project was no exception, and the optics weren't great.  I did as many engineers do and "ignored the politics", put my head down, and got it done.  But, the project went long, and I lost a lot of clout in the process.

I realized I was essentially trying to solve a people problem with a technical solution.  Most of the developers at this company were happy doing the same thing today that they did yesterday...and five years ago.  As Andrew Harmel-Law points out, code tends to follow the personalities of the people that wrote it.  The code was calcified because the developers were also.  Personality types who dislike change tend not to design their code with future change in mind.

Most technical problems are really people problems.  Think about it.  Why does technical debt exist?  Because requirements weren't properly clarified before work began.  Because a salesperson promised an unrealistic deadline to a customer.  Because a developer chose an outdated technology because it was comfortable.  Because management was too reactive and cancelled a project mid-flight.  Because someone's ego wouldn't let them see a better way of doing things.

The core issue with the project was that admitting the need for refactoring was also to admit that the way the company was building software was broken and that individual skillsets were sorely out of date.  My small team was trying to fix one module of many, while other developers were writing code as they had been for decades.  I had one developer openly tell me, "I don't want to learn anything new."  I realized that you'll never clean up tech debt faster than others create it.  It is like triage in an emergency room, you must stop the bleeding first, then you can fix whatever is broken.

An Ideal World 

The project also disabused me of the engineer's ideal of a world in which engineering problems can be solved in a vacuum - staying out of "politics" and letting the work speak for itself - a world where deadlines don't exist...and let's be honest, neither do customers.  This ideal world rarely exists.  The vast majority of projects have non-technical stakeholders, and telling them "just trust me; we're working on it" doesn't cut it.  I realized that the perception that your team is getting a lot done is just as important as getting a lot done.

Non-technical people do not intuitively understand the level of effort required or the need for tech debt cleanup; it must be communicated effectively by engineering - in both initial estimates & project updates.  Unless leadership has an engineering background, the value of the technical debt work likely needs to be quantified and shown as business value.

Heads Up 

Perhaps these are the lessons that prep one for more senior positions.  In my opinion, anyone above senior engineer level needs to know how to collaborate cross-functionally, regardless of whether they choose a technical or management track.  Schools teach Computer Science, not navigating personalities, egos, and personal blindspots.  

I have worked with some incredible engineers, better than myself - the type that have deep technical knowledge on just about any technology you bring up.  When I was younger, I wanted to be that engineer - the "engineer's engineer".  But I realize now, that is not my personality.  I'm too ADD for that. :)

For all of their (considerable) strengths, more often than not, those engineers shy away from the interpersonal.  The tragedy is that they are incredibly productive ICs, but may fail with bigger initiatives because they are only one person - a single processor core can only go so fast.  Perhaps equally valuable is the "heads up coder" - the person who is deeply technical, but also able to pick their head up & see project risks coming (technical & otherwise) and steer the team around them.

联系我们 contact @ memedata.com