2011 Wikimedia fundraiser/Requirements

This page is an attempt to present requirements for development for the 2011 Fundraiser. These are mostly CentralNotice tweaks. But there a few other things too. Fundraising Team: If you add requirements here, consider putting them in the form of user stories to keep them simple and clear.

Tech Team: Please move/change/re-write this as suits your purposes.

Central Notice
Story 1: As a banner coder, I want to be able to mark banners as “active” or “archived”, so that I can speed up my work and make less mistakes.

Priority: High

Story 2: As a banner coder, I want to be able to tag banners with multiple tags, so that I can categorize banners in a flexible way.

Story X: As a Central Notice developer, I want to be evaluate the usefulness of CORS as a banner delivery mechanism.

Story X: As a banner coder, I want to be able to automate testing of banners/landing pages with a tool like Selenium, so that I can ensure that banners/landing pages are thoroughly tested.

Search
Story 3: As a banner coder, I want to be able to search for banners using tags as criteria and see only those banners, so that I can do my work more quickly.

Story 4: As a banner coder, I want to be able to search for banners using a regex pattern for banner name, so that I can do my work more quickly.

Story 5: As a banner coder, I want to be able to search for banners using a regex pattern for utm_campaign, so that I can do my work more quickly.

Story 6: As a banner coder, I want to be able to search for banners using fulltext regex pattern matching against all banner code, so that I can find all banners that have the same bug or dig up a long lost bit of code that I want to reuse.

Story 7: As a banner coder, I want to be able to code and preview my banners on a page of its own where CSS from other (sometimes miscoded) banners won’t mess it up, so that I can do my work more efficiently and accurately.

Story 8: As a banner coder, I want to be able to set the utm_campaign for all banners within a campaign once by setting it for the campaign, so that I can do my work more quickly and with fewer errors.

Story 9: As a banner coder, I want to be able to override the campaign’s default utm_campaign at the banner level, so that I can create campaigns that use multiple utm_campaign values in exception circumstances.

Story 10: As a banner coder, I do not want to ever have to set the utm_source value for a banner but have it be taken from the banner name, so that I can do my work more quickly and with fewer exceptions.

Story 11: As a banner coder, I want to be able to set the utm_source of a banner to be different from the banner name, for exceptional circumstances.

Story 12: As a data analyst or campaign manager, I want to be able to see in a log when every and any change was made to all banners and their configuration, so that I can look back and see what really happened during tests and track down any data anomalies.

Priority: High

Story 25: As a banner coder, I want to be aware if I'm editing the source of a live banner (notice on top, different edit box background?) so that I can work quickly and with fewer errors.

Story 26: As a banner coder, I want to be able to recover a banner and campaign that someone may have mistakenly deleted.

Story 27: As a banner coder, I'd like to be able to quickly clone a banner without copying over all of the 100+ translations and ending up with an error page. Sometimes they just aren't needed. (Checkbox for translations?)

Story XX: As a banner meister, I'd like to use something like the Translation extension for mass translating banners.

Story XX: As a Wikipedia user, I'd like to be able to dismiss only banners in a certain "campaign group".

Story XX: As a banner coder, I'd like to not have to code banner hiding into each banner.

Story 13: As a volunteer or staff person, I want to be able to create new final-step donation pages (served by payment servers) and edit the following elements: 1. letter text, 2. headers text, 3. form field labels, 4. ask amounts, 5. default currency, 6. default country -- so that I don't drive my friends in the tech dept crazy every time I want a form tweak. (The form structure can be fixed if necessary.)

Analytics
Story 14: As a data analyst, I want to see country for all banner imps, landing page imps, and donation, for every donation -- so that I can answer any and all questions about country breakdown of donations and traffic.

Story 15: As a data analyst, I want to see IP address for all banner impressions, landing page imps, and donations -- so that I can do sub-country geographic analysis of donations and traffic.

Story 16: As a data analyst, I want the underlying structure of the raw data I'm analyzing to be finalized several months before the fundraiser starts, so that I can finalize and perfect my analysis and reporting practices during pre-fundraiser testing.

Payment Pipeline
Story 17: As a rational human being, I want to find an alternate payment provider for credit card transactions, because Paypal keeps f---ing s--- up!

Story X: As a operations engineering, I want to be able to respond to MaxMind fraud reports.

CiviCRM
Story 18: As a fundraiser, I want a contact's address information as recorded in CiviCRM to be trustworthy, so that I can reliably research and get in touch with donors.

Story 19: As a data analyst, I want a contact's address information as recorded in CiviCRM to be trustworthy, so that I can reliably analyze the geographical distribution of donations.

Story 20: As a developer, I want a contact's address information as recorded in CiviCRM to be trustworthy so that I do not have to go through the pain and horror of address cleanup.

Story 23: As a fundraiser, I want Civi upgrades so that our database is better and....

Priority: High

Story 24: As a fundraiser, I want clean records & duplicates to go away.

Story XX: As a fundraiser, I want my CiviCRM records to match what PayPal sees so that I can trust our data

Priority: High

Story 28: As a developer/fundraiser, I want more error-resistant queue processing for donations in ActiveMQ so that we prevent redundant entries in CiviCRM.

Operations
Story 21: As a developer, I want a monitoring and alerting system in place for key portions of the fundraising pipeline so that I can know as soon as possible that something has gone wrong.

Story 22: As an operations engineer, I want a secure, WMF-standards-compliant and easily administrable payments server infrastructure so that we can ensure security and scalability.

Story XX: As a Wikipedia reader, I want geoiplookups to be available securely.

Story XX: As an operations engineer, I want the various scripts in the payment pipeline to use a unified logging mechanism (eg syslog), so that managing the various logs (particularly across different servers) is easier.

Story XX: As an operations engineer, I want to be able to add new filters based on velocity for high risk transactions.