Skip to main content

Finance For Software Developers

Back at the start of 2016 I set about sorting my personal finances out, inspired by Soft Skills. The book makes a point to consider passive income as a viable solution to wealth building. The reason for this is simple, software developers tend to get paid well if working professionally. Like most professionals though, during school or university you won't be guided on how to handle money until you are thrown into the deep end.

Assets and Liabilities

At the start of February we listed all our assets versus liabilities and were rather shocked. Our net worth (assets minus liabilities) was negative. Not only was it negative, it was negative by a rather large number. This scary realisation forced us down the path of personal finance. Most of this knowledge came from a handful of books and took no more than a few months to really get to grips with the basics. For the small cost of a few books and your time the return on this investment is huge. In summary you want to maximize assets (things that give you income) and reduce or eliminate liabilities (things that take your money away) as much as possible.

Investing

Despite knowing nothing than the basics of the stock market and investing, investing in stock (sometimes known as equities) is one of the ways to maximise assets. Again a few simple introductory books and some online research was all that was required. Having explored individual stocks, we settled on low cost index funds as our main investment solution. Before we could invest though we had to attack our debt. Without eliminating the debt we were unable to maximize our investments. Paying off debt is also considered a guaranteed return, something you cannot get with investments, hence it should be your first target.

Debt

Attacking debt took up the whole of 2016. Thankfully there was an easy system to follow. The difficult part is sticking the course, though you will quickly start to see benefits. The best solution we found is the debt snowball, which is part of Dave Ramsey's Baby Steps. Steps 1-3 must be completed in order, sequentially. While steps 4, 5 and 6 can be completed in parallel.

Baby Steps

  1. Save £1,000 in an emergency fund.
  2. Pay debts down from smallest to largest using the debt snowball method.
  3. Save 3-6 months of living expenses for a fully-funded emergency fund.
  4. Invest 15% of income into retirement.
  5. Start funding higher education for children.
  6. Pay off the mortgage early!
  7. Build wealth and give!

You Need a Budget

I was actually advised to create a stick to a budget by a friend while in university, however I ignored her wise advice. A budget is a crucial tool to paying off debt and in turn staying out of debt. The best budget to use with the baby steps is a zero based budget. In this case you run your personal finances like you would a company such as a bank. At the end of each month (or whenever you receive income) your balance should be fully allocated to equal zero pounds available. All of your money is either paying of debt or working hard in investments, while the rest is allocated to expenses.

A written monthly budget is single handedly the best piece of personal finance I can recommend to others. Once you tell your money where to go, and have a audit trail of where you are spending you have control. How we lived prior to a monthly budget is a mystery, though it does explain the shocking net worth we amassed. To be blunt, get and use a budget. You need to.

Retirement

Previously I thought of retirement as something you do when you're old. Think of your parents or grandparents. However this is not the case. Retirement is simply being able to do what you want to do, whether or not this includes work. Being able to wake up each day and do what you want is a powerful thing.

Another shock discovery was the fact that becoming financially independent in order to retire can be done in ten years, instead of the traditional thirty of forty year window. A whole community exists that prove this is the case - FIRE (Financially Independent - Retire Early). To summarise this process, instead of doing what the norm do and investing 10% of your income, invest 50%-90% and you can shorten the process dramatically. FIRE is a long term goal that requires minimized expenses and a strict budget, but the pay off will be more than worth it.

2017

Our personal goals for 2017 include completing our six month emergency fund, followed by aggressively paying off our mortgage, with the goal to complete this within two and half years versus the remaining twenty year window. Without the basic concepts above this would have not been possible.

Lessons

  • Eliminate all debt, and stay out of debt.
  • Create and use a monthly budget.
  • Use the baby steps to get out of debt and build wealth.
  • Low cost index funds are a recommended way of simple investing.
  • Retirement isn't a thirty or forty year process.
  • No one will teach you personal finance, it's up to yourself to get to grips with it.

Comments

Popular posts from this blog

Three Steps to Code Quality via TDD

Common complaints and problems that I've both encountered and hear other developers raise when it comes to the practice of Test Driven Development are: Impossible to refactor without all the tests breakingMinor changes require hours of changes to test codeTest setup is huge, slow to write and difficult to understandThe use of test doubles (mocks, stubs and fakes is confusing)Over the next three posts I will demonstrate three easy steps that can resolve the problems above. In turn this will allow developers to gain one of the benefits that TDD promises - the ability to refactor your code mercifully in order to improve code quality.StepsStop Making Everything PublicLimit the Amount of Dependencies you Use A Unit is Not Always a Method or ClassCode quality is a tricky subject and highly subjective, however if you follow the three guidelines above you should have the ability to radically change implementation details and therefore improve code quality when needed.

DRY vs DAMP in Tests

In the previous post I mentioned that duplication in tests is not always bad. Sometimes duplication becomes a problem. Tests can become large or virtually identically excluding a few lines. Changes to these tests can take a while and increase the maintenance overhead. At this point, DRY violations need to be resolved.SolutionsTest HelpersA common solution is to extract common functionality into setup methods or other helper utilities. While this will remove and reduce duplication this can make tests a bit harder to read as the test is now split amongst unrelated components. There is a limit to how useful such extractions can help as each test may need to do something slightly differently.DAMP - Descriptive and Meaningful PhrasesDescriptive and Meaningful Phrases is the alter ego of DRY. DAMP tests often use the builder pattern to construct the System Under Test. This allows calls to be chained in a fluent API style, similar to the Page Object Pattern. Internally the implementation wil…

Coding In the Real World

As a student when confronted with a problem, I would end up coding it and thinking - how do the professionals do this?For some reason I had the impression that once I entered the industry I would find enlightenment. Discovering the one true way to write high quality, professional code.It turns out that code in industry is not too far removed from the code I was writing back when I knew very little.Code in the real world can be:messy or cleanhard or easy to understandsimple or complexeasy or hard to changeor any combination of the aboveVery rarely will you be confronted with a problem that is difficult. Most challenges typically are formed around individuals and processes, rather than day to day coding. Years later I finally have the answer. Code in the real world is not that much different to code we were all writing when we first started out.If I could offer myself some advice back in those early days it would be to follow KISS, YAGNI and DRY religiously. The rest will fall into plac…

Feature Toggles

I'm a fan of regular releasing. My background and experience leads me to release as regularly as possible. There are numerous benefits to regular releases; limited risk, slicker release processes and the ability to change as requirements evolve.The problem with this concept is how can you release when features are not functionally complete?SolutionIf there is still work in progress, one solution to allow frequent releases is to use feature toggles. Feature toggles are simple conditional statements that are either enabled or disabled based on some condition.This simple example shows a feature toggle for an "Edit User" feature. If the boolean condition is false, then we only show the "New User" feature and the "Admin" feature. This boolean value will be provided by various means, usually a configuration file. This means at certain points we can change this value in order to demonstrate the "Edit User" functionality. Our demo environment could …

Reused Abstraction Principle

This is the second part of my series on abstractions.Part 1 - AbstractionsPart 3 - Dependency Elimination PrincipleThe Reused Abstraction Principle is a simple in concept in practice, but oddly rarely followed in typical enterprise development. I myself have been incredibly guilty of this in the past.Most code bases have a 1:1 mapping of interfaces to implementations. Usually this is the sign of TDD or automated testing being applied badly. The majority of these interfaces are wrong. 1:1 mappings between interfaces and implementations is a code smell.Such situations are usually the result of extracting an interface from an implementation, rather than having the client drive behaviour.These interfaces are also often bad abstractions, known as "leaky abstractions". As I've discussed previously, these abstractions tend to offer nothing more than simple indirection.ExampleApply the "rule of three". If there is only ever one implementation, then you don't need …