Giter Site home page Giter Site logo

contributing's Introduction

welcome-teal

Firstly, a heartfelt thank you for making time to contribute to this project!

As a distributed team,
we need a contributing guide with simple steps people can easily follow
so that we avoid confusion and keep our communication consistently crystal clear!

Our contribution steps in a nutshell:

validate-idea

Please inform us if anything is unclear or if you have a suggestion for how to simplify/streamline it! Get Help!

Contents Guide


Part 1: Describe your Question, the Idea or User Story in an Issue

Why Use GitHub Issues...?

Everything starts with a thought. We collect all our thoughts in GitHub "issues".
The issue can then be discussed, validated and worked on as a team while keeping everyone informed.
We use issues to log our user stories, sub/technical tasks and any progress towards solving the issue,
this ensures we have a single source of truth that everyone can easily see!

Step 1: Check if the Question/Idea/Story/Issue Already Exists Using GitHub Search search

  1. Please take a moment to read through the existing stories/issues for the project
    to familiarize yourself with the current "backlog". (There is a chance what you are thinking has already been described by someone else...)

  2. Try searching through the existing issues for keywords associated with the story/issue you want to create.
    For example, you could use https://github.com/dwyl/time/issues?utf8=%E2%9C%93&q=is%3Aissue%20app+icon if "app" and "icon" were the keywords for what you have in mind and you were searching in the "Time" project.
    issue-matching-keyword-search

  3. If you find an existing issue that matches what you were looking for, please click on the title of the issue, read the description to confirm that it's what you are looking for, then comment on it so we know more than one person has the need/issue.

Note: If there is already an issue for what you were thinking, you can skip steps 2 & 3. as there's no need to create a duplicate new issue. issue-search-for-app-icon

  1. Otherwise, once you are reasonably sure there is no existing question/issue/story covering what you have in mind, please create a new issue (see next step!)

Step 2: Create a New User Story or Report an Issue New Issue

  1. Using the New Issue button, create an issue for the user story (feature request, expected or unexpected behaviour, or question) you have in mind.

Note: If you are new to writing "User Stories", please checkout out our Example User-focused Story Descriptions section in the "Notes" section below!

Step 3: Submit the New Issue!

  1. Submit the new issue!

  2. Once you submit a new issue for a User Story or Question/Issue/Bug, a member of the team (typically the Product Owner) will review the issue.

  3. That's it from the side of the issue creator! (Thank you!)

thank-you-green-large

What do I do Next...?

Once a new issue has been created, it must be "validated" by a different member of the team/organisation. (see: "Part 2" below...)

โญ Star the Project! โญ (share the love!)

If you've found the project interesting, helpful or useful in any way, please star the repository on GitHub!
Stars show other members in the developer community that it's a worthwhile project or learning resource and one that can offer value to other developers like you! ๐ŸŒŸ


Questions?

Why Does the Issue Need to be Validated? >> One Word: Communication

This may initially feel a bit "bureaucratic" but we urge you not to think of it as
"jumping through hoops". We think of issue validation as something that:

  • ensures that everyone on the project is aware of the issue/idea/story.

  • saves you time by avoiding duplicating effort!

The Product Owner (PO) or Project Lead (PL) has detailed knowledge of the current issue backlog and all previous ("closed") issues.
They know how features/functionality should work and can validate things from the user's perspective.
Most importantly the PO/PL knows if someone else is already working on the issue...
And, sometimes the exact same issue has been "solved before" in a different project, so hours/days of effort can be saved!!

  • someone else might have insight they can share on the issue!

For example, if you have a question or are stuck on a challenge/problem, share your thoughts and/or progress towards "solving" it in issue comments you never know when you will get insight from a complete stranger!

  • capturing information in issues maintains relevance and focus.

The discussion is not "lost" the way it would be in "chat" and discussion are grouped by relevant topic.

  • clearly document the project so anyone joining the team later on can see the "history".

We have found this to be invaluable when people are learning why and how something works the way it does!

How Long Does it take for an Issue to be Validated?

We aim to respond to new issues within minutes but during busy work days this can take up to a few hours...
(Thank you for your patience! Please help us by giving as much useful information as possible in the issue description.)

What can I do while I wait for a my issue to be validated?

what-to-do-while-waiting

  • If you are itching to help "move the issue/story along" you can help by describing how the story/issue could be implemented or "fixed" ... feel free to describe your thoughts in a follow-up comment on the issue you just created!

  • Please do not write any code until the story/issue/bug has been verified (by the product owner or project lead).
    (It's not that we "doubt" anyone's abilities or the validity of ideas/issues we simply don't want people "wasting time" or "duplicating effort" on un-verified issues... also there are many other ways you can help while you wait...)

To help us a lot: go on a treasure hunt for an issue
that someone else created which has not had any comments ...
or has not been assigned to someone for investigation/work.
this is quite easy to find by searching for a label: help wanted

Who can/should I assign my PR to?

Either the Project/Team Lead or "QA" (where applicable) or in the case of an open source module, our "rule-of-thumb" is: look at the list of contributors and assign your PR to the person who has made the most contributions. If you are unable to assign your PR, simply mention the person by their username (@ them!) in your PR description to notify them that your PR is "ready for review".

Is it a "Bug"?

We also use GitHub issues to report "unexpected behaviour" (sometimes referred to as a "bug") in an app or module. However, we use the word "issue" to generically mean any thought/thing we want to record in the project and share with the team. We reserve the word "bug" for a reported issue that has been verified as not functioning according to the expected behaviour in the user acceptance test described in the original user story.

Please do not use the word "bug" or apply the bug label until the issue has been validated.




Part 2: Validate the Need (User Story) or Issue Exists

A different team member from the person who created the issue must validate the User Story/Issue.

Step 1: Confirm the Need in the New Story/Issue

  1. When a new issue (user story, feature request or potential bug) is submitted by someone, we require a different person to verify it.
    Typically this verification of need is done by the "Product Owner" ("PO") or the "Project Leader" ("PL"), but in the case that the issue was created by the PO/PL then a different member of the team will need to confirm their understanding of the issue.

  2. The person acknowledging the user story will add some labels to the issue to help categorise it. eg. question, discuss, etc.

  3. (More) Labels can always be added/removed at any time. The purpose of labels is to help the team categorize and prioritize issues in the backlog see: complete list of labels

Step 2: Assign a Priority to the Story/Issue

  1. Always ensure that the Story/Issue focuses on only one thing. As soon as you see the word "and" in a story/issue, you know it is trying to do more than one thing.
  • If the Story/Issue has too many components or features*, split the user story into "sub-stories" (often referred to as "sub-tasks") which you link to from the "main" story/issue. -> Example of a Larger Story ("Epic") with Linked Sub-stories Required! see: #55
  • Product owner (or Project Maintainer) will add a priority label e.g: Priority-2 to the story/issue.
  • Any/all Sub-Stories should also be prioritized so that the team can determine the order in which they need to be worked on.




Part 3: Do the Work!

get-it-done

Once all the previous steps have been performed (story/issue created, categorized with labels, any sub-stories/tasks created) and you are sure you understand what is required (make sure there are clear Acceptance Criteria), add a comment on how you propose to resolve/implement your resolution to the issue and go for it!

Step 1: Estimate the Time Required to Perform the Work

  1. For an ongoing project, we estimate stories During "Sprint Planning" session;
    A time estimate label (e.g: T4h or T25m) is added to each story (and any Sub-Stories/tasks)
    The time estimate must factor time to:
  • document the changes made to the codebase or UI

  • test both the code (unit/functional tests) and UI tests

  • develop the feature (or fix the "bug")

  • deliver by submitting a PR and going through a review/QA cycle.

  • deploy the work to an environment where a non-technical peopler can evaluate it against the original story description and acceptance criteria!

  • Wherever possible/practical/relevant include the person who originally created the story/issue in the time estimation discussion.

  • For work in sprints, a milestone is added at the sprint planning session to group the user stories with its relevant sprint; this gives everyone in the team a clear picture of what is planned.

Please See below for "Practical Notes on Time Estimation".

Step 2: Assign Yourself the Task and Do it!

  1. Assign the story/issue to yourself before you start working.

  2. Apply the in-progress label to the story/issue/sub-task so that your team knows when the work was started and that it is currently being worked.

  3. Update the README.md before working on the task: Ensuring you answer the questions: Why? What? How?

This is referred to as "Readme Driven Development" i.e: you document your work before you write any code.
(If this feels "tedious" to you, remind yourself of the last time you "inherited" undocumented code...)
Watch: "The Mess We're In" by Joe Armstrong

  1. Log progress as comments in the issue you are working on to keep everyone informed along the way. (This allows people to help you more effectively and gives your team/client/stakeholders something measurable).
  • If you haven't finished your current task by the end of the day, take 5 minutes to describe the progress you've made and what else (still) needs to be done. Anyone should be able to pick up and complete a user story by reading this description.
  • If you are leaving for more than a day, remove the in-progress label and un-assign yourself form the story.
  1. Reference the user story/issue/sub-task you are working on by pasting a link to the GitHub issue in the commit message.

  2. Once you have committed your work/progress, push up your changes and then open a Pull Request (even if the work isn't yet finished)
    so that the rest of your team can easily see what you've been working on. (Remember ...)

  • Add [WiP] before the title of your PR and add that it's NOT READY FOR REVIEW in the description if it's still in progress.

Step 3: Prepare a Pull Request (PR) and Assign (to someone else) for Review

Rule (of thumb): Keep Pull Requests Small and Focused.

  1. Describe what your PR contains in the PR description; it only takes a few seconds but dramatically improves the review process.
    (Please never leave the PR description blank! remember this is in an exercise in communicating with your team members!)
  • Make sure all tests are passing and (where applicable) that your code coverage is 100%.

    • Never comment out a test that is failing. (Don't laugh, we have seen "cowboy developers" do this...! If a test is failing, the feature is broken! Fix the feature to make the test pass. Only then is your work "done")
    • Never assign a PR for "review" until all CI checks have passed. check failed
      if anything is failing on a PR and you need help simply comment in the PR "thread" asking for help!
  • Make sure your PR adds to the README to explain the latest changes made (or explain specifically why you haven't had to update the README).

  • Increment the version of your application if it is a "new release".

  • Remove the [WiP] from your PR title.

  • Remove the in-progress label from the PR and associated issues.

  • Apply the awaiting-review label to the PR.

  • Assign someone else to review your PR.
    (Please don't merge your own PRs. We need to ensure every change has been reviewed by at least one other person on the team. Thanks!)

Step 4: Reviewer(s): Review, Comment On and Merge the Pull Request

Always remember: a Pull Requests is a "discussion thread for understanding the code". Our objective is to ensure the code works, is well documented/tested and is "free from errors". We don't "nit pick" if it's going to delay shipping. Equally, where code requires clarification, tell people. Everyone benefits from easy-to-read (easy-to-understand) code.

The person who is assigned to review the PR (often referred to as the Quality Assurance Person or "QA") will:

  1. Apply the in-review label to the Pull Request to signal to other members of the team that the PR is being reviewed. (At this point, new commits which change large portions of the code being reviewed should not be pushed unless they are for changes that have been requested by the reviewer)

  2. Checkout the PR's branch and run it on your local machine following the instructions in the README.md file, where applicable.

Confirm the tests pass and the app runs on your local machine.

  1. Open the Issue(s) referenced in the Pull Request and re-acquaint yourself with the User Stories so you can confirm the content of the PR satisfies the Acceptance Criteria.

  2. Review the content (documentation, tests, or code) in the Pull Request on GitHub...

  3. Write comments or notes to the developer(s) giving feedback on their code.

See: "notes on code reviews": #32 (comment) Get Help!

  • If, for any reason, you are unsatisfied with the content of the pull request (documentation, tests or code), request changes.

  • Don't be afraid to "push back" on a PR if the code is unclear, especially if the developer who's code you are reviewing is "more experienced", because they might be making assumptions that their code is "self-documenting"...

  • Once you are satisfied that the content in the Pull Request is acceptable, approve the pull request using GitHub's "Review" interface.
    review-changes-submit

We encourage peer-review by team-members on all our projects,
so it's not uncommon to see multiple people "approving" a PR.
e.g: TheScienceMuseum/collectionsonline#708
multiple-reviewers

  1. Merge the Pull Request.

  2. Delete The Branch on GitHub (and your local machine). The code is now merged into another branch (most likely master) so deleting the branch will not "lose" any code.

  3. Finally, someone on the team (usually the developer who created the PR) applies the please-test label to any issues mentioned in the PR so that the Product Owner and/or User Testing Team are aware that the feature is ready to test.

  4. Ideally the Original Issue Creator should post a comment confirming that the issue (User Story, Question or Problem) has been adequately addressed and then close the issue.

In practice the PO often ends up closing the issue.



Notes on Effective Contributing

Thanks for Reading! Please Help Us Improve! Help Wanted!

Thank you for reading this far in this huge readme! Please help us by suggesting edits (we're always happy to remove words!!) and improvements!

Example User-focused "Story" Descriptions

User stories describe features (or "expected behaviour") of the application
in terms of the value (or "benefit") to the person using the application.

Example user story (if the feature has not been described before):

As a person using the Web App
I want to be able to save a shortcut app icon to my home screen
so that I can easily get back into the app without having to navigate to it.

Or, when you are reporting an issue/bug/fault, try and include the exact steps to "reproduce" the issue.
Example:

when using the app on an iPhone 6 running the latest OS (10.2)
when I attempt to save a shortcut to my home screen,
I do not see an app icon. :-(

Include Any/All Relevant Information in the Issue Description

  • Please include as much relevant information as you can so the Product Owner (or project leader) can validate that it is a necessary/desired feature.

  • Note: A good user story describes the idea in a concise and user-focused way.

  • Never leave the issue description blank even when you are in a "rush".
    The point of issues is to communicate. If you see an incomplete issue flag it. (Link your friend to here...!)
    You wouldn't send a blank email to hundreds of your friends (unless you wanted to freak them out!), yet,
    submitting blank issues is doing exactly that! It sends a "I have no idea what I'm doing" message to your peers ...
    Which was only amusing the first time ... just communicate better.

Example of useful details:

People using the app will only access the app from their company-issued
Android (Lollipop) Mobile phone (5 inch Samsung Galaxy J).
The screen resolution is 1080 x 1920 pixels.

Or, when describing a specific need for "offline capability":

People use the app in areas with poor mobile signal,
so the app has to work offline and sync data/changes later
when they are back on WiFi or 3G.

Or, when reporting an issue (potential bug):

People using Windows 8 and Internet Explorer 10 report that
they cannot click on the button to save their app preferences/settings.

Tip: If you can upload a sketch (of the idea) or screenshot (of the issue), it helps clarify things a lot!
How to take screenshot: https://www.take-a-screenshot.org (all platforms!)

Example creating a New Issue for an expected behaviour with a clear description and illustrative screenshots:

create-issue-for-home-screen-icon

This is a real issue: dwyl/dwyl-site#194 you can help us resolve it!


Practical Note on Time Estimation for a Story/Task

Our time estimates are usually for a pair of people programming together.
(Adjust accordingly if you're working without a pair. Or, better yet, find someone to pair with!)

Where the team includes several developers the time estimate will be the average expected time
for the two least experienced people. Underestimating the expected time for a task out of "naive optimism"
sets an unrealistic expectation and leads to stress & sadness.

Revising a Time Estimate

If you are made aware of any reason why the original time estimate applied to a story is unlikely to be the actual time it's going to take to complete, inform your team as soon as possible! Avoid suffering in silence if you are stuck on something just because you don't want to alter the time estimate! Nobody will "hate" you for being honest about how much effort it actually is taking to deliver the work! Just tell your team (by commenting in the issue) as soon as you know it's taking longer than expected, and ask for specific help from your "Scrum Master" or "Team Lead".

Estimating for Open Source Modules (without "sprints")

For independent open source modules or hobby projects we estimate on an ad hoc basis before work starts on the issue.
Just because we are doing Open Source work does not mean we shouldn't estimate the expected effort/time for our work.
If anything we should follow our Contributing Guide better because our Open Source work is available for everyone to see!
Some of our open source modules are made to solve a problem in a client project/product.
If you are doing work on an Open Source module during "client work" time, please "mirror" the issue in the Project and ensure
you estimate in both places so the "PO" (AKA approver of invoices!!) on the project is always aware of what you are doing.



Notes on Creating Good Pull Requests

1. Keep It Small and Simple (AKA the KISS principle)

  • Don't be tempted, to "bundle" up several bug fixes/feature additions into one large PR and then submit it to be reviewed all at once...
    We prefer working in smaller increments splitting the work into individual parts to be reviewed separately.

Why...? Read: "Work in Small Batches":
https://www.startuplessonslearned.com/2009/02/work-in-small-batches.html

  • The best PRs update the documentation (often the repo's README file)

  • Always ensure there are passing tests for any new code you have written.

2. Descriptive Pull Request Title and Description!

  • A descriptive title answers the question: "What is included in this PR?"

  • A good description summaries the contents of the PR and gives the person/people reviewing the PR a clear picture/focus for the feature/change/bug-fix which improves review speed.

  • Reference the issue(s) that the PR addressed in the PR description.

3. PR Etiquette

  • Explain what the PR includes (bullet pointed lists are sometimes helpful to make things clearer) and the implementation detail.

  • If you have the permissions to do so, assign your pull request to someone (else) for review.

  • Never merge your own pull requests on a team project. No Exceptions. Just don't do it.

A good example PR: indexzero/ps-tree#12 created from the need which was validated and discussed in an issue indexzero/ps-tree#10 before any work was performed.

Creating a New repository

Use Cases for Creating a New Repo

  • You have search through dwyl's existing repositories and have not found one that covers the subject that you want to share your knowledge on.
  • You want to build a new open source application/module/tutorial that you believe is in line with dwyl's values and will benefit the community.

How?

  1. Open an issue in dwyl/start-here explaining the Why? and What? of the repo you want to create.
  2. Wait for your issue to be validated by the community - in the same way we handle other issues. It may be that someone is already working on something similar in a repo you haven't seen yet. Or, it may be something that dwyl tried in the past but moved away from.
  3. If the need is validated, create the repo following the requirements below.

Minimum Requirements for a New Repository

Everyone's busy and we know that sometimes repositories are created with great intentions but people don't have time to look at them for a few days or weeks.

These minimum requirements when creating a repo mean that the intention is clear and contributions from the open source community can begin early.

  • Initiate the repo with a clear description
  • Initiate the repo with a README
  • Add dwyl's standard labels by using https://label-sync.herokuapp.com
  • Add a CONTRIBUTING.md file to the repo
  • Update the README.md with simple 'Why?', 'What?' and 'How?' sections
  • Protect the master branch to ensure it can't be pushed to directly
  • If relevant, add the right people/teams to the repo as collaborators

Forking Repositories into dwyl

Generally, forking a repository into the dwyl organisation is not required, or recommended, without good reason as forks carry an additional maintenance burden and have issues disabled by default (voiding our contributing process). The only reason to do so is if you're planning to fix an issue in the original repo and send a patch/PR back up-stream to that original repo.

If you would like to transfer ownership of one of your repositories to the dwyl organisation, please open an issue in dwyl/start-here.


General Notes

Images and Binary Files

When making a pull request, make sure that you haven't included any unnecessary files that will take up a lot of space in the project!

Such files include images and other binary files like dependencies or drivers. Git is meant for source code and other (text-based) files that require version control. Images and other binary files are difficult for a human to review in a GitHub Pull Request and just take up a huge amount of space! This means that when ever a person clones/pulls the code they have to download many/huge files (not just the code which is typically tiny by comparison)

It is a general git "best practice" to avoid clogging up your Git repo with files that don't need to be under version control.

Inspired By

Guidelines for creating user stories are adapted from Simon's user-story-checklist repo. Check it out! โค๏ธ

Labels

GitHub can be a great project management tool if used effectively and labels are a great way to organise and track the progress of a given project at any point in time. They are a fantastic communication tool, particularly for remote teams.

At dwyl we have created our own standard list of labels that we use for each of our projects. This gives our team the ability to move between projects quickly and productively, saving time and energy in the process.

For our Complete List of Labels and how they should be used, take a look at https://github.com/dwyl/labels.

Additional Information

We are releasing our work under the GNU General Public License Version 2 (GPL V.2) if you have any questions regarding the license, please read: https://github.com/dwyl/intellectual-property and raise an issue on GitHub if you require clarification!

Got a Security/Privacy Concern or Question ?

If you have a security/privacy related question that you want to ask or disclose discreetly,
please email us: [email protected]
For all other questions/ideas/issues, please follow the normal steps. Thanks!

HitCount

contributing's People

Contributors

arhell avatar burkhufnagel avatar iteles avatar jackcarlisle avatar jbarget avatar katbow avatar mk4111 avatar ne-smalltown avatar nelsonic avatar simonlab avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

contributing's Issues

Moving the security/privacy concern section further down?

Having this security/privacy concern section at the top means that there is no section of the step-by-step process which is the content of this repo that shows up 'above the fold' once you've scrolled down to the readme on a desktop:
dwyl-contributing-repo-nothing-above-the-fold

We might want to give people a glimpse of what they came here for quickly so they don't get distracted/start scrolling and just scroll past everything without reading it.

Thoughts welcome as this is just a personal impression!

Reword & relocate workflow section

The workflow section has some repetitive information & could be reworded to be more concise & to describe the main points more clearly.

Add summary and table of contents

Review this repo and

  • Ensure that if people are just skimming, they still understand the major points
  • Add table of contents for a quick view of what is in the repo - this provides people with context and lets them know that they can't stop half way down because there's still important stuff to come.

QA process - what is it and where does it live?

As the number of collaborators and dwyl open source modules grows, it stands to reason that the number of people reviewers for PRs will also grow.

There are certain processes in place for these reviews, which we need to capture and @rjmk can certainly add some 'lessons learned' to.

Seeing as these also affect contributors, should these processes live in the contributing repo?

Assigning issues/PRs to (other) people ...

If you aren't interested in "Process", please ignore this. ๐Ÿ‘

Process discussions are for people who want work in systematic/sustainable/scalable organisations that don't cave in under the weight of their technical/process debt the moment a new person joins the team ... most "startups" don't have "time" to think about this kind of stuff. That is, they don't have "time" until they realise how much time they are wasting by not having clearly defined/agreed processes... โŒ›๏ธ ๐Ÿ”ฅ ๐Ÿ’ธ ๐Ÿ˜ญ

Assigning issues (and pull requests) to someone specific is a good way of communicating with that person that you want them to take on the task, but sadly that often not "enough".

Not "picking" on anyone in particular, but just for illustration purposes @jrans has 18 Open Issues which are _Assigned_ to him: https://github.com/issues?q=assignee%3A**jrans**+is%3Aopen

github-issues-assigned-to-jrans

Its really unclear which issue(s) someone is currently working on when others can assign issues to them... so when that person goes on holiday it can be difficult to know what is "done" if the issue is still open.

I prefer the scenario where each person is only working on one thing at a time...

But I'm absolutely guilty of having way too many issues assigned to myself ...
Maybe I should tidy up my list before bringing up this discussion... ๐Ÿ˜‰

The Ticking Clock

This will only "work" once we have "Time" working.
Time will use the GitHub API to check which issues have been assigned to you and start counting as soon as something is assigned. That way we have "passive" time tracking.

We need some thought as to how this will work. e.g. we could still allow people to assign issues, but only when the person to whom the issue is assigned adds the in-progress label, the timer starts...

Should the agreement itself be the readme?

Should we have the contributor agreement itself be the readme so that it's the first thing people see when they open the repo?

Or should we have a thank you paragraph and section on how to sign the agreement as the readme with a link to the md file in this repo with the agreement itself (clearly named)?

Reduce opening paragraph

Much of the information in the first paragraph can be pared down/removed eg. the GPL licensing.

Forking repositories into dwyl - why it's not a great idea without very good reason

There is no way to add issues to forked repositories, which means they render our contributing guidelines pretty much useless.
screen shot 2016-10-19 at 00 57 03

We need to add a guideline to this repo on when forking a repo into dwyl is acceptable (I foresee very few situations where this would be the optimal solution) and what the process for that conversation is (open an issue on the dwyl repo that requires a fork of another repo or if there is no dwyl repo, do so on start-here).

PR Review Process is Unclear ... :-(

as a team member (developer) want to ship my work to end-users ASAP
I need to know what the QA/review process is
so that I know when I can expect my work on this PR/story is considered done.
(so that I'm not waiting to start work on my next story...)

Pain felt by team member:
unclear-on-pr-review-process

Let's fix this now!

relates to: #32 (comment)

Pull request templates

Even more so than with issues, I've noticed that PR descriptions are often very sparse.

My hypothesis is that this isn't due to laziness, it's due to a lack of 'inspiration' over what to actually write in the PR description.

Enter pull request (and issue) templates.

This should include:

  • What PR does
  • Issue number it fixes
  • Screenshots

Thanks for the tip @NataliaLKB !

We should also consider adding this to an .npmignore file as it's unnecessary for npm.

For a later date: 'beginner-friendly' label

As a growing open source community, having a 'beginner-friendly' label and clearly noting in this repo what that actually means might be useful to help newer coders feel like they can still contribute. There is often a reluctance to contribute early on in a coder's journey because 'surely it can't be this simple' but having these labels may help combat that.

This is subjective, but clear guidelines should be enough to ensure this works well.
https://opensource.com/life/16/1/6-beginner-open-source

Given this subjective nature, I am not inclined to add any other levels of experience as labels.

Bug-fixing Checklist ?

Often I come across code in a "mature" codebase that I have no idea how it got there.
image

should we add a section on bug-fixing encouraging (requiring?) people to:

  • add a code comment linking to a bug report in the code...?
  • create a regression test with a clear and link to the github issue that unambiguously fixes the issue.

Add "Why" section

The why section can be a short, single sentence to explain why this process is followed

Split up workflow for developers and POs/PMs

Currently the workflow contains steps for the developer creating the original issue, and the person maintaining the project. These are mixed together within the same flow and can make it difficult to figure out what your responsibilities may be.

Suggestion is to split into 2 separate workflows for the Developer and the Product Owner/Project Maintainer, so that you can quickly find the steps to follow for your role.

Why (having and following a) Process Matters?!

Why?

A humorous GIF explaining why working in a team of software developers can be frustrating:
tasks
https://twitter.com/iamdevloper/status/789234931599835136

The point is that when you are alone you feel like you can make progress quickly.
And when you work in a large team in a "big" company
it can feel like trying to lift a freight train using a crowbar... ๐Ÿ˜ญ

The reason working in large teams often is so painful is that:

  • either there is no process
  • or the process is poorly defined and nobody follows it
  • or you have a handful of "senior" people who don't think the process/steps apply to them...
  • or there are simply too many steps to get anything done so people just give up or short cut them!
  • or people rebel against "the system" and end up building something "amazing" that it turns out nobody wants because no stakeholder was consulted prior to build or the business has not "bought into" the idea...

Point is, when the steps in the process gets followed everyone knows what is going on.
We have worked in places with literally dozens of steps just to create a "User Story" in Jira! ๐Ÿ˜ง
We have attempted to streamline our "process" down to the minimum number of steps.
If you can spot an area for simplification, we would love to hear about it!! thanks! โค๏ธ

relates to #44

Issue submitted, I can start work now right?

Full screen view once I get to step 3:
screen shot 2017-01-24 at 20 31 14


Amaze! I've submitted an issue, I've starred the repo (coz I'm super nice ๐Ÿ˜‡ ) and I don't have any questions, so I'm gonna go ahead and do the work now to get the feature I need into this open source project because I definitely don't need to scroll down further.

๐Ÿšจ๐Ÿšจ๐Ÿšจ๐Ÿšจ

There is no indication that there will be further steps.
I would suggest a sentence at the end of the submit a new issue step that says something like the following:
Now one of your team members will need to [validate the need for the story](https://github.com/dwyl/contributing#a-different-team-member-must-verify-the-user-storyissue) before any work can be done on it.

How do we know people have read our contributing guide?

Step 4 of the Seven Steps in dwyl/hq#147 is to โญ this repo.

Why?

community-ibsen-quote

encouraging (requiring) people to โญ the repo to confirm they have read/understood and intend to follow the process is the only way I could think of to foster the necessary behaviour for success in 2017.

The prospect of getting $300 Headphones is a pretty decent "carrot" when you consider that reading the README.md. will take no more than 10 minutes.

We have collectively wasted countless hours of Dev & QA time over the past year
because people have not been required to follow process. โŒ›๏ธ ๐Ÿ’ธ ๐Ÿ”ฅ
Hours that should have been spent on the craft/features.
Which would have made users/stakeholders/clients happy.

image

It's my fault for not making sure we had a clearer "onboarding" process...
We're going to fix it in 2017.

DWYL will be a well-oiled machine running on a hydrogen fuel-cell producing water in the desert! ๐Ÿ‘

Intro image?

I find that having an intro image in a repo makes it more "people-friendly" ...
I'd love to have a really friendly/welcoming image ...
while we search for a better image, what do people think of this:
welcome-teal

tldr;

These are the things I feel like shouting at people. The things that get done for the first couple of weeks and then fall by the wayside and that can't happen. The things I remind people to do over and over again but seem to only be done to varying degrees and by a handful of people:

  • Create an issue before you start working on anything
    • Discuss your proposed implementation in that issue
    • Add a time estimate to it
  • Once there is at least one comment agreeing the feature is needed, start working on it _by adding to the readme _first**
  • Link all commits to a relevant issue
  • Each PR should:
    • Solve only one problem: fix one bug, implement one small feature or part thereof
    • Have a clear and simple description which also links to the issue it solves
    • Add to the documentation or explain why it shouldn't
    • Include full tests for any code that is introduced
    • Be assigned to the designated QA when ready for review

Adds to #12

Rewrite steps for section 2 on user stories

This section has some steps that cannot be completed by people who do not have access to the repo(s).

For example, they would not be able to add labels for a new issue they are creating. Most of this section can be placed in another section.

Working on a "Spike"

I think this deserves a separate section as:
a) Less experienced developers don't tend to know what a spike is
b) It is, in my experience, something which has been treated with very little process and as a result, the information resulting from it is often not useable.

What?

A spike is a limited period of time (often between half a day and two days) during which you try a number of different methods to solve a problem, in order to determine what the best solution is. The code that you write during this time is not used directly in the project, but the lessons you learn are.

How to perform one?

  • Timebox your spike
  • Determine what the different methods you will try are
  • Start researching and trying these approaches outside of the main body of code
  • Document all of your steps as you go along - this is crucial, not only are you more likely to actually keep track of your findings this way, but you are also providing a very valuable resource of the journey you've taken for future developers who encounter the same issues
  • Determine which approach you will follow, throw the code away and open an issue in your project's repo so that you can begin the implementation.

Introductory sentence on use of issues?

The first step in the process is to search through the backlog for existing issues.

screen shot 2017-01-24 at 20 18 15

But if I don't know that the backlog is managed through issues and I will be expected to raise one before starting work, will this make sense to me?

My suggestion here would be something like this to provide context:

At dwyl we use issues to log our user stories (and technical tasks) to ensure we have a single version of the truth.

My expectation is that the link in this section explains enough if people need it.

d7c9580#diff-04c6e90faac2675aa89e2176d2eec7d8R43

Expand?

We need to expand this with specific instructions...

Writing Conventions for Markdown-based Docs

When writing a "how-to" (e.g: learn-xyz) or general project documentation, should we have a list of writing conventions the way O'Reilly books (the benchmark for tech books) always have a "Conventions Used in This Book" section at the start of the book e.g: http://www.oreilly.com/openbook/debian/book/prf1_02.html

Terminal Commands

When instructing people to run a certain command in the Terminal (Emulator), should we

  • include the $ (dollar sign) in front of the command (or not) ? #discuss
  • explicitly state that the command has to be run in the terminal?
  • use constant width bold for all "Commands or text to be typed by the user" ?

For a complete list of the O'Reilly Typography and Font Conventions
see: http://chimera.labs.oreilly.com/books/1230000000969/ch03.html
PDF Snapshot: O'Reilly-Typography-and-Font-Conventions.pdf

(Can We Craft a) Visual Explanation of the Process ?

Can we have a visual "workflow" of our process so people who aren't great with reading lots of text can grasp it in under 10 seconds?

@harrygfox / @iteles could we commission an infographic? which we could print A2 an have on the wall and also send to our remote collaborators and partners?

infograpihc

construction infographic

Add Instructive Guidelines to README

We should begin to add explicit guidelines on how someone can contribute to a dwyl project. Some examples of this could be as follows:

  • how we use labels
  • using issues to track work
  • how we link our commits to open issues
  • add "before you start" section

Section Image for "Validation" Step ?

Essentially we want to "break up" the content into distinct chunks and having a section heading image is a good way to help signal to people that is a new section...

I have spent a few minutes searching for a good image/picture we can use for the "Validate Issue" section ...

I'm not happy with either of these:

validated-sign

image

So if someone else has time to do some searching and/or create an image from scratch it would be much appreciated! thanks!

advise people to not include images (or other binary files) in git repos

Git is meant for source code and other (text-based) files that require version control.
Images and other binary files are difficult for a human to review in a GitHub Pull Request and they end up taking up a lot of space in the git repository.

This means that when ever a person clones/pulls the code they have to download many/huge files (not just the code which is typically tiny by comparison)

A project we have been working on included a few binary files and, because Git tracks those files forever, each time anyone attempts to download the repo it's unnecessarily _huge_:

git-best-practices-dont-include-images-or-binaries-in-projects

on a slow-ish connection this git pull took 20mins ... ๐Ÿ˜ข

This is a general git "best practice" to avoid clogging up your Git repo with files that don't need to be under version control.

if we are trying to avoid excluding people on slow internet, we have to make this a rule.

Thankfully, with images it's easy to simply drag-and-drop (or paste) the image into a github issue/pr comment and then copy-paste the resulting markdown into your text file. #easy

see: https://robinwinslow.uk/2013/06/11/dont-ever-commit-binary-files-to-git/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.