Every now and then you read an article that reaffirms the work you do. We recently experienced this after reading Seth Godin’s post titled “Interesting problems.”
This is what we love about our work. Every day we get to solve interesting problems using new techniques, tools, and technology. We enjoy our work so much that we often find ourselves lost in the flow of it, with no sense of time. Before we know it, the day is over and it’s time to head home and play with the kids.
This is not to say that our work is straightforward, however. To give you some idea of the types of interesting problems we encounter, let’s consider building a house. While this isn’t the best analogy for explaining how custom software is built, there are some similarities.
Without a good blueprint, a house can end up with corners that don’t hit at 90 degrees, seams that show in the drywall, and, even worse, plumbing or heating and cooling problems. We believe that much like building a home, solving interesting problems during software development requires a good set of tools and an overall blueprint for success.
When developing software, interesting problems require us to think about and answer questions like the following:
- Underlying goal
- What is the problem we’re trying to solve?
- How will our solution solve it?
- What features do we absolutely need to solve the problem?
- What is the hard deadline for implementation?
- Is ours the most cost-effective solution?
- Ongoing maintenance and technical debt
- Where will the project be hosted?
- Are there risks associated with the frameworks we’re using and/or the code we’re writing? What are they? How can they be mitigated?
- Who are the users of the system? (Our client may or may not be the one who actually uses the software.) What do they expect?
- Does the site or app need to be accessible to those with vision, hearing, or other impairments?
- What happens if the site or app goes viral? Will the hosting environment handle it?
- Will there be an ongoing user base that evolves and grows?
- Available technology
- What solutions make sense—mobile app vs. web app, cloud hosting vs. dedicated hosting, open source vs. third party, design vs. build?
- How will the solution adapt to the changing technical landscape?
- What data needs to be protected?
- What are the risks associated with opening this system to the world?
None of these questions is inconsequential, so we have to slow down, reflect, consider all our options, and communicate clearly with our client. Then, together with the client, we determine which solution is best.
Even with a blueprint for success, what we thought was the right solution sometimes turns out not to be ideal. When this happens, we have to iterate in an organized and well-thought-out manner to solve the problem. That’s ok, though, because the thing that makes “interesting problems” interesting is that there is no manual and no cookie-cutter solution. It’s challenging and we like that.
With a constantly changing technical landscape, more technically savvy users, and unique requirements for every project, our work is ever-evolving and more interesting each day. And, for that, we are thankful.
Do you have an interesting problem you’re trying to solve? Let’s talk! We’d love to help!