# Restructure AFL++'s documentation - Case Study ## Problem statement AFL++ inherited it's documentation from the original Google AFL project. Since then it has been massively improved - feature and performance wise - and although the documenation has likewise been continued it has grown out of proportion. The documentation is done by non-natives to the English language, plus none of us has a writer background. We see questions on AFL++ usage on mailing lists (e.g. afl-users), discord channels, web forums and as issues in our repository. Most of them could be answered if people would read through all the documentation. This only increases as AFL++ has been on the top of Google's fuzzbench statistics (which measures the performance of fuzzers) and has been integrated in Google's oss-fuzz and clusterfuzz - and is in many Unix packaging repositories, e.g. Debian, FreeBSD, etc. AFL++ had 44 (!) documentation files with 13k total lines of content. This was way too much. ## Proposal abstract AFL++'s documentatin needs a complete overhaul, both on a organisation/structural level as well as the content. Overall the following actions have to be performed: * Create a better structure of documentation so it is easier to find the information that is being looked for, combining and/or splitting up the existing documents as needed. * Rewrite some documentation to remove duplication. Several information is present several times in the documentation. These should be removed to where needed so that we have as little bloat as possible. * The documents have been written and modified by a lot of different people, most of them non-native English speaker. Hence an overall review where parts should be rewritten has to be performed and then the rewrite done. * Create a cheat-sheet for a very short best-setup build and run of AFL++ * Pictures explain more than 1000 words. We need at least 4 images that explain the workflow with AFL++: - the build workflow - the fuzzing workflow - the fuzzing campaign management workflow - the overall workflow that is an overview of the above - maybe more? where the technical writes seems it necessary for understanding. Requirements: * Documentation has to be in Markdown format * Images have to be either in SVG or PNG format. * All documentation should be (moved) in(to) docs/ ## Project description We created our proposal by discussing in the team what the issues are and what was needed to fix it. This resulted in the [project proposal](https://github.com/AFLplusplus/AFLplusplus/blob/stable/docs/docs.md). We did not want to be selected by a writer but select a writer ourselves, so we combed through the list and reviewed every single one of them. We were not looking for coders writing technical documentation, but rather someone who is an experienced writer and has documented experience with structuring documentation. Few fit that profile and we sent out messages to 6 people. We finally decided on Jana because she had a strong background in technical documentation and structuring information. She had no technical experience in fuzzing whatsoever, but we saw that as a plus - of course this made the whole process longer to explain details, but overall ensured that the documentation can be read by (mostly) everyone. We communicated via video calls every few weeks and she kept a public kanban board about her todos, additional we used a Signal channel. Her changes were imported via PRs where we discussed details. The project was off to a good start, but then Jana got pregnant with serious side effects that made working impossible for her for a longer time, hence the schedule was thrown back. She offered to rescind the payment and we select a new writer, but we saw little opportunity in that, as that would mean a new selection of a writer, someone else with a different vision on how the result should look like so basically a full restart of the project and a large impact on our own time. So we agreed on - after discussion with the Google GSoD team - that she continues the project after the GSoD completion deadline as best as she can. End of November she took one week off from work and fully dedicated her time for the documenation which brought the project a big step forward. Originally the project should have been ended begin of October, but now - at nearing the end of November, we are at about 85% completion, with the end being expected around mid of December. ## Metrics We merged most of the changes in our development branch and are getting close to a state where the user documentation part is completed and we can create a new release. Only then the new documentatin is actually visible to users. Therefore no metrics could be collected so far. We plan on a user-assisted QA review end of November/begin of December. The documentation was reviewed by a few test users so far however who gave it a thumbs up. ## Summary The GSoD project itself is great. It helps to get the documentation back in line. It was and is a larger time investment from our side, but we expected that. When the project is done, the documentation will be more accessible by users and also need less maintenance by us. There is still follow-up work to be done by us afterwards (web site for the docs, etc.). Not sure what we would do differently next time. I think we prepared best as possible and reacted best as possible to the unexpected. Recommendations for other organizations who would like to participate in GSoD: - expect the process to take a larger part of your time. the writer needs your full support. - have someone dedicated from the dev/org side to support, educate and supervice the writer - set clear goals and expectations