Glossary

A large part of discovery is helping you make informed decisions about your product. Here are some terms you may hear:

API (Application Programming Interface) - How computer systems communicate. - It is a standardized payload ( see JSON and XML ), with documentation around how the API operates. Well defined APIs follow standard conventions, payloads and response codes.

API Documentation - The documentation around how an API should operate, even though APIs should follow standard conventions this is the final glue and contract to the developers on how they should expect the API to operate. If you are providing a service that you want other companies to hook into, you will want to spend time investing in both strong API documentation and standardized APIs. Stripe, for example, has excellent API documentation - https://stripe.com/docs/api

API Versioning - As your product grows you will add more features; with this you will add new features to the API. For example, say you had an API that returned animals to the caller, and you initially had cats and dogs. In version 2, you want to also include rabbits and gophers. If you started returning rabbits and gophers in your version 1 API, then whoever was using it might not know what to do with these new animals! The solution is to version the API. Now you have the API for version 1 that supports people who only know about cats and dogs, but version 2 can also handle rabbits and gophers. The problem here is that since APIs are contracts with developers, now you must maintain both version 1 and version 2. There is a balancing act with planning for the future and premature optimization.

Agile Development - The process of building a product in short "sprints" (typically two weeks), to enable the delivery of constant testable pieces of code. This allows faster user feedback, and testing. There is the risk of scope creep if the user feedback for new and enhanced features is not controlled.

Backend - The code that powers the changing information or processes of the application.

Backlog - The backlog is a list of features or enhancements that are desirable, and to be built at some point in the future, but not at the present moment.

Build - A working set of code that can be delivered and used.

CD (Continuous Deployment) - Continuous Deployment allows for the system to be seamlessly deployed at will. Instead of having to have a developer on standby for each deployment, continuous deployment is machine standardization of the deployment process so the repetitive task of getting your code to the public is removed.

CI (Continuous Integration) - Continuous Integration is a process where builds are automatically made and verified against a set of standards. This includes test cases, code coverage metrics, and visual regressions, to name a few.

Clickable Prototype - a set of wireframes or high fidelity designs that are able to be clicked through to show the basic portions of an app. This will usually demonstrate a high level overview of the app’s user flows. It usually does not include error states, functions such as resetting passwords, or any live data/ data input.

Commit - A discreet update to the code which fixes a specific problem, or adds a feature update.

Environments - Different environments allow for testing and deployment of features in isolation. Your customer facing portion will be the “production environment.” The environment to test new features will be called “staging.” The environment developers will build new features in is called “development.” Depending on the complexity of your organization or project, you may have extra environments, such as for 3rd party integration testing. Features are typically promoted through environments so they can be tested at each step.

Framework - A standardized set of tools that allow for developers to not have to rebuild the wheel.

Frontend the visible portions of an app or website - (related) Frontend development - the process of creating the visible portions of an app or website, its interactions, and connecting the frontend to the backend.

Gantt Chart - A bar chart that shows which parts of a project will be completed and when.

Git / Version Control - Git is a type of version control system. It is arguably the best, most modern, and widely adopted. It allows multiple developers to change code at the same time and minimize impact of conflicting with each other.

Github - Github keeps your code in the cloud, and accessible by all team members so there is no data loss.

Hybrid Application - an application that is developed to run on more than one device type. For example, a hybrid application written in React Native can run on Android, iOS, and Windows devices.

JSON - Arguably the best way to pass machine information. It’s human readable. See example here - https://restfulapi.net/json-data-types/

Native Application - an application that is developed to run on a specific device type. For example, a native iOS application is written with a Swift or Objective-C frontend and will only run on iPhones or iPads.

PCI Compliance - Credit card compliance guidelines. - They govern how developers should handle and secure credit card information. Failure to follow the guidelines leaves the organization open to legal action.

Premature Optimization - Referred to in software development as “the root of all evil”, premature optimization is similar to scope creep, but with architectural decisions. It is optimization without full information. Say you wanted to build a system that allows you to keep track of how fast your dog runs - it takes distance between the dog’s legs, and how quickly they run 30 feet. Before we start building we then think “wouldn’t this be great if it worked for cats too?” Cats are harder to get to run, so we need to make the 30 feet a variable and do slightly different calculations. Then we say “but one day we might want this to work for humans,” so we need a different set of calculations for 2 legged creatures. This problem can play out on a much smaller level during software development, and can cause unnecessary drag. For example, this process takes 1 minute to run but we found a way to make it run in 4 seconds! However, the function only runs once a week - it’s not worth it the time (or money) it will take to make it run in 4 seconds. In addition to causing initiatives to take longer, premature optimization can also introduce unneeded complexity into a system. Knowing when and why to optimize is why it is very important to have a strong software architect.

Pull Request - A set of commits that a developer is requesting to merge into another branch of the code. Pull requests generally address a specific feature or bug fix.

Scope Creep - Scope creep is the addition of features, or increasing the complexity of features. This leads to delayed timelines and budget overages because there are now more things to build than orginally anticipated.

Software Architecture - You could begin building a house by laying a brick down, but it would be better to draw up blueprints. Software architecture is the process for making and updating those blueprints as the system is built.

Spaghetti Code - Straight from Wikipedia - “Spaghetti code is a pejorative phrase for unstructured and difficult-to-maintain source code. Spaghetti code can be caused by several factors, such as volatile project requirements, lack of programming style rules, and insufficient ability or experience."

Stripe - A payment system provider. It is one of many, and is one of the most commonly used payment system providers. Using Stripe (or a similar third party provider) cuts down on risks associated with PCI compliance in custom-developed software products.

Style Guide - A design element that is used as a reference point for future designs and for developers. It usually includes a set of colors, typography, and standardized icons, buttons,

Tech Debt ( Technical Debt ) - development that requires re-work at a later date. This is sometimes taken on as a known risk.

UI (User Interface) - what the user actually sees. - This consists of branding, logos, color schemes, fonts, and layout. The final UI designs will include the screens (or pages of a web application) for every portion of the app, plus different states (such as error states, success messages, incorrect password, etc.) for each screen.

UX (User Experience) - the user flows, steps, and basic layout of an application. Designing the UX is an integral part of the process of creating an app. It usually take place after discovery/planning and before UI design.

User Persona - A profile of a typical user of an application. - The exercise of developing a user persona is very helpful in the discovery/planning phase. It informs the key features of an application, as well as the branding, UX, and UI.

Waterfall Development - In contrast with agile development, waterfall development is the process of plannning out a project meticulously from the beginning to minimize risk and changes once the product starts. Waterfall is good for controlling cost and scope. The risk with waterfall is potentially waiting to long to put the product in the hands of users to get feedback.

Weighted Feature Set - Weighted feature sets are a great way to help determine which features should be built. Features are estimated with multiple variables ( typicially 3 - value to your business, value to your users, complexity to build ) and then given values of 1-5. We then combine these together to get a score. We're looking for the features to build that drive the most revenue, delight the most customers, and are cheapest to build.

Wireframes - A high level visualization of the screens in the application or website. Using the analogy of building a house, these are the blueprint phase.

Working Prototype - this can also sometimes be referred to as an Alpha or Beta version of an app. It will not be fully functioning for an end user, but will allow data exchange/processing, and will show the main user flows and functionality of an application.

XML - Less easily human readable than JSON, XML is an older data standard, that given the correct files can self validate which is helpful for complex data types.

Want to start your discovery?