How to review a Pull Request

This checklist is intended for Language Leaders and Community Leaders. Here you'll find everything that should be addressed when reviewing a Pull Request.

Before merging, make sure the latest changes have been deployed to Beta and thoroughly tested. In case you're unsure or have issues, please reach out to either @moollaza or @pjhampton on Slack.


  • Is the PR related to an existent GitHub issue?

  • Does the PR follow the correct template?

  • Does the Instant Answer have an associated IA Page?

  • Is there a link to the IA Page, and is it correct?

  • The PR should only contain changes related to 1 Instant Answer and associated files

  • Is the PR title appropriate?

    • For a Bug Fix: {IA Name}: {Description of change}

    • For a New Instant Answer: New {IA Name} {Type (eg "Fathead")}

    • For anything else: {Tests/Docs/Other}: {Short Description}



  • Does it adhere to our code style guide?

    • 4-space indents

    • Semicolons

    • etc.

  • Do filenames adhere to our naming conventions?


  • Does the code have dependencies?

    • If yes, make sure they're specified in a requirements.txt/gemfile/package.json/etc. file in the IA directory

Spices and Goodies

  • Does it use a built-in template?

    • It shouldn't use the Base template unless explicitly requested/approved by staff

  • If an API key is required, where can the DDG staff request their own copy? Make sure to ping @moollaza on Slack


  • Are all constants and private subs defined outside the handle fn?

  • Is there a check that $loc, $req, and $lang are defined before using them?

  • Are all files opened and read outside of the handle function?

  • Does a CPAN module exist that we can use?

    • Instead of implementing something yourself, check if a module already exists on CPAN

  • The Perl should not make any network requests

    • We cannot allow the Perl to do this

    • Any CPAN modules that make web requests are not allowed


  • Is the code wrapped in closure?

  • Is use strict; included at the top

  • Does this rely on any third party libraries?

    • The developer should ask us before using external libraries. We need to add it internally if we agree to use it

  • Private variables and functions should be defined outside callback function

  • Spice.failed() should always be called when stopping execution prematurely

  • If the code needs to exit (e.g. the API response is missing required information) it must call Spice.failed(), so other Instant Answers are able to display

  • Experimental and browser-specific methods are not allowed. We need to ensure a consistent experience across all devices and browsers

    • We support IE 9+, Edge, Chrome, Firefox, Safari, Opera, etc.

  • Will any code break if the API response is undefined?

    • Make sure objects exist before accessing nested properties

    • You can use DDG.getProperty() to get properties which may undefined (e.g. DDG.getProperty(my_obj, ''))


  • Is there any custom CSS?

    • Custom CSS should be kept to a minimum. We prefer none, if possible

  • Are all CSS rules name-spaced?

    • None of the CSS should be able to affect other Instant Answers or page elements

  • Font-colour, font-size and font-family should be defined by template variants, or our DDG classes (e.g. .tx--14, .bg-clr--grey, .tx-clr--green)

  • Template padding and margins should not be modified

  • Experimental and browser-specific methods are not allowed. We need to ensure a consistent experience across all devices & platforms

    • We support IE 9+, Edge, Chrome, Firefox, Safari, Opera, etc.


  • Is a test file included?

  • Are all example queries covered by tests?

  • Are there tests for queries that shouldn't trigger the IA?

    • Make sure edge cases and false positives are handled correctly


  • List of dictionary words as triggers should be avoided (i.e. generic or ambiguous words that don't indicate search intent)

  • Use word/phrase triggers unless regex is absolutely neceseary

    • Regexes should only be used when matching specific patterns or types of characters (numbers, unicode symbols)

  • Trigger words must be lowercase

Cheat Sheets

  • Make sure the description is not redundant

  • Is the spelling correct?

  • "Title Case" should be used for name and sections

  • "Sentence case" should be used for description and explanations

  • Ensure the CheatSheet.t test passes

  • Use JSONLint to check the file and the text format

  • Every key, value and section should be filled; There should be no blanks.

  • Are there less than 200 lines of JSON?

    • Cheat sheets should be easy-to-read, quick references


  • Does it look good on all 5 major browsers and mobile?

    • Chrome, Safari, Firefox, IE 9, IE Edge

    • Android, iOS, iPad

    • There should be no breakage when the page is resized

  • Does it look good across all DDG themes?

    • Check especially the default and dark themes

  • Do all actions work both on desktop and mobile?

    • There shouldn’t be “desktop only” behaviour (e.g. rollover/hover effects) that can’t be used on mobile

IA Pages

  • Does the IA Page specify the correct Perl module? (e.g DDG::Spice::MySpice)

  • Is the Instant Answer type field (i.e. Spice, Goodie, Fathead, Longtail) correct?

  • Is the ID correctly formatted and matching the filenames?

    • ID's must be lowercased, and words must be separated with and underscore (_)

    • You can see the ID from the IA Page URL, eg in the ID is "mdnjs"

  • Is the Pull Request listed in the IA Page?

    • If not, ensure the ID specified in the PR description matches the IA Page ID

  • Is the IA tab name taken from our list of Topics?

    • It should not contain any brand names and should be generalized to a larger topic

  • Does the IA Page have the correct topics (language topic, eg "JavaScript", and category topic, like "Reference")

  • Is the maintainer field filled in? Is that the correct person?


  • Does it have a source ID?

  • Does it have a Perl Module matching the ID?

    • Although the file won't exist, we currently need a defined Perl Module (e.g. DDG::Fathead::MdnCss for ID mdn_css)