I'd like to review your README
liw.fi
liw.fi
Or using overly vague terms that only make sense in a very narrow technical context. A ‘minimal isomorphic asynchronous worker framework’. Can mean a million things.
Always start with the problem. Tools don't exist just for fun, they exist because we need them.
The times when I need to read the repo README is when I am not familiar with what I am looking for. I say err on the side on more documentation, err on the side of a better explanation.
A "plain english" no nonsense definition goes a long way to introduce your concept. Save the fancy technical jargon for further down in the README if you must.
Specialized terminology allows the communication of complex concepts compactly. For the specialists a brief description like you mentioned is perfect. If you give it first, that person can read it and decide.
It should certainly be followed by a tear down or other plain English explanation of what the thing is.
Kind of like: ``` Brief
A little longer
Be descriptive about the thing
Go into every detail you want to discuss about the thing in the repository... ```
The jargon fooled blurb makes a great "a little longer" and gets out of the way to let the more readable description be given. Burying that can be a pain.
I need to either find or write a good readme template with that in mind.
These are common words I see in the first paragraph of readmes. If people can avoid these, they’ll write better introductions. No marketing, no subjective words. Otherwise, I feel like someone is trying to sell me that product.
> I think it would take a very experienced developer to predict in advance every issue they'd run into putting something into production.
I am not sure whether that can be expected from any project that exceeds a very narrow scope and/or if which it’s correctness can potentially be mathematically proven.
How many people intend to make slow, outdated, insecure software?
> when 1 (…) substantiated with concrete data
Then show me the data and let me reach my own conclusions. As a bonus point, the unquantifiable adjectives will be removed.
> Unfortunately, they are more often misused or abused than applied correctly.
Which makes them useless all of the time, because by now we’re primed to ignore those claims.
>because by now we’re primed to ignore those claims. Unfortunately, we don't always. If we were ignoring them all, then we wouldn't care. It is that we can't help read and interpret them and have our expectations set up; hence the disappointment when it turned out to be just words.
There's a very big difference between a project being production ready or not. Production ready (to me at least) means the project has been thoroughly tested on a live site and is in a position where you can take it as is and run it in production with confidence that it's going to work.
For example I have a Docker + Flask example starter kit project at https://github.com/nickjj/docker-flask-example and the GitHub description is "A production ready example Flask app that's using Docker and Docker Compose.". In this context to me that says it's using multi-stage builds, env variables, deals with static files in a way that's cacheable (md5 hashes, etc.), has tests and overall you can expect to see patterns that work well in both dev and prod. The README goes over those details too in case you didn't infer that from only "production ready" too.
Plot twist: It took me longer to write the README than create the whole project.
These are all important words for describing projects.
Maybe something at the top along the lines of : what it does, how and then what are the implications.
As a reader unfamiliar with a project, it's unpleasant to have to contend with "meta" at a time when one doesn't even have a solid first-order understanding of the project.
At first I felt bad for being confused by something so simple. But all their code examples for highlighting refer to their own code and you're right, at the exact moment you're trying to absorb new information it is infuriating to deal with the "meta" examples.
I don't use them out of that alone.
RSpec.describe Widget do
example do
expect(described_class).to equal(Widget)
end
end
Pretty non-meta.There was a user on GitHub back in 2019[0] who went around and created logos for a bunch of projects (including one I was working on actively at the time). Out of curiosity I looked the account up recently while working on a new project but it's not longer active.
Translations are another great example of this. That same project that got the logo has also been translated by various people in to eight different languages!
Other ways I'd love to find people devoting time to smaller projects -- accessibility and UX audits. It's hard to account for all this stuff on smaller projects with only one or two primary developers.
[0] https://github.com/reallinfo?tab=overview&from=2019-12-01&to...
Especially the localization bit. I'm constantly surprised to encounter folks that never even think about it, until version 1.5, and then find out that localization is a nightmare to add, after the fact.
And getting folks to work with them, is just as nightmarish.
Good RoT for localization is native, local speaker of the language, and dialects need to be considered. It's quite possible to bust your ass, getting a Spanish translation, only to have a lot of upset Latin-American users, because the translation was done in Castilian Spanish, as the only person who could handle the tech involved in localization was a CS student in Madrid.
I've learned to factor localization in from the beginning; even if I'm sure that this will never be used outside of my country (which isn't actually fair. There's neighborhoods in Brooklyn, where English is not the primary language; even though everyone was born here).
You just need to get to the point where you have to add localization after the fact –once, to get religion.
Localization is difficult and expensive. If we want people to help us localize, it is incumbent upon us to make it easy and relatively tech-free.
Or we can pay beaucoup bucks to iBabble-On (who do a great job, but not for free).
I so very much agree. I think user interface design and inconsistency is really holding linux back. Accessibility is intertwined with it.
I think if someone who did game ui design paired with a blind person could critique linux distributions (that led to changes), we would all benefit.
Nothing more frustrating than if you copy something from there but it turns out the README wasn't updated since the very first day and all the "hello world" code or install instructions are completely outdated
Maybe not include any code is the better solution, instead add an example folder.
Example: https://github.com/franciscop/server/blob/master/docs/docume...
Example: https://github.com/kstenerud/go-concise-encoding#library-usa...
Code examples from the documentation automatically become "documentation tests" to make sure your examples are still up to date when updating your code.
[1] https://doc.rust-lang.org/rustdoc/documentation-tests.html
#[cfg(doctest)]
#[macro_use]
extern crate doc_comment;
#[cfg(doctest)]
doctest!("../README.md");
Now, the readme examples are tested like everything else.https://github.com/rust-lang-nursery/lazy-static.rs/blob/mas...
It’s one of those things that’s so easy to forget or not even think about but once you see it or think about it, it’s essential.
I personally like at least one small example embedded in the README since it's zero effort, an example folder is great for _more_, but annoying to get started, what should I look at in the example folder first?
An example of this in action: https://github.com/liskin/liscopridge/blame/68a656b7beb10a5c..., https://github.com/liskin/liscopridge/blob/68a656b7beb10a5cd...
Because if your tool is new, one of the first things folks are going to think is "why wouldn't I continue using XYZ?". The goal of this question isn't to put down the competition but it should draw comparisons between the tools and include the reasons why you created your tool. This could be adding certain features, doing things faster or whatever makes sense.
Flask-Classful's docs https://flask-classful.teracy.org/ has an excellent example of the above. The opening paragraphs cover it so well. The rest of the docs are also a good baseline example for creating useful documentation. Lots of practical code examples with very clear explanations of how it works.
It blows my mind when someone has spent hundreds of hours to make something that they'd like others to use, and didn't spend the 5 minutes needed to increase its use by (my estimate) at least 5%.
Related: if your project has a website, include a screenshot on the front-page, not buried somewhere. A clickable thumbnail is fine, just don't make the reader work for it.
Might also be worth having a video of the application in action.
They don't have to, or better to say the shouldn't, be absolute http links. They can be just relative ones, and those will translate very nicely into file paths locally. If you just use a plain text editor you'll have to open them manually. A bit smarter one (e.g. most likely your IDE) will turn them into clickable file links. You're not losing anything but whoever looks at it on the web will have a lot better idea. And most people will look at it on the web first, before cloning the repo locally... Because it saves time.
On a more global discussion, I feel like a lot of experienced people are willing to help, or teach for free on subjects such as, startups, programming, product management, data science, tech subjects ... (and I assume on other non-tech topics also) but it is always hard to find people to help. I mean you could join a charity, but it is not the same thing as being close to one person and helping him in topics he is not good at.
Does anyone know a community where one can find people to help individually ?
A lot of us are, indeed, tiresome old "OK boomers," but some of us (I'd like to think I'm one) may actually have something to contribute.
Here's an example of a simple course I gave on Core Bluetooth. It was not free, but try! Swift World does their courses for $50 a pop, which is pretty cheap (BTW: I donated the proceeds for my class to sponsor scholarships to other classes): https://www.linkedin.com/posts/chrismarshallny_try-swift-wor...
Take note of the course materials. They basically teach the class on their own (also, they are entirely driven by some very intense READMEs).
In my experience, a couple of the better teachers on try! Swift World are relatively older ones, like Erica Sadun and Daniel Steinberg. Some of the younger ones are also excellent.
I enlisted to be a mentor but found I wasn’t prepared or ready for the time commitment quite yet. The folks who reach out are often in a bootcamp or self taught and looking for a way to break into their first tech job.
https://tldp.org/HOWTO/Software-Release-Practice-HOWTO/distp...
https://www.gnu.org/prep/standards/standards.html#index-READ...
In the past, by time I got to the readme I had already downloaded the project. It’s kind of weird how places like GitHub rendering the readme have changed the practice.
My pet peeve with READMEs: usage of excessive adjectives to oversell your project. Famous culprits: "blazingly fast" or software that is "beautiful" or creates "beautiful" things.
Another way to make yourself appear silly influencer is to use words like "I" and "My" in headlines ("I made a thing", "My thing hobby", "My thoughts on .."). Obviously it's you. But people don't know who you are and generally they don't care. Pushing persona makes everything look like social media marketing.
DHH had a funny line around Dropbox's "mission" in his 2019 railsconf video (linked to the direct point in the video): https://youtu.be/VBwWbFpkltg?t=2818
Dropbox's official mission as of 2019 was: "We're here to unleash the world's creative energy by designing a more enlightened way of working"
And DHH's remark was: "For fuck's sake Dropbox, you host files and make them appear on all of my computers"
Funny enough since then they changed their mission to be "Our mission is to design a more enlightened way of working" based on https://www.dropbox.com/about but it still doesn't come close to explaining what they do.
Imagine Amazon telling employees to stick it to books because thats the business they started off with. Like why should AWS even exist, it’s not what they do! That narrow mindedness wouldn’t have gotten them to where they are today.
ok sure then why is it in big red text on a customer-facing page, then?
I wonder only, how to scale it (: Is there a way for anyone to help with this effort, while not spending O(n) time. Automation?
On my own projects I've seem a pretty clear divide in adoption between projects which have a good README (100+ stars) and projects which have a similar level of utility/maturity but where I didn't bother to write a proper README (0-5 stars). (Stars are often a bad proxy for adoption, but here they are roughly proportional to downloads, reported issues, etc.)
Some tips to be aware of in order to maintain a healthy contributor/maintainer ecosystem:
Bear in mind the volume of requests that the project/maintainers may have to deal with. This is usually fairly open and transparent with most FLOSS projects.
It's always good to test and understand your changes before submitting them - and if you can demonstrate that to the maintainers (by way of test coverage, screenshots, console output, etc), that'll increase the likelihood that your changes can be accepted, and can increase your reputation for respecting maintainer time.
If you feel like you _didn't_ fully test/understand your changes and they _were_ accepted regardless, that could be a sign that the project needs a bit more help with review and quality control. That can be a challenge, and it can also be an opportunity to provide other improvements (for example, by code reviewing and/or increasing test and continuous integration coverage).
PS: It might sound like a lot of this refers purely to code changes - but READMEs and documentation can be equally important to keep correct.
Guessing that queue is getting deeper now. Maybe he should add a nominal fee to jump the queue ;)
I found one small typo: "Part of the~~w~~ review process"
I'm sorry, it's kind of a trigger for me to read READMEs with typos and I need to send a PR to fix it.