Create an app outline

Specify how your app should work. With an outline, an Afterpattern developer can quickly deliver a prototype of your app.

What an outline includes:


A variable spreadsheet; and


Copies of the documents (if any) your app is going to auto-populate with labels indicating where the variables will go.

What an outline does not include:

Explainer text

Images or videos

Style choices

These things are important but they can be added later. The purpose of an outline is to build a functional prototype of your app.

In this guide:

Background: An intro to variables

The essential purpose of your outline is to describe what information is required to populate your chosen document templates. Each piece of required information is known as a "variable."

How do you identify a variable? i.e. how do you identify all the pieces of information your App needs to collect in order to populate its document templates? 

The answer: look at your documents.

Sometimes, it's obvious from looking at your document what pieces of information are required. For example, to populate this section of a document it's obvious the App needs to collect the end-user's name and an address:

But what about this section: how does the App know where to populate the end-user's name? 

Does the name go on top of "Petitioner" or "Respondent"? To answer that question, the app requires an additional piece of information: the end-user's role in this legal matter.

The lesson here is that not every piece of information your app requires is a "blank space" on the document template itself. Sometimes, your app requires meta information which is then used to populate a "blank space" with another variable.

In the example above, the variable 'user_role' is a meta piece of information that is used to determine where the variable 'user_name' will be populated, i.e. above the line for "Petitioner" or the line for "Respondent."

Part 1: Variable spreadsheet

The variable spreadsheet is a list of all the information required by your app in order to populate your chosen document templates.

Get started by downloading this spreadsheet template.

The spreadsheet has two tables:

Table 1 is where you'll describe those variables that are defined by asking the end-user a question. This is how most of your variables will be defined.

Table 2 is for describing variables that are defined by logical reasoning or by pulling information out of a database.

Table 1: Question Variables

Add each variable that you want to define with a question. For each variable, you can include the following information:

Block ID#

Each page of your App is known as a "Block". A single Block can include multiple questions. Use this column to group questions across multiple Blocks.

What's your question to the end-user?

Most variables will be defined with a question. For example "what is your name?" or "how are you going to deliver these documents to the other party?" (note: you don't need to be so verbose; oftentimes, question labels can be as simple as "name"). 

What type of question is this?

Different types of questions are appropriate for different types of variables. For example, if you want to ask the end-user "do you have any children?" a 'True/False' type question is more appropriate than a 'Short Text' question.

Some important notes about question types:

  • 'Short text' questions are appropriate for phone numbers, fax numbers, etc. Only use 'Number' type questions if you need to perform mathematical calculations on the value. 
  • 'Radio' allows the end-user to select only one option. 'Checkboxes' allows the end-user to select more than one option.

If this is a radio or checkbox question, what are the options for answering?

If the question type equals 'radio' or 'checkbox', use this column to list the multiple choice options. Separate each option with a comma. 

Variable label

Coming up with a good variable label is a subtle but important step. Although the only rule is no symbols, we recommend using prefix + underscore to indicate when a variable is part of a group (e.g. user_name, user_phone, user_address).

✅ Excellent variable labels

  • user_name
  • user_street
  • email_delivery

❌ Bad variables labels

  • name (not specific enough; whose name?)
  • StreetAddress (don't include uppercase letters; use underscores to differentiate words)
  • Email delivery is true (this combines a variable label, email_delivery, with a value, "is true". The purpose of a variable is that it can have multiple values. Don't use a variable label that assumes a specific value).

Is this question asked conditionally? If so, when?

Not all questions have to be asked of the end-user. For example, you may only ask the end-user for their spouse's name if they indeed have a spouse.

If you want to conditionally ask a question, use this column to communicate when that question should be asked. There is no wrong way to write this logic; try to be as clear as possible. 

Additional notes

This is a catch-all for any comments / notes you'd like to add. For example, if you want to conditionally display some text depending on how the end-user answers a question, you would describe that here.

Does this question repeat?

You can ask the end-user the same question multiple times. This is the best way to collect information about an undefined number of people/items/things.

The classic use-case for repeating questions is collecting information about the end-user's children. For example, you can have a Block that asks for a child's name and date of birth, and then you can allow the end-user to repeat over that Block for each child they want to add:

In the above example, the questions 'Name' and 'Date of birth' are repeated. 

Table 2: Logic Variables

Although questions are the most common method for defining variables, it is not the only method. There are two other options for defining variables:

  1. Logical reasoning: You can create a variable whose value is the product of a logical equation. You can use other variables in this equation.
  2. Pull information from a database: You can attach a database to your App. In this database, you can store information which can be used to define variables.

Example of logical reasoning: The variable ‘Petitioner’ can be defined by two sets of logic depending on the user’s path: 1) if ‘how-paternity-established’ is “The father signed a Paternity Affidavit” then ‘user_name’; or 2) if ‘user_role’ equals “Petitioner”, then ‘user_name’, else ‘other_parent_name.’

What this is saying is that 1) if the user selected “The father signed a Paternity Affidavit” then ‘user_name’ is automatically the Petitioner; or 2) if the variable ‘user_role’ (which should be defined elsewhere in the App) equals “Petitioner”, then ‘user_name’ equals ‘Petitioner’

Example of pulling information from a database: You could have a database with information about courts (address, phone number, etc). Imagine you then have a variable in your App called 'court_address'; this variable could be defined by looking up the appropriate court in your database.

Part 2: Document templates

Go through your document(s) templates and add a variable label for each piece of data you want to populate, including text, checkmarks, and signatures.

For PDF templates, use the Adobe Acrobat 'prepare form' feature to add labels to the PDF fields:

For Word templates, designate a variable by wrapping it in double brackets, e.g. {{ user_name }} or {{ user_street }}: 


How to find your variables
Example outline

Contact us

We can help you start your outline.

Schedule call now