I was inspired to write an article about focus and maintaining a Minimum Viable Product First mindset after realizing that in many of my group projects, people were struggling with this. I would not say that I'm incredibly good at this either, however I do believe that it is something I have improved upon greatly over the last several years. I hope that I can offer some advice that might be useful for those who struggle with this. It's a constant work in progress for me, and I expect it will be forever.
The mind is a new dog tugging on your leash as you try to walk it. It wants to smell every flower, chase every butterfly, and pee on every fire hydrant. It is zig-zagging back and forth as you try to walk it in a straight line. It is stubborn. You have to train it to make it better.
Focusing on the task at hand and blocking out distractions can be difficult. I think this is especially so when you are learning new things you are passionate about. You want to explore and learn everything. In the context of a project, there is often times a concrete goal you are working towards, and diving too deep down a rabbit hole can be very detrimental. Realizing you are heading down a path which is not optimal for the task at hand requires self-awareness.
The Focusing Question Strategy
The ability to course-correct earlier on can be very valuable as a software engineer, and can drive productivity. I am a big fan of the book The One Thing by Gary Keller. In the book, Keller discusses focusing on the most important thing by asking yourself what he calls "the focusing question". Basically, it goes like this: "what is the one thing I can do right now which will make everything else easier or unnecessary?" Keller argues that if you consistently work this focusing question into your day, it can be a powerful tool to focus on what is most important. I believe him. Try to ask yourself this when you feel like your mind is wandering or you are exploring too many things.
Improving Focus through Mindfulness Meditation
Another proven way to improve the ability to focus is through a daily meditation practice. This might sound a little opinionated or "out there" to some readers, but at this point, there is way too much scientific evidence to ignore the powerful benefits of meditation. Some of them include: reduced stress, increased sense of well-being, increased empathy, improved focus, improved memory, improved creativity, improved decision making ability, improved cardiovascular health, and reduced physical and emotional pain. This is pretty crazy, right? There are a ton of benefits and a lot of research has been done lately which supports all of these claims. Check out my source, which contains links to many research articles.
You can get started by just spending 10 minutes a day meditating. At this point, it is kind of crazy not to do it. Just go do it! Some awesome apps for easily getting started are headspace and calm. If you want to read a great book to get introduced to meditation, check out this article by 10% happier author Dan Harris.
Having an MVP mindset when working on software engineering projects is very useful. I have noticed many peers struggling with this idea. You may have experienced this before. Somebody wants to talk about how the app should use AI and natural language processing to provide smarter search functionality before the app even has any working search at all. Maybe someone wants your app to reward it's top users with free espresso before a user profile and ranking system is even implemented.
These sorts of tangents can cause lots of wasted time and can make features take much longer to get implemented in an iterative sense. You should always think of anything you are trying to make in terms of MVP. Ask yourself "What does the bare minimum of this implementation look like?" And work towards that. Block out the stretch goals and nice-to-haves until you reach that point of working basic functionality. Oh and, once you get there, COMMIT! Make sure any small measurable steps forward are committed and a snapshot of your code base exists for this state before moving on to improve the implementation.
In my opinion, working in an MVP first way is also a lot more fun, less stressful, and easier. It means you are pushing new working features and improvements much more frequently. This makes it feel like things are getting done, and has many other benefits as well. If you are on a short time frame or have to present your work soon, working MVP first allows you to ensure basic implementations are done early and improvements are done often. Rather than trying to make a flashy user profile with the best UX and most elegant controls, just make an ugly thing that kind of works. This way, if you run into roadblocks in adding some future improvements or features, you are ensured that you have a basic implementation done early on. This reduces stress, is more efficient, and allows for easier code branching to work on two different implementations or concurrent feature adds. MVP first is the way to go!