

Develpreneur: Become a Better Developer and Entrepreneur
Rob Broadhead
This podcast is for aspiring entrepreneurs and technologists as well as those that want to become a designer and implementors of great software solutions. That includes solving problems through technology. We look at the whole skill set that makes a great developer. This includes tech skills, business and entrepreneurial skills, and life-hacking, so you have the time to get the job done while still enjoying life.
Episodes
Mentioned books

Jan 18, 2022 • 15min
Pipe-filter : An Architecture for Processing Data
The pipe-filter architectural pattern is very common and used to process data. It is flexible and scalable. This pattern has existed in other areas. However, it is the perfect solution for software problems that need steps or filters. The Pipe-Filter Pattern Defined Think of a start and an endpoint. Data has to go from beginning to end, and work will be done on it along the way. The work done is the filters, and we can place any number of filters along the journey. Each one is stand-alone in a sense as it takes in data, does the work, and then spits it out on the other end. We can change countless steps like this together as one might do with Lego blocks. Each Step A Island One of the best ways to create a solution that is easy to maintain and scalable is to take well-defined steps that can easily be swapped out. We can even add steps that load balance or provide other performance enhancements between them. That is the strength of the pipe-filter pattern. We can add, remove, and update filters with ease without rebuilding the system. We have well-defined and consistent inputs and outputs when each step takes data in, does the processing, and then spits it out. Those same inputs and outputs from step to step make each filter interchangeable. Likewise, we can start simple with a single filter, test it, and then move to a more complex filter series. Even better, we can always reduce the solution to a single filter and validate it. Challenges The pipe-filter pattern has drawbacks related to the strengths. For example, there may be pre-requisites in a solution that limit interchangeability. Likewise, a bunch of filters can conflict or reduce performance. Therefore, we need to be wise in our design and not fall back on adding more filters. Any solution can be over-architected. Thus, be intentional in designing both the filters and the flow. A good design does the proper amount of work at each step. That work also does not require assumptions about the data it is processing.

Jan 13, 2022 • 16min
Master-Slave : An Architecture For Distributing Work
We switch gears in this episode and look at a pattern for getting work done. The master-slave pattern can be confused with the client-server. However, they are very different. The main difference is how the work flows through the system. The Master-Slave Pattern Defined This pattern is a way to get large jobs done. In contrast, the client-server pattern focuses on multiple users and requests. The master-slave pattern provides an example of delegating work within a system. The requests come into the master. Then, the master splits up the work into pieces that are farmed out to the slaves. When a slave completes the work, the results are sent back to the master. The master then puts together the results and provides the result for the request. The job done may be computational, third-party requests, or cross multiple persistence engines. Share The Load The strength of this pattern is the ability for a request to be shared across resources. However, note that this does not come for free. Additional work is done to split up the task and merge the results. That alone can be resource-intensive based on the job. Therefore, we should only use this pattern with large jobs that have well-defined ways to split them up. An example is processing a set of data. Each item within the collection can be shipped off to a slave process and then results returned. Thus, the work is broken down per item, and we can spread the work across the slaves available. Likewise, there are types of work within a request that make for good lines to split it up. For example, there may be data manipulation required, storage retrieval, and computations to be done. Again, these chunks of work can be sent to slaves that are best suited for each type of work. Different Patterns and Different Goals You may look at the prior paragraph and think we described a layered pattern. That, again, is a different focus on how the request flows through the system. This pattern is a single large request. The layered pattern handles multiple requests and has a focus on the steps required for any request, not breaking down large pieces of work. Challenges The master-slave pattern is not a good fit for many tasks. There will be problems breaking the effort into smaller pieces, or the request may be small enough that it does not need to be split. Remember that we have an overhead in splitting the work and merging results. That cost can exponentially increase the time and resources for a task if not executed properly.

Jan 11, 2022 • 17min
Client-Server Pattern - Software Architecture
The discussion of patterns sort of goes backwards this episode. First, we look at the client-server pattern. It is an older and well-established pattern. However, it is not suited to modern solutions. This approach harkens back to the old days of mainframes and massive servers that were shared resources for application users. The Client-Server Pattern Defined This pattern is the simplest version of a layered pattern. There is the front-end client and the backend server. Unlike the layered approach, the client-server pattern is more focused on resources. This approach embraces the idea of a central server that clients connect to for sharing data. It also gives a central point (the server) to scale the application. Thus, you can think of this as a hub and spokes architecture with the server as the hub. Reduced Integration Any developer that has spent time building applications will tell you that less integration leads to more straightforward solutions. There are shortcuts and simplified approaches available when you have a single tier. The application can do things without relying on how others do something or what they expect. The client-server pattern gives us the best of both worlds. We can work almost in a silo on the client and only offload what we must (the data) for our solution. Even single-user applications sometimes use this pattern. It allows for distributed processing and storage, which is particularly useful as the data size grows. Tried and True There are thousands of client-server applications that have been written over the last fifty or so years. That means there is a lot of shared knowledge about how best to adopt this pattern. In addition, we have books and sites that can provide deep knowledge about the caveats and potholes that occur. That gives us confidence in a successful implementation. Challenges We mentioned at the start that this is a pattern that struggles to provide modern solutions. Yes, it is possible for mobile and web applications. However, the layer pattern works much better due to the number of connections often required to the datastore. A connection to a web server is far easier and cheaper to support than a database connection. This pattern also makes it hard to cache data and deliver it properly. That being said, this is a pattern that can serve most of your needs even if it is not the most scalable solution.

Jan 4, 2022 • 15min
Software Architecture Patterns and Anti-Patterns Overview
We start this season of the podcast with an overview or review of software architecture patterns and anti-patterns. This season will explore several of these, so it only makes sense to give ourselves a solid foundation for discussion. We have talked often about these, but a refresher never hurts. Software Architecture Patterns Defined As we often do, we can start with a definition from Wikipedia. An architectural pattern is a general, reusable solution to a commonly occurring problem in software architecture within a given context.[1] The architectural patterns address various issues in software engineering, such as computer hardware performance limitations, high availability and minimization of a business risk. Some architectural patterns have been implemented within software frameworks. Note that multiple considerations go into software architecture patterns. We should all know that software development is more than writing code. These factors are some of those items we need to be aware of. The Value of Patterns There is a lot of value in reviewing patterns and anti-patterns no matter what project we attempt. In effect, we are reviewing those that have gone before us and what was successful or problematic. Thus, we can learn from them and improve our odds of success. That is what patterns provide for us. Much like other patterns, there is a general approach to a problem lined out for us to adopt. As with all patterns, these are not the complete solution. Instead, think of these as guidelines to help you craft your solution to your unique problem or situation more quickly. We can avoid starting from scratch with these tools to guide us. Frameworks and Patterns You will see that many of the software architecture patterns we review show up in software frameworks. That is an example of the value these bring. They provide a foundation for your code that makes it easier to communicate among modules and interact with other systems. Architecture is often a set of guidelines and hooks for a solution. Therefore, this is a perfect area for patterns to emerge and be utilized. When you do this, you will find your team more productive, and higher quality results are an outcome.

Dec 23, 2021 • 15min
Personal Retrospective and Review - Finish The Year Right
No Sprint is complete unless it includes a retrospective and a review. We need to examine what we accomplished and how we got here. Those same considerations are important to make a part of our personal lives. A personal retrospective and review are well-suited for natural pauses in our lives, such as Holidays or a vacation. The new year is also right around the corner. A resolution based on our desires rather than avoiding bad things is more likely to succeed. An Agile Year-End A sprint in the world of Agile methodologies includes a review and a retrospective. The first is where we "show-off" or examine what was completed. The latter is where we look for ways to improve, either by doing more good or less harm. Then, we can apply these to our results from the past year. The idea of a sprint is that we set goals, attempt to achieve them, evaluate, adjust, and repeat. All of those steps are excellent for our personal goals. The Personal Retrospective The essential factor of a retrospective is to find ways to improve. In our life, we need to define what that looks like. We can aim to be happier, less stressed, healthier, wiser, make more money, or all of the above. With these goals in mind, we can perform a personal retrospective. I recommend an hour or two at least to list out what went well last year, what went off the rails, and then changes you can make next year. The above may seem like an over-architected solution. However, it is not. That time spent will help you walk through your entire year. It will help to have a calendar or similar tool that can refresh your mind about things done, attempted, and achieved. More Or Less? The best thing to spark this process is a list of your goals from the prior year. If you do not, then make one for the year ahead. A good list of objectives and achievements provides you a perfect metric for what you did right or where you stumbled. These form the basis for change in the year ahead. While doing this exercise at the end of the year is not critical, it is good to do it when you have some time away from the grind. Allow yourself to dream a bit of what better days would look like. Then you can line up some goals to get to those better days.

Dec 22, 2021 • 17min
True Vacation - Embracing The Value of Time Off
It is the time of year when we wind down a little bit. This is when it is essential to reconnect and maybe even take a true vacation. Finally, we can get away from work, emails, and phone calls long enough to enjoy life a little. A True Vacation Recharges You We all have energy levels that ebb and flow. Likewise, they also tend to decrease over time when we do not incorporate enough rest. Therefore, we sometimes need more extended rest periods, and a good night of sleep is not enough. That is where a vacation comes in. We can unplug, recharge, and find meaningful rest and recovery during a true vacation. The Pseudo Vacation The more typical approach to time off in the modern world is a pseudo vacation. That is where you technically are off of work but still check emails and may even attend some meetings. While it is helpful to have those partial days, it will not give you the chance to recharge completely. You will still have concerns, some work-related stress, and a calendar to keep an eye on. There is a big difference when you wake up in the morning and have nothing on your plate that has to be done. That is the mark of a true vacation. Full Of Activity Or None Note that we can do things during our vacation. We just want to avoid work-related items. So go ahead and plan that trip to Disney World that is full of fun and entertainment. Just make sure you avoid scheduling it around some meetings and emails to return.

Nov 25, 2021 • 14min
Positive Focus - Victories and Tasks That Recharge Us
Holidays and vacations are meant to recharge us. They help us maintain or restore a positive focus and improve productivity. Nevertheless, we want to avoid too much of a good thing. A long vacation of a week or more can be highly renewing. However, we can also lose focus, momentum and miss opportunities. Retrospection And A Positive Focus The slow times that seasonally appear in our lives are perfect times for review and retrospection. Likewise, we can spend some time reflecting while resting during a Holiday meal or lounging around. The best use of such times is with a positive focus. Yes, there are mistakes we want to avoid or correct. But, on the other hand, we can adjust our plans and schedule to embrace positives and things that energize us. Energizing Or Draining We do not spend enough time considering what energizes or drains us. Our focus is often on what needs to be done and tasks to complete over approaches and maximizing happiness. That may seem a foreign idea. However, it is a key to being more successful and happy. We may be in a position where we are the chief, cook, and bottle washer. That is rare. We underestimate opportunities to outsource and delegate. We can also find ourselves split over our approach to a task by not defining how best to proceed. Personality Flaws and Strengths It is not uncommon to find suggestions on approaching relationships and tasks based on your personality profile. These are not empty suggestions. There are tasks and ways to work that drain us and others that energize us. None of us can do only the "fun" tasks. However, we can approach our plans with a focus on doing more tasks that energize and less that drain. That net positive will allow us to avoid burnout. Of course, we may have some days that are better than others. Nevertheless, a retrospective that highlights what we do best is a critical step in keeping a positive focus.

Nov 23, 2021 • 19min
Embrace Downtime - Make the Most of Slow Times
We are starting into that time of year where you might be most busy or struggle to find meaningful work. For those that are experiencing the latter, this episode is to help us embrace downtime. There are two important considerations during these times. First, we want to avoid backsliding on our progress and momentum. However, we also want to rest and recharge. No one can run full steam without rest. These downtimes allow us to do so. We also can use these periods for reflection and planning. Embrace Downtime And Recharge First and foremost, we need to use these times to refill our tank. There are many reasons to take some time off from work. Nevertheless, the primary focus should be rest. We do not have near as many opportunities to stop and relax as we do to push ahead. Respect the rarity of time off and slower days to use them wisely. That means you may need to be happy with a shorter to-do list and fewer things completed some days simply because you had less to be done. Continued Momentum One of the best tools we have for becoming better developers is momentum. That habit of making regular progress is powerful. It is a critical motivator each day and affirmation as we see improvement over time. Therefore, we do not want to lose momentum. A three-day weekend is not likely to break our focus. However, a week or two of vacation can completely derail that progress. One way to keep our momentum is to keep doing what we always do. That might be easy and not impact our vacation. For example, fifteen minutes a day is not much to ask. On the other hand, the momentum from an hour or two of focused work may keep us from needed rest. In those cases, we should look for ways to reduce our effort. For example, we can reduce time spent and possibly focus on planning or review rather than implementation. That allows us to keep things fresh in our minds with a minimum of effort. Reflection And Planning There is an art to reflection and planning. They are activities that require intention and freedom to let your mind roam. There are rabbit holes that we can come across in either of these tasks that are worth exploring. Thus, time constraints can make it difficult or impossible to give these the attention they need. Instead, we can embrace downtime and use it to allow us to explore some of those rabbit holes, if not all of them. The added benefit of seasonal downtimes is that they often come after a long or busy work period. Those are the perfect times to be retrospective and assess what we want to change in the future. That is how we get better. We measure, evaluate, and correct course.

Oct 28, 2021 • 18min
Set A Pace - Maximizing Your Productivity and Minimizing Stress
We finish the season of interviews with a discussion of how to set a pace that leads to success. We often refer to milestones and steady progress as productivity tools. However, here are some steps you can take to find success. Sometimes the most significant obstacle is our focus and prioritization. Set A Pace - Assume A Marathon The side hustle is often a form of drug for an entrepreneur. First, we see a problem and a solution. Then, we want to get that solution to those that need it most. That is part of what drives us and energizes us. Therefore, it only makes sense that we will sacrifice a lot to achieve that goal or vision. However, we are still human and need to plan our schedules with our limits in mind. Assume that your project will be a marathon and not a sprint. Thus, the schedule for each day and week must be one you can maintain over time. Do not fill your days with work and no rest for long periods. Instead, set a pace you can keep, and that takes your rhythms and needs into account. Declining Productivity Developers suffer from an inability to self-assess, similar to drinking and driving. Some will even argue they drive better after a few alcoholic drinks. Likewise, some developers think more hours always equals improved productivity. Unfortunately, this is far from the truth. Lack of rest and sleep can drastically reduce your hour-over-hour productivity. Even worse, several adverse health effects are linked to long work hours.

Oct 26, 2021 • 20min
Achieving Goals - Setting A Milestone And Hitting The Mark
The season of interviews is wrapping up. First, however, I want to share some points about achieving goals and setting them. This past season was a little different from other ones for the podcast. It required a different approach. That has helped me gain new insight into ways we can plan out milestones and find ways to hit them. It is not easy and requires effort. Nevertheless, here are some steps you can take to find success. Achieving Goals Requires Deadlines The key to achieving a goal is to meet deadlines. First, you have to set them. Then, you have to meet them. I have had numerous conversations over the years with those that are trying to push themselves. Those often include a softer view of deadlines than when someone else sets them. Many of us find excuses to pass on a personal deadline that we would not if someone else set it. That is the challenge of being a self-starter. We need a reason to do many tasks, and often we rely on others to give us that impetus. Deadlines and milestones provide a mechanism for driving us forward and taking the necessary steps. Appropriate Markers and Deadlines A journey requires us to progress towards the destination. Random progress markers do not help. They might even take you off track. Instead, set milestones that are pulled out of the progress you naturally will make. Avoid adding tasks that are simply there to show progress and instead use existing tasks. Find points where you have a well-defined success-fail measure and then set a date for that to be achieved. This process may seem simple. However, it can be handy in providing accountability and pressure to keep you on track. Build In Buffer Side hustle tasks and similar "not our day job" work can often be pushed aside. However, we are far more susceptible to letting life get in the way of those goals. Priority setting is essential, and we need to include that in our side hustle and other areas of life. When you feel you do not have enough hours in the day, it is an indication to scale back somewhere. Likewise, tasks with lesser priority need to include some buffer time in the planning. You know you will push back a milestone for something more critical so give yourself some time to account for it. Then, be aggressive in tackling your milestones sooner rather than later. You might get done early and be able to shift focus elsewhere or otherwise build some buffer for life's more significant distractions.