Will and BJ first met in college and have been friends ever since. You can tell this through their dynamic conversations. Will bring a wide knowledge base to the conversation through his years of experience as a senior developer and aspiring software architect. Whereas BJ being a journeyman developer is learning as he works in the field. He shares those lessons and more each week. Because of their varied experiences topics range from the technical to the every day life of a software developer. Whether you are just starting out or in the twilight of your career you'll find something useful and informative on Complete Developer Podcast.
There are plenty of podcasts out there focused on languages and coding. What we are doing with the Complete Developer Podcast is to also cover the other areas of life as a developer.
Long Term Financial Goals
If you aren’t broke and are reasonably comfortable (which is certainly possible with a software development job) then it’s easy to stop paying careful attention to your finances. However, many people in the industry find that not only are their finances tight, but that they have trouble saving for larger goals (such as retirement) and they often find that they are just a paycheck away from major financial problems. If anything, the last year SHOULD have taught you to seek more financial resilience in your life and to be better prepared than you were.
However, even the preparation is a struggle. Financial considerations are not “fun” to think about for most normal people, even though they are absolutely critical. Further, the amount of information out there about finances is often so extensive and complex that you’ll often struggle to figure out what to do next, even if you are otherwise sufficiently motivated. You may also find that your long term financial goals conflict with your short term desires (or even your living requirements). Financial issues can often highlight very uncomfortable situations in your personal life (such as a difference in worldview between you and your spouse). However, you still need to deal with this stuff, or you risk it becoming a problem at an inconvenient time.
Finances are one of the things that can improve or destroy your quality of life. They are also pretty easy to ignore if you are otherwise comfortable. However, if you don’t pay attention to them, financial issues can quickly wreck your plans and ruin your life if you let them. Managed properly, however, your finances can often allow you to achieve your dreams, retire earlier, or even make it possible to live a vastly different life than what you expected.
Build an emergency fund.
An emergency fund of 3-12 months worth of living expenses should be your number one priority. Not only does such a fund make it easier to deal with surprise expenses, but it can greatly improve your confidence. Essentially an emergency fund makes it possible to take some calculated risks that might otherwise be impossible. It also makes it easier to absorb surprise expenses, such as automobile expenses, or sudden taxes. If you are single and willing to cut expenses to the bone, you can get by with a smaller emergency fund. If you are older, have a family, or have a more specialized career path, you will probably want to have a larger fund. It all depends on your risk tolerance.
Track and analyze your expenses.
Tracking expenses is one of the best things you can do for your finances. Not only does it help you identify your actual spending patterns, but it can also help you detect issues such as fraud. Being aware of how you spend money can often change your spending habits for the better. Things like going out to lunch every day can really add up and you are probably not aware of what it is costing. Further, if you look at what you could have done with that money instead, you may well find a better use for it. Analyzing expenses isn’t just about reducing expenses. Rather, it’s about the value you get from those expenses. There might be something better you could do with the money.
Break down and prioritize your debts (if any).
While interest rates are low, debt is not the worst thing in the world, and can often be useful leverage, depending on what kind of debt it is. However, debt has to be managed. You probably should prioritize getting rid of at least some of your debt, especially if that debt isn’t particularly useful for your long term goals. For instance, credit card debt is often not used for things that actually significantly improve your life and has a high interest rate – you might want to prioritize getting rid of it. Debt prioritization is important,
Work anywhere for long enough, and you’ll eventually run into a micromanager (if you can’t think of one, maybe it’s you.). Micromanagers will show up at your desk all the time, asking for status updates, second guessing every coding decision you make, and even overriding your coding decisions, often in ways that are destructive to long-term productivity. It will quickly drive you nuts and make you want to look for another job. However, before you quit, it can often be worthwhile to see if you can change the way that you interact with your manager. If you do this correctly, your micromanager may turn into your strongest advocate. You already know they are relentless, so it’s worth considering.
We should probably define “micromanager” here, because people tend to use that term in a lot of situations where it doesn’t really apply. A micromanager is “a manager who closely observes and controls and or reminds the work of his/her subordinates or employees” (wikipedia). It’s important to note that a micromanager isn’t someone who asks for project updates when you are already behind, pulls you back from gold-plating something, or who reminds you of a critical deadline. A micromanager typically is someone who is overly anxious and controlling, which is reflected in their management style. It’s this understanding that is the most important part, because it gives you a way to counteract the behavior.
You are going to eventually deal with a micromanager and emotional, frustration-driven reactions will not make it stop most of the time. Instead, you are going to have to come up with ways to convince a micromanager that you are actually competent and that it is in their best interest to leave you alone. To do this, you have to get outside of your own head and into the mind of your manager. However, like most scenarios where you are trying to understand another person, you will never have a perfect understanding of why your manager is acting this way. Instead, you have to work with incomplete information and attempt to modify your manager’s behavior by changing your own behavior. While this can be time consuming and difficult, it is often worth doing, as reformed micromanagers can become some of your biggest advocates. Regardless, if you have much of a career at all, you will eventually run into a micromanager or two along the way – you might as well have a strategy for dealing with them.
Reasons People Become Micromanagers
Why micromanagement is a problem.
Constant reporting of status and watching over your shoulder instead of getting work done. Which leads to more monitoring/mismanagement and watching over your shoulder instead of getting your work done. Completely destroys morale among the team and encourages backstabbing behavior. This rapidly increases turnover. Tends to give the impression that your boss will throw you under the bus to protect them against their own boss. It also wastes management’s time, which is typically more expensive and should be used to help make the team more efficient.
How micromanagers are born
Oftentimes, it’s because it’s their first job and they don’t know what they are doing. Probably half of all new managers do this at some point. It can also start out of insecurity due to their own position being precarious, or that of the company in general. Management may know about things that you don’t and might be micromanaging in an attempt to protect you.
It can also occur because you, someone on your team, or someone at a previous employer of your boss was unreliable and had to be over-managed in order to get them to do their job. This can also a reflect a lack of knowledge on the part of your manager. For instance, if you get a manager who is not familiar with tech and is trying to ma...
Enneagram Type 2: The Helper
The Enneagram of Personality, or just the Enneagram, is a representation of personalities using a geometric figure, also called an enneagram (little e), to express nine interconnected personality types. While each type is unique it is related to other types through the circle connecting the type to each of it’s wings and the lines or arrows in the center connecting the type to the ones it imitates in times of stress or growth. The Enneagram is used in business management training to better understand interpersonal dynamics in the workplace.
Types Two, Three, and Four constitute the Heart Triad. This triad is primarily motivated by their feelings. Those in the Heart Triad are searching for a sense of personal identity. They are more image-conscious than the other triads. Within the triad, Twos outwardly express feelings and find their identity in others and the way others perceive them.
At their best Twos are deeply altruistic and humble. They have an unconditional love for others that is genuine and inspiring. They see helping others and being a part of their lives as a privilege. They are empathetic listeners who are able to get even the shyest of people to feel comfortable opening up to them.
At their worst Twos are insecure and resentful. They are able to rationalize resentful and manipulative behavior because they truly feel victimized and abused. Their self-deceptive nature leads them to see that themselves as self-sacrificing or helping when really they are manipulating in order to guilt others into giving them what they want.
This information is to help you understand yourself or those around you. Twos can be intense and a bit extra at times. When interacting with them understand that they do genuinely care about you and are trying to help. If they do get resentful or aggressive, be understanding with them as they will beat themselves up about it after they have calmed down or the stress has passed. If you are a Two or Helper, take a moment to think about your needs. You are aware that you have needs, but have pushed them back to focus on helping others. If your needs aren’t being met then you aren’t going to be able to help others as well as you could. It can be difficult to even admit that you need something. Find a trusted friend, you know you have plenty to choose from, and test out a simple need with them. Learn to say no or at least not say yes to everything.
Enneagram Type Two is “The Helper” or “The Giver”.
Twos are called the Helper because they are the most genuinely helpful of all the types. Even when they are not healthy they perceive themselves as helpful. A Two feels most complete when they are going out of their way to help others. Unfortunately for unhealthy Helpers this helpfulness comes with ulterior motives. They don’t even know they have these sorts of reciprocal expectations. When helping it is done out of true generosity, but when they do not receive help when they need it they feel resentment.
Twos see their own needs as something to avoid. They struggle to express their needs instead spending all their time focusing on the needs of others. Sometimes it seems they know what you need before you know it. Sadly they seem to think that expressing their needs will lead to heartbreak or humiliation. The Helper has an uncanny ability to sense or just know what others need. You don’t have to tell a Two what you require, they just know. They have problems, though, when they assume that everyone has this same ability. They are the best gift givers.
Twos love helping people, especially when they are down or need a friend. However, they are constantly afraid that once the person can manage for themselves they won’t need the Two anymore. It can be hard for a Two to accept that people don’t have to need them all the t...
Prioritizing the Backlog
“Priority is a matter of imminence whereas need is a matter of prominence.”
Your product backlog is the list of tasks, features, or items for your team to complete on a particular project or product. This could be on a new application you are building, one in which you are actively improving and adding new features, or even a maintenance backlog of tickets that need to be completed. You may have one large backlog for the entire organization or multiple backlogs, one for each product you support or are building. However your organization is set up you will need to know what items to work on next from your list.
Prioritization allows you to place items in a ranked order in your backlog so you know which ones are the most important that you need to do next. There are several different systems for prioritization from flat out ranking (1, 2, 3…) to placing items in categories, to complex scoring systems. Choosing the right system for you and your team can be daunting, you want to make sure you are getting the best results so that you put your effort on the right tasks to suit your customer’s needs.
Planning, refinement, and prioritization are not the most fun parts of being a developer. However they are crucial to being an effective one when it comes to working on larger projects for customers other than ourselves. When a backlog is well prioritized it is easy to step into a team and know what needs to be done next as well as where the project is headed. Understanding the process behind prioritization of a backlog gives insight into the workings of product owners and stakeholders. By knowing what they value, you as a developer can influence them to get the tasks that are important to you moved up in priority.
What is prioritizing?
An ideal product backlog is a list of all the product-related tasks that need to be completed. This includes only the tasks needed to be done to complete a project or product and nothing else. Unfortunately, in the real world product backlogs are rarely so well defined as to know exactly what needs to be done to complete a project. Project goals may shift, other products may come on the market, the customer may want something not originally discussed. Prioritization is a way of cutting the bloat from the backlog and helping a team focus on the important tasks. It involved identifying the important features to make the product work. On top of identifying and ranking the core features to get a product working, prioritization also identifies those features that may not be necessary but are desired by the customer.
Benefits of prioritizing.
Prioritizing helps the team understand what is important to the client. If the client isn’t involved in prioritizing the backlog then features that are not important or not needed may get built before those that are critical to the client’s success. It also helps the team to see where a project is headed and know what to expect in upcoming sprints. When the backlog is not prioritized each sprint’s tasks are at the whim of the scrum master or product owner or worse, the lead developers.
Prioritized backlogs allow the team to manage dependencies so that they are built in order and remove obstacles before they impede work. Time is saved in planning meetings because the next sprint is based on the top priorities, or filling in space based on the capacity of the team. Having a prioritized backlog means you know what stories will be coming next and if there is extra capacity in a sprint know which stories to pull into it. More likely there will be reduced capacity, knowing the importance of each story means you know which ones that you can remove from a sprint if the capacity is reduced.
Pitfalls to avoid when prioritizing.
The prioritization methods do not make sense to the t...
Large Teams and Object Oriented Programming
Principles are an important thing. However, like any other situation where principles are important, the principles of object oriented programming occasionally require a little extra thought to implement when things get difficult. In particular, as your team grows, a lot of the things that you learn early on in OOP have to be adjusted to the reality of working in a larger team. While this isn’t exactly a compromise of the principles of OOP, it is definitely a learning experience that will deepen your understanding of proper practices, usually after it frustrates the crap out of you.
Like an object model with many different types, the interactions of a large team become more complex in a thoroughly non-linear fashion. Eventually, this complexity will require you to adjust the way you interact with the system, lest the whole thing come grinding to a halt. If you don’t, the resulting stability issues will make it hard to get anything done. For interpersonal interactions, most organizations will divide responsibility among a set of smaller teams to limit the number of challenging interactions. In an OOP codebase, a similar approach is applied, but you’ll find that it doesn’t tend to always work the way you might expect. Managing large teams of people who are working on the same codebase can often result into some interesting problems within the codebase.
OOP can be a useful paradigm when building an application. However, the principles of OOP as taught in a textbook are not necessarily the way things get implemented in messy, real world scenarios. As your team grows, team dynamics and interactions tend to force some changes in how code is written, designed, tested, and managed. While textbooks will teach you general principles in a fairly clear cut manner, the application of those principles in the real world, especially on a larger team, might not be so clear cut.
The basic reasons for team and codebase growth.
It goes without saying that the reason you tend to see large teams working on large codebases is because there is an economic value in doing so. It’s unlikely that a large team will remain employed very long if that’s not the case. Further, given this economic value, larger teams and codebases have to be able to prove their value regularly, or they are at risk of being cut. This means that deliverables must be met and systems must remain stable. This tends to place schedule and feature set pressure on the team. Complex systems tend to evolve from simple systems over time. This additional complexity is often required to deal with hidden complexity in the real world systems that the code is supposed to address. This added complexity tends to require more and more people to deal with it over time.
YAGNI is often provably false.
YAGNI means “You ain’t gonna need it”. In general, it’s a good rule and suggests that you shouldn’t gold plate your code for future scenarios that you can envision, but which have not yet come into scope. This meshes well with the agile notion that you only build the things you need and that you don’t “borrow trouble from the future”. In larger teams, this can often break down, however, as if something is needed in the near term, it can be harder to tell how soon it will be needed. Worse, if it is needed, large swaths of the team could be blocked from getting their work done if the feature isn’t implemented.
To fix this, as teams get larger, you are probably going to have to do more planning up front, with an eye towards identifying potential blocking features that are on your project’s critical path, well before they act as blocking issues for getting work done. For instance, let’s say that you are adding an enterprise message bus to your application. In a small team,
Improving Your Financial Game with Lucas Casarez
If you are working at all, it’s almost certainly worthwhile to be thinking about your finances. Not only do your finances determine when you can retire, but they also determine where you are going to live, how resilient you are to economic shocks (hello 2020), and can even have a hand in your grandchildren’s quality of life. While finances are often considered a taboo subject to discuss in polite company, the fact is that you really need to have your financials in order if you want to have a good life.
Your finances are more complicated that you might initially realize. While something as simple as regularly contributing to your retirement accounts and savings is a good idea, that really isn’t sufficient to guarantee a good (or early) retirement. Financial markets, regulations, and opportunities are always changing and ideas that worked in the 80s don’t necessarily work now. Further, as you Level Up your financial game, the things that previously worked well for you may no longer be the best choice.
Additionally, your risk tolerance is going to change over time, probably by a lot. Your lifestyle is very different as a single person in their twenties living in a one bedroom apartment than your life when you are in your forties with a couple of kids looking to go to college in the next few years. And things are different again when you are sixty and hurtling towards retirement. Your situation could change at any time due to major life events, including marriage, birth of children, job losses, career changes, or simply moving to a more (or less) expensive neighborhood. Talking about this stuff to a financial advisor is smart not because you aren’t smart, but because there are so many variables that need to be examined in order to get to an optimal result.
Finances are not simple, but there are some reasonable things you can do right now that will drastically improve your long-term financial situation while making you more resilient to whatever craziness is going on in the market right now. Best of all, once you get a solid financial advisor helping you with your decisions, a lot of the anxiety around finances that we often feel can be alleviated.
Tricks of the Trade
Just like having a financial plan is important, it’s important to plan out your code. This becomes more important with larger applications or when working on a team. However, just like starting your financial plan young will help you when you are older, planning out even your simpler applications will set you up for doing so on larger ones. It also gives you a place to make mistakes when they are less detrimental so you can learn how to plan on simpler smaller things and then apply those lessons to the larger applications.
Join Us On Patreon
Level Up Financial Planning
Donate to Beej’s Mission Fund
Memo: Put “BJ Burns” in Memo
Customer ReviewsSee All
Long time listener, first time commenter
I’ve been listening to your shows for years and never took the action to properly thank you for the good that you’ve done for me and the community. When I first started listening I was lost in what I wanted to do with my life and binging through the earlier episodes started to give me confidence in my ability to improve and make my on again off again programming learning journey a consistent one. Last year I decided to actually put it to use and committed to myself that I would be a developer by the time my next birthday (the end of May) rolled around. After quitting my job and going through a bootcamp (Ironhack), I am happy to say that I achieved that goal back in January. Although you didn’t know it, this show kept driving me to improve with every listen. Thank you for helping me build more confidence in myself, learn important concepts
Good for anyone new in IT!
I’m a computer Information systems student graduating in May so I’ve been doing all of the things that I need to do so that I can get a good entry level job afterwards, so listening to a lot of the episodes with topics on personal development outside of education has been soooo helpful for me! Since I worked most of college and had to support myself I didn’t get a lot of time to work on personal projects or anything outside of school so I’m having to put the recruiters’ microscope on my personality and ability to learn and work with people very well and listening to this podcast has gave me so many good pointers, especially the LinkedIn and Social anxiety episodes!
Great newbie advice digest
I've been listening to Will & Beej for a few years now. The consistency and breadth of this show is awesome, and a perfect complement to more technical podcasts. Even though some episodes wander towards backend topics I never touch, there’s plenty of content to satisfy anyone. My only complaint is the length of the episodes; the intro & outro are pretty long and detract from the core content. Regardless, this podcast is on my subscription list and will probably stay that way as long as they keep going.