All software development starts with research. Starting a software development project without research is like embarking on a journey into dangerous territory without a map.
The first step is to identify what the current market offers your potential customers and how your product fills a need in that space.
What problem does the software solve? Who is the competition and who are the likely users?
Have you evaluated the need or desire for your product outside of your own circle? Market research should include real data from a sizable pool of potential customers.
Design research deals with the qualitative aspect of your software. It starts by taking steps to learn as much as you can about the needs and expectations your customers have about your product. This information can then be used to determine a design direction for your product, or more specifically how certain parts of your software (interactive controls, calls-to-action, etc) might be structured.
Before making enhancements to existing projects it is important to examine how existing users are interacting with the product.
We talk to representative users and ask questions about their experience with the software. For example, what features do they like, and what features would they like to see in the future? What difficulties have they had interacting with the software product? This information helps our development team to plan and prioritize.
We observe representative users in action to see how processes can be streamlined to support their use cases.
Are the features advanced? What technologies seem promising? What pitfalls exist? Which tried-and-true methods are appropriate?
Building a prototype can greatly help minimize risk on a complex project.
By prototyping rough versions of key features in advance the feasibility of an overall development direction for a project can be ascertained early and risk can be mitigated going forward.
Funding a prototype makes known some unknowns.
Production work is ideally bulletproof and finished in fine detail. It's expensive to answer the question "Can we even do this?" at production fidelity on production budgets and timelines. This is where prototyping is helpful.
Requirements are rigorously examined to determine the outcome of the upcoming development cycle.
Our design team can work with you whether you already have design assets or need to start from scratch. We listen closely to what your team envisions for a look and feel, as well as make sure that we understand the competition in your space.
We aim to produce a cohesive design system composed of modular, dynamic components. If you have purchased web design before, you may have received flat mockup images of what your site or app should look like at desktop and mobile resolutions as the entire design output. We have found that this approach doesn’t account for the realities of responsive web design or provide adequate guidance for the visual implementation of any pages or features that were not in the initial brief.
Instead of simply producing mockups for all views, we create a comprehensive design system of modular, dynamic components. What does this mean? Instead of working with fixed, flat images, we build a custom library for each project consisting of interactive elements, a CSS style guide, and a page framework. It’s important to consider pages in terms of their elements, since the way pages translate over various devices is complex.
Simply providing a picture of what a front-facing page looks like on a desktop or mobile device really doesn’t provide a good foundation for creating content that is maintainable over various devices. Any issues with how interactive elements, contact forms, etc. look and function at various screen widths should ideally be discovered and corrected in the design stage - not halfway through the implementation.
The implementation process is structured into cycles or sprints with discrete objectives and deliverables. Our delivery schedule balances immediate results with the need to track long-term project goals.
We strive to deliver clean, endurant code that serves the immediate need while also providing a stable foundation for future development.
Testing serves to answer two questions - "Is it done?" and "Does it work?"
No software development project is complete without a rigorous testing regime to validate progress and ensure the quality of new releases.
We employ both unit and integration testing to validate the output of our development process.
Taking the time to write and maintain a robust suite of automated tests is essential in order to successfully deliver a complex projects.
Software is often built in layers. With a layered approach substantial early work will need to be done in lower layers, far away from user interaction. Without a test suite, those layers cannot be validated or considered complete until the higher, user-facing layers are done and real users can test them. This has the unfortunate side effect of higher level work being built on an untested foundation.
User Acceptance Testing
We make the features available to representative users prior to wide release and either collect their reports or observe their usage patterns to determine whether or not the new development meets user experience objectives.
We perform exhaustive testing of the entire interactive surface of an application at regular intervals to ensure that the implementation conforms to expectations and to guard against regressions.