Working in an engineering organization has exposed me to a wide variety of processes, technologies and practices. The interesting thing is after years of viewing these processes at the micro-level view of software development for a specific program or product, by stepping back and looking at a macro-level, it becomes apparent that the same lessons can be applied to life.
So how does software engineering relate to life you’re probably asking? Well in the next two blog posts totaling 10 principles, I will describe how these lessons can be applied to setting and reaching goals, avoiding boredom, measuring progress, and increasing your results. These techniques can be applied to anything from losing weight, improving physical fitness, making more money, traveling, etc.
So what are the first five principles and how can we use them to better ourselves? Let me list the principles here first.
1. Develop Your Product in Sprints
2. Maintain Source Control
4. Develop to Your Requirements
5. Hold a Design Review
1) DEVELOP YOUR PRODUCT IN SPRINTS
In the software development environment today, one of the prevailing methodologies is what is known as Agile development. Specifically I am referring to “Scrum” which is the leading Agile process. In Scrum, teams develop software products in what are known as “sprints” which are usually 2-4 week cycles. So what does this have to do with life?
One of the biggest problems people complain about is not having enough time, or that it takes too long to accomplish a goal. Need to lose 25 pounds? On average it could take 3-6 months. Need to save $1,000? Same thing. But what if you were to break your goals up into smaller, more manageable “sprints”? Instead of seeing the big hurdle of trying to lose 25 pounds in 3 months, what if your goal was to lose 4 pounds every two weeks? That’s a much more manageable and easier goal to reach! By completing a small series of “sprint” cycles the obstacles is much smaller to overcome and your sense of accomplishment and pride increases as your reach your goal for each sprint!
2) MAINTAIN SOURCE CONTROL
Anyone who has ever developed any kind of software knows one of the most critical processes is to maintain a system of version or source control. What this means is you maintain a history of your code and track how it develops over time. This way at any given moment, you can go back and look up the history and see the particular configuration of what a system or product line or component looked like.
So what the heck does version control have to do with me you’re probably asking? SIMPLE. How do you know where you’re going in life if you don’t have a baseline or benchmarks to measure from? If your goal is to work out 3 times a week and add 10 pounds of muscle, and lose 10 pounds of fat, did you measure yourself before you began? What if your goal is to begin investing in the stock market and earn a 10% rate of return in a year? What if you want to be able to run a 5K (3.1 miles) in 25 minutes flat?
Did you take a body fat percentage measurement before you began?
Did you measure and record what your max lift was in say the bench press, squat and curl?
What is your starting amount of money before you begin investing?
Have you marked off a 5K course and timed yourself running it?
Without a starting benchmark and without recording your progress every day or every week and setting milestones to measure whether your performance is improving or declining or staying the same, how will you ever know if you’ve reached your goals? This is a CRITICAL task and you should get in the habit of recording your progress in whatever area(s) you deem important. Write your times or lifts in a notebook. Store them on your smart phone. Write them on a chart on your bedroom wall. Do something, but record your results and maintain source control over yourself!
When designing or developing software, engineers typically will group common functionality into subroutines, functions or modules. All are similar terms for describing basically the same idea. More recently, in object oriented programming languages such as Java, C++, C#, etc., code is organized into classes. Whatever you choose to call it, the idea is the same. By breaking up large tasks into smaller modules, it is easier to code, debug and make functionality generic so it is easily callable and repeatable.
The same concept can be applied to any task you choose to take on in your life. Let’s say you choose to get in shape by exercising more and eating right. You’ve measured where you currently stand in terms of performance or body composition. You’ve written your goals, and have signed up at a local gym. You can “modularize” this task by setting a habit of packing a gym bag each morning and on your way home from work, going directly to the gym, rather than going home first or someplace else. Just like brushing your teeth or getting dressed in the morning, by setting simple to follow, consistent habits, you are breaking up a large task like getting in shape into smaller, manageable routines which you can do easily each day.
Let’s say your goal is to begin investing. You can set up a routine for yourself, of scanning the newspaper business section each morning for 10 minutes at breakfast. Maybe then you set up automatic debiting into a brokerage account from your bank account on a weekly basis of some fixed amount of money. Then each night after your workout, you do 30 minutes of research into a couple of companies you may want to invest in. Then twice a month you buy a number of shares in your brokerage account. This may not seem like much, but by establishing a repeatable investing “module” for yourself, a large task is broken down into manageable size.
You can even consider organizing your “modules” on a wall chart, desktop calendar or some other visual aid to help yourself stay organized at a glance. Use your imagination to determine how best to code your life.
4) DEVELOP TO YOUR REQUIREMENTS
Before undergoing any kind of design project or writing a single line of code, a company or a project team will ask their customer “What are the requirements?” This is a vital step because the software that is developed and the end product are all designed to meet and fulfill those requirements. The code you write may be the smoothest, most efficient code ever written. The product may have all the bells and whistles in the world. But if it doesn’t meet the customer’s requirements, it’s all for nothing and the product will be a failure. Suddenly your business is now out of business!
So in the areas of lifestyle design or personal improvement, it is key that YOU ask yourself as your own customer, “What are my requirements?” What do you want to do with your life? What goals are you trying to meet?
The first step you need to do is write down what your requirements are. Ask yourself and write down the following:
MY PERSONAL, PROFESSIONAL AND FINANCIAL GOALS ARE TO…
- Lose 25 pounds
- Learn to speak a foreign language
- Take an exotic vacation overseas to China and Italy
- Pay for your kids’ college education
The next step is to then plan how to develop to your requirements. If you want to lose weight, you need to write out a personal fitness and diet plan for yourself or contact a personal trainer. If your goal is to learn a foreign language, take a class at a community college or purchase learning software. If you want to take a trip, seek out a travel agent or begin browsing travel websites and researching trips. Or go to the library or video store and borrow travel DVDs so you can get yourself excited about the destination you want to go to! By taking some action, you are taking small steps to fulfilling your own life “requirements”.
5) HOLD A DESIGN REVIEW
After getting the customer (YOU) requirements, and starting to put together your plans of how you are going to meet your goals, at some point you need to pause and hold a design review. In the software world there are various types of reviews held, but the main purpose is to make sure that what is planned to be implemented, whether a smart phone app, a website, embedded software or a GUI application, can be done in the time allowed, with the resources available, and within the capabilities of the team.
So for yourself, after you’ve written down your own personal “requirements” and begun planning how to accomplish these goals, at some point you need to step back and review your plan. Ask yourself the following:
Should some of your goals take priority over others?
Do you perhaps need to adjust the time frame of your goals?
Should you perhaps pay off some debts before saving for an exotic vacation?
What processes can you put in place at your job, at home or with friends to help you accomplish your goals?
- Perhaps setting up automatic transfers to a retirement account your employer matches or a money market account you won’t touch will help you financially.
- Maybe you organize a fitness group at home or work to exercise with friends.
- Join a volunteer organization of similar minded individuals to learn new skills, hobbies, or meet traveling companions.
After reviewing your plans, take whatever corrective steps are needed to modify your approach to meeting your goals and get yourself back on track or moving in the same direction quicker or in a more efficient manner!
There you go! The first five steps to applying good engineering principles to organizing and improving your life are yours. In the next post, we’ll discuss the remaining five principles to applying engineering practices to your lifestyle design. Until then… start developing!!!