Timeboxed programming
For each iteration, you need to decide how long it will take and what features will come with it. As you have seen in Chapter 4, An Agile Workflow in a Nutshell, a typical sprint takes 2 to 3 weeks. Although this may be difficult at first, you will learn soon enough what you and your team members can accomplish during such a sprint. Sometimes you will have no clue how long the development of a feature will take. In that case, a timeboxed approach can help you as well. Before you start working on that feature, you allocate a particular amount of time. Afterwards, you can determine what you have accomplished and you can decide whether the feature can be released as it is. Even if it is not completely functional, as long as it contains no (severe) bugs, it can help you to get early feedback.
Keep things simple and develop only the features that you actually need for that particular iteration. You should ask yourself what it is that you want to prove and what feedback you need in order to proceed. Again, it is important to realize how relevant that feedback is when you look at your app's current phase. For example, you should not be focusing too much on the development of In-App Purchase functionality if the base functionality of your app has not been completed yet.
"You Aren't Gonna Need It", also known as the YAGNI acronym, is one of the ideas behind Agile development and extreme programming (XP), but it does apply here as well.
The goal should always be to achieve maximum learning with the least amount of effort. Also, keep it simple and solve one problem at a time for one product and for one type of customer. As a developer, you will often foresee scenarios that need to be supported, the so-called unhappy flows, but who cares about them if the happy flow is not ready yet?
Consider the scenario where the idea of timeboxing involves the focus more on the time spent instead of the tasks done. So, instead of thinking of features that should be done in a particular amount of time, think of a particular amount of time and what features you can implement given that amount of time. To maximize learning, the changes that come with each new release of your app should be as small as possible while still delivering relevant business value. Timeboxed programming is essential to make sure resources are delivered in a particular amount of time. Determine deliverables and a deadline for each timeboxed iteration. Using this methodology, your productivity will be improved and you can keep the promises to your customers.
In general, get to know your (potential) customers. Learn more about their problem. It is the problem your app needs to solve. This may sound like a job for your more business-oriented cofounder, but a better understanding of this also makes you a better developer. Ask questions and find out what the common problems are for all of your customers.