Building Apps Efficiently
Anyone who has invested the time to develop an application knows that it is a very time-consuming (but rewarding!) process. In general, our process at MichiganLabs looks something like this.
- Customer approaches us with a grand idea or a problem that needs solving
- Constant collaboration with customer and our design team to create a beautiful UI/UX design
- Software design begins
- Software development begins
- Continuous testing
- Present app to customer
- Make alterations/improvements based on feedback
- Release awesome app
Depending on the complexity of the app, from start to finish, these steps typically take anywhere from 18 to 36 weeks. That is a long time in today’s world when technology advances by leaps and bounds on what seems like a daily basis; that’s not even to mention the other guy who has a similar app idea and is working overtime to get it to the app store first. Circumstances like these are the reasons why it’s so important to be as efficient as possible throughout the whole app development process.
“So what does MichiganLabs do to be efficient throughout this whole process?” I’m so glad you asked! Let me show you an area where I think we really excel at being a productive development team.
Communication / Preparation
As a team, we follow many of the Agile Development ideals/processes and it is one of the main reasons why I think we are such a productive team. Not only does it keep us focused and divides our work into manageable chunks, but it also keeps the most important person (the customer) involved along the way. I will not be explaining WHAT agile development is, but rather HOW we use it as a powerful tool.
Developing an app takes coordinated effort from the entire team, including the customer. There is nothing worse than coding for a week and having to throw it all away because you thought you knew what the customer wanted but the customer had something different in mind. Or you and a coworker began coding two completely different components of an app but realize two days later that you’ve both written nearly identical functions [to save/restore data] which took you each a half day to write.
In order to be successful, it is important to both plan and have good communication. And no, I’m not talking about the conversations being held around the water cooler but rather collaborative conversations that aid a team to reach a common goal. As part of the agile development process, we are given opportunities to plan and communicate in multiple instances throughout the week.
The first instance is “Sprint Planning” which we take part in every Monday morning at 9:30am. As a group, we gather around a large flat screen TV and screen share the backlog of our current project managed by Jira. Sorted by priority, we pull tasks into a sprint; all the while attempting to resolve any open questions and plan for any challenges that may occur. Once we have agreed on an obtainable amount of tasks for the week-long sprint, the sprint begins. This weekly event is a great mental and physical “reset” and puts all of us back on the same page with a clear vision of what’s ahead. In a more recent experience, the “reset” part is especially helpful after having a week that may have been a little less productive than desired. It’s a nice way to let bygones be bygones and to move on with a clean slate.
Another example of planning and effective communication throughout our group is a similar but much shorter daily event called “Stand Up”. Every day (except for sprint planning days) at 9:30am, we stop typing on our keyboards and literally stand up (*gasp*), face each other and take turns talking about what we worked on yesterday, what we plan on accomplishing today, and what (if anything) is blocking us from completing that task. This helps us to flesh out the daily, high priority items before they become an issue and block someone else from accomplishing their task.
Finally, around 3pm at the end of the week, we once again gather around the TV for a “Demo/Retrospective”. Typically in the agile development world, a demo would be given to the customer. However, we also find it beneficial to present to ourselves. This may seem a bit silly at first, but because most apps have a backend, web interface, and (obviously) the native app, having a different individual present the progress that was made in each of these areas helps everyone get a sense what state the project is currently in and what areas need attention in upcoming sprints.
Less structured communication happens throughout the week (either in-person or using HipChat) for individual discussions/questions/opinions or on-the-fly decision making as a group.
These processes and tools are extremely valuable for us as a team to stay connected to each other and the goals for the project. Because of the conscious effort we put into preparation and communication, we are able to make better use of our time by working together efficiently, leveraging each other’s code, and obtaining insightful feedback in the midst of development; which ultimately meshes together to add to the value and success of the project.