惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Visual Studio Blog
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
人人都是产品经理
人人都是产品经理
H
Heimdal Security Blog
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
Cyberwarzone
Cyberwarzone
Google DeepMind News
Google DeepMind News
雷峰网
雷峰网
Hacker News: Ask HN
Hacker News: Ask HN
Webroot Blog
Webroot Blog
Microsoft Azure Blog
Microsoft Azure Blog
MyScale Blog
MyScale Blog
A
About on SuperTechFans
V2EX - 技术
V2EX - 技术
小众软件
小众软件
博客园 - Franky
博客园 - 司徒正美
P
Privacy International News Feed
爱范儿
爱范儿
U
Unit 42
博客园 - 叶小钗
The Hacker News
The Hacker News
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Simon Willison's Weblog
Simon Willison's Weblog
N
News and Events Feed by Topic
D
Docker
T
Threatpost
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
L
LINUX DO - 最新话题
Security Latest
Security Latest
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
A
Arctic Wolf
Spread Privacy
Spread Privacy

Rust Blog

Security Advisory for Cargo (CVE-2026-5223) | Rust Blog Security Advisory for Cargo (CVE-2026-5222) | Rust Blog Project goals update — April 2026 (end of 2025H2) | Rust Blog Rust is participating in Outreachy | Rust Blog Raising the baseline for the `nvptx64-nvidia-cuda` target | Rust Blog Announcing Google Summer of Code 2026 selected projects | Rust Blog Announcing Rust 1.95.0 | Rust Blog docs.rs: building fewer targets by default | Rust Blog Changes to WebAssembly targets and handling undefined symbols | Rust Blog Announcing Rust 1.94.1 | Rust Blog Security advisory for Cargo | Rust Blog What we heard about Rust's challenges | Rust Blog Call for Testing: Build Dir Layout v2 | Rust Blog Announcing rustup 1.29.0 | Rust Blog Announcing Rust 1.94.0 | Rust Blog 2025 State of Rust Survey Results | Rust Blog Rust debugging survey 2026 | Rust Blog Update on the October 15, 2018 incident on crates.io Announcing Rust 1.29.2 Announcing Rust 1.29 Announcing Rust 1.28 What is Rust 2018? Announcing Rust 1.27.2 Announcing Rust 1.27.1 Security Advisory for rustdoc Announcing Rust 1.27 Announcing Rust 1.26.2 Announcing Rust 1.26.1 Rust turns three Announcing Rust 1.26 The Rust Team All Hands in Berlin: a Recap Increasing Rust’s Reach 2018 Announcing Rust 1.25 Rust's 2018 roadmap Announcing Rust 1.24.1 Announcing Rust 1.24 The 2018 Rust Event Lineup Announcing Rust 1.23 New Year's Rust: A Call for Community Blogposts Rust in 2017: what we achieved Announcing Rust 1.22 (and 1.22.1) Fearless Concurrency in Firefox Quantum Announcing Rust 1.21 impl Future for Rust Rust 2017 Survey Results Announcing Rust 1.20 Announcing Rust 1.19 The 2017 Rust Conference Lineup Rust's 2017 roadmap, six months in Increasing Rust’s Reach Announcing Rust 1.18 Two years of Rust The Rust Libz Blitz Launching the 2017 State of Rust Survey Announcing Rust 1.17 Announcing Rust 1.16 Rust's language ergonomics initiative Announcing Rust 1.15.1 Rust's 2017 roadmap Announcing Rust 1.15 Announcing Rust 1.14 Announcing the First Underhanded Rust Contest Announcing Rust 1.13 Announcing Rust 1.12.1 Announcing Rust 1.12 Incremental Compilation Announcing Rust 1.11 Shape of errors to come The 2016 Rust Conference Lineup Announcing Rust 1.10 State of Rust Survey 2016 Announcing Rust 1.9 One year of Rust Taking Rust everywhere with rustup Launching the 2016 State of Rust Survey Cargo: predictable dependency management Introducing MIR Announcing Rust 1.8 Announcing Rust 1.7 Announcing Rust 1.6 Announcing Rust 1.5 Announcing Rust 1.4 Announcing Rust 1.3 Rust in 2016 Announcing Rust 1.2 Rust 1.1 stable, the Community Subteam, and RustCamp Announcing Rust 1.0 Abstraction without overhead: traits in Rust Rust Once, Run Everywhere Mixing matching, mutation, and moves in Rust Fearless Concurrency with Rust Announcing Rust 1.0 Beta Announcing Rust 1.0.0.alpha.2 Rust 1.0: status report and final timeline Announcing Rust 1.0 Alpha Rust 1.0: Scheduling the trains Yehuda Katz and Steve Klabnik are joining the Rust Core Team Cargo: Rust's community crate host Stability as a Deliverable Road to Rust 1.0
A retrospective on the 2018 rust-lang.org redesign | Inside Rust Blog
Nick Cameron on behalf of the core team · 2020-05-26 · via Rust Blog

We released our second 'edition' of Rust at the end of 2018. Part of that release was a revamp of the Rust website. That work was completed on time, but there was some controversy when it was released, and the project itself was difficult and draining for those involved. This retrospective is an attempt to record the lessons learned from the project, and to put the project into context for those interested but not directly involved.

This retrospective aims to be blameless and forward-looking. There is no benefit in re-litigating what happened, and we are interested here in the planning, project management, and community aspects, rather than critiquing the design or implementation.

Lessons learned

What have we learned for the next time we take on a similar project?

  • People first: people are more valuable than schedules; keeping people healthy, happy, and productive is the most important aspect of managing a project.
  • Open communication: we should be as open as possible as early as possible with communication about projects, even when the nature of the project means we can't be open with all development.
  • Get feedback early and set expectations about the kind of feedback which is useful. We have ongoing problems in the Rust community where (mostly) well-intentioned feedback from the community becomes overwhelming to the point of harassment; we do not have a solution to this.
  • Be prepared to manage feedback, in particular by having enough people available to respond.
  • Recognize the complexity of projects and ensure appropriate project management.
  • Projects should have clear ownership.
  • Large projects should not be scheduled to finish at the same time.
  • Work iteratively, rather than going for 'big bang' releases.
  • Consider ongoing maintenance: how much is there to do? Who will do it? Failing to consider this means there is more pressure on the initial release.

A lot of these points seem obvious with hindsight. However, every decision is a trade-off, and despite best intentions, it is easy to mis-weight factors in these trade-offs. The above are factors that, with hindsight, should have had more weight.

In the next sections, I'll expand on some lessons from the summary and then give some context by describing the project.

Communication

Projects which have a primary focus on design have different dynamics to most other software projects. For example, there is the risk of 'design by committee'. When trying to do open development, this risk is magnified since the 'committee' is effectively the entire world. However, in retrospect we overshot and were not open enough with the website project.

We could have better communicated the motivation and constraints of the project. By the time of the beta release, the community did not share the project team's conceptualization of the website's requirements. In the future, we might create a pre-RFC to discuss and communicate requirements without starting design work. Once a high-level design is made, it should be actively evangelized to the community.

As well as asking for feedback (see below), we should communicate project progress and share opportunities for contribution. When looking back at a repository on GitHub, it is not obvious how much iteration has taken place, or what issues have been discussed. But, if the repository is followed from the start, these things are clear.

In general, communication should be a conversation. Unfortunately, due to other ongoing projects, we did not have enough people with enough time to have that conversation. We think an important lesson here is not to schedule large projects concurrently.

Project management

We underestimated the scale of the project, both in terms of the work to be done and the number of people who would need to be coordinated. As a result, several good people were burnt-out by the project. Errors in software estimation are common; we should have reacted by putting people first - no project is worth losing good people for. One reason that did not happen is that nobody felt empowered to step back and re-evaluate the project. In general, ownership of the project was unclear and this led to poor leadership. Furthermore, the ownership which did exist was not communicated well to the wider community.

The project as a whole highlighted not just our relative inexperience (with this kind of project), but also our process debt. We had not (and to a great extent still have not) created processes and structures to support projects and people when things start to go wrong. This lets small issues snowball into large ones. For the website project this was compounded by not having enough people involved - they became over-worked and stressed, and that meant they did not have the bandwidth to implement good project management, even when we knew the right thing to do.

Feedback

As mentioned earlier, we think that community feedback would have been easier to manage if it had been collected during the whole project, rather than being compressed into the final two weeks. Beyond that, we needed much better staffing for the feedback period. Handling feedback was an extremely stressful and difficult experience. In the future, we should ensure there are more people and that we structure feedback as much as possible to ensure that it is useful rather than overwhelming.

A minority of the community went beyond what was acceptable as feedback. Coupled with the 'pile on' effect of discussions on the internet, this became harassment of the website developers. This is unacceptable behavior, and we expect better from the community. Some of the effect was unintentional, and this is a problem that affects controversial RFC discussions too. It is not clear how to solve this, but is something we should investigate.

Context

The website revamp was part of the 2018 edition. The edition was an awesome achievement, but an incredible amount of work. The new website was planned from near the beginning of the year, in the early stages of edition planning. We considered it important for the new website to be ready in time for the edition for maximum impact and because the previous website was unfit for our goals (more below). Because of the timing, there were fewer people available to work on the website than might have been the case, there was less time and energy for leadership and oversight, and there were many competing projects for those involved.

The previous website had been incrementally added to, but there had never been major work on either content or design (other than the initial release). Essentially, the website rewrite was a completely new project in a domain where we had no organizational experience (there were individuals who had experience in web development, but there had not been opportunity for that experience to become institutional knowledge).

The initial website was well-suited to its purpose and audience: presenting a small research project to interested hackers. However, as the project and website have grown, the website became less and less appropriate.

There was consensus among the core team that the old website needed replacing. Although many in the community have fond memories of it (after all, it was most people's very first contact with Rust), there were several ways in which the old website was objectively inadequate: it was difficult to find information, much of the content was out of date, pages were crowded and poorly organized, it was hard to update and to localize (which resulted in missing and out of date information), and it was missing many parts of the community and ecosystem (e.g., any mention of using Rust in embedded systems).

Design-wise, the previous website was simple and tidy, but it had problems - it was hard to emphasize text, there was little contrast between sections (making it hard to read), and it lacked the vibrancy of Rust's ecosystem and community. It was designed for the audience which built it, and our ambitions for Rust, and the audience for the website, had since grown larger.

One of the goals of the 2018 edition was to appeal to a wider audience. The website was a key tool for achieving that goal. However, it was clear the design and most of the content needed a complete overhaul.

This sounded like a relatively standard website project to produce a relatively small website. However, in retrospect, the constraints were difficult - there is a lot of information that needed to be made accessible, without making the website overwhelming; we needed to serve newcomers with different backgrounds, as well as existing Rust users looking to find information; the previous 'small' website had grown large, and there was a lot of content to update or replace.

Work was slow to start and progress was slow, in part due to staffing issues. Content was sought from the teams in mid-2018. We vastly underestimated the complexity of producing and collecting content. Content was slow to produce and slow to review; there were many unrecognized dependencies. We needed lots of iteration. Essentially, the website became a project with 50-ish people, but was managed as if it were a project with one or two people. We were building a website before most content was ready, which is a well-known web development anti-pattern.

Despite this, and largely due to heroic efforts, the website was finished on time. All planned content was present and polished. We had a striking and vibrant new design, and an implementation that made the website much easier to keep up to date and to translate. Essential information was easy to find, and the website was accessible to a wider audience, in particular developers who knew nothing about Rust, engineering management, and a wider section of potential contributors.

Unfortunately, it was only just in time. As well as meaning that the last phase of work was stressful and rushed, it meant we didn't have as much time as we should have had for testing and feedback: only two weeks to gather and address feedback on the beta release. Because of this and an earlier lack of communication, there was a flood of commentary, some of which was vocally negative and some which was trolling or harassment. The team did not have the resources or time to respond well.

Of course, being a software project, there were some bugs (most of which were quickly resolved), and some missing features (notably, localization, which made the website a worse experience for many visitors who did not speak English natively).

Post-release, content and design was polished, bugs were addressed, and we attempted to create a team to maintain the website. Unfortunately, some of the poor behavior from the community continued. Several people involved with the edition and specifically the website were left burnt out and left Rust or cut back work significantly.

Conclusion

In summary, we regard the website as a successful (but imperfect) product, but delivered in a sub-optimal manner. A lot of the things that went wrong were fairly common project management issues. We believe the highest-level lesson to take away is that the Rust organization should improve its project and product management. (To be clear, we think this is an organizational issue, not a comment on any individuals' skills in the domain). Our usual development style is iterative and incremental; when working on larger, less incremental projects, we need to put in more resources, management, and coordination to ensure success. The project was under-staffed and, beyond the obvious problems, that meant that even when we knew the right thing to do, we did not have the people, time, or energy to do it.

Finally, thank you to everyone who built the website and who helped with this retrospective.