<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Steve Perkins | Software Developer in Madison, WI]]></title><description><![CDATA[FTE/freelance Java developer in Wisconsin working from the chip up in IoT product development.]]></description><link>https://blog.steveperkins.info</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 15:19:25 GMT</lastBuildDate><atom:link href="https://blog.steveperkins.info/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Top Lessons Learned from Tech Careers]]></title><description><![CDATA[What lessons do software industry experience impart? That was the topic of a recent Let's Discuss Slack event from  Dev Together Madison. Many valuable insights were raised and discussion highlighted some key points about software careers. Newer or j...]]></description><link>https://blog.steveperkins.info/top-lessons-learned-from-tech-careers</link><guid isPermaLink="true">https://blog.steveperkins.info/top-lessons-learned-from-tech-careers</guid><dc:creator><![CDATA[Steve Perkins]]></dc:creator><pubDate>Fri, 28 Feb 2020 15:56:32 GMT</pubDate><content:encoded><![CDATA[<p>What lessons do software industry experience impart? That was the topic of a recent Let&#39;s Discuss Slack event from  <a target='_blank' rel='noopener noreferrer'  href="https://www.meetup.com/DevTogetherMad/">Dev Together Madison</a>. Many valuable insights were raised and discussion highlighted some key points about software careers. Newer or junior developers bootstrapping their careers can take advantage of these concepts for stronger career success, but the value still stands for anyone in the tech industry.</p>
<p>Interestingly enough, not a single one of the lessons learned by experienced software developers was related to a specific technology or technical skill. Every insight related to soft skills. One take-away from that is that technical aptitude is necessary, but soft skills can&#39;t be neglected if a successful tech career is what you want.</p>
<h1 id="managing-expectations-is-important">Managing Expectations is Important</h1>
<p>Expectation management is a common theme when we&#39;ve asked the Dev Together community about crucial software developer skills in the past. This discussion was no exception. </p>
<blockquote>
<p>Overpromise, underdeliver</p>
</blockquote>
<p>This time we talked about managing expectations in estimates. A big part of a successful project is a solid estimate. Estimates inform project stakeholders, development managers, users, and other key players. Assuming everything will go well reflects a positive attitude, but experienced developers know that something will always go wrong. Estimates have to take that into account in order to prevent failure in the eyes of stakeholders.</p>
<h1 id="software-s-about-people">Software&#39;s About People</h1>
<p>We build software to facilitate someone&#39;s job, safely transport them through space, or make sure their paycheck is deposited on time. Approaching software with that in mind helps developers focus on the value it can provide.</p>
<blockquote>
<p>Eliminating a small bit of frustration can be worth many times more than a clever code implementation. -rosslarson</p>
</blockquote>
<p>The end user is always an important person to keep in mind when working toward a goal, but this maxim extends to other project stakeholders too. For example, considering the needs of developers who will update our work in the future helps us build understandable code. Thinking about the company&#39;s objectives in the context of a goal helps us think critically about each part of our systems. Even working with other developers in the team helps us negotiate a considered approach to solving the problems at hand.</p>
<h1 id="be-able-to-work-with-multiple-personalities">Be Able to Work With Multiple Personalities</h1>
<p>Software projects are rarely completed by just one person. A software developer needs to be able to adjust for different personality types and work styles. To be successful, a developer must learn to build trust and foster relationships.</p>
<blockquote>
<p>Making sure other people feel heard is important in gaining their trust</p>
</blockquote>
<p>One way to build trust is to make yourself &quot;vulnerable&quot; to others in the workplace, which creates a trust environment. People are usually more willing to help or forgive when they can empathize with you.</p>
<h1 id="prioritization-matters">Prioritization Matters</h1>
<p>Humans aren&#39;t good at multi-tasking. We end up spending a lot of time trying to recover after context-switching. </p>
<blockquote>
<p>Being able to look at the &quot;end goal&quot;...helps me assess if a new thing is worth it enough and will help me achieve my end goals. -Cristina Ruth</p>
</blockquote>
<p>Prioritizing tasks helps developers apply their full brainpower to one goal instead of scattering it among many. Understanding the end goal and communicating the opportunity cost of changing paths helps people focus on the most valuable or efficient way to achieve the overall goal.</p>
<blockquote>
<p>It&#39;s a delicate balance of jugging the current and planning for the future so there&#39;s less things to juggle. -Cristina Ruth</p>
</blockquote>
<h1 id="find-root-causes">Find Root Causes</h1>
<blockquote>
<p>Keep asking &quot;why&quot;? and going down deeper levels until you understand exactly where the source of a problem is coming from. - Fred Turkington</p>
</blockquote>
<p>Software developers are problem-solvers. It&#39;s a key part of our psyche. Sometimes we get too focused on solving problems and forget to step back to find out what&#39;s a symptom and what&#39;s causing it - i.e. the <em>real</em> problem. For example, understanding <em>why</em> users want a feature often leads to discovery of an underlying issue that might solve many other problems at the same time.</p>
<h1 id="you-can-t-know-everything">You Can&#39;t Know Everything</h1>
<p>Software developers sometimes feel like the world expects them to be an expert in everything. Unfortunately, that&#39;s just not a realistic approach. We need to know when to rely on team members and coworkers for their knowledge. A software team that practices this interweaving of skills becomes stronger and more successful as a result.</p>
<h1 id="learning-never-hurts">Learning Never Hurts</h1>
<p>Even though developers can&#39;t be expected to be experts in everything, learning is how we improve our abilities. </p>
<blockquote>
<p>It&#39;s good to always challenge ourselves and get ourselves in an always learning mindset</p>
</blockquote>
<p>This advice applies to many areas of life, not just software development careers. Sometimes we have to learn through failure, which is also okay - another lesson we learned in this discussion. Expanding knowledge helps identify patterns, too, which is a critical component of software development.</p>
<h1 id="take-risks">Take Risks</h1>
<p>Limiting ourselves to what we already know is attainable prevents us from stretching past superficial goals to find our true limitations. For example, only applying to jobs we feel qualified for will limit our opportunities to learn how to do new things. The &quot;safe&quot; path isn&#39;t always the best path.</p>
<h1 id="conclusion">Conclusion</h1>
<p>This Dev Together Madison Let&#39;s Discuss event highlighted several valuable lessons learned over the course of many software developer careers. Thank you to everyone who participated!</p>
]]></content:encoded></item><item><title><![CDATA[Critical Skills for a Successful Software Project]]></title><description><![CDATA[What does it take to make a software project successful? This was the topic of a recent Let's Discuss Slack event from  Dev Together Madison . The discussion was lively and members provided great insights into critical skill targets for developers in...]]></description><link>https://blog.steveperkins.info/critical-skills-for-a-successful-software-project</link><guid isPermaLink="true">https://blog.steveperkins.info/critical-skills-for-a-successful-software-project</guid><dc:creator><![CDATA[Steve Perkins]]></dc:creator><pubDate>Tue, 21 Jan 2020 20:17:13 GMT</pubDate><content:encoded><![CDATA[<p>What does it take to make a software project successful? This was the topic of a recent Let&#39;s Discuss Slack event from  <a target='_blank' rel='noopener noreferrer'  href="https://www.meetup.com/DevTogetherMad/">Dev Together Madison</a> . The discussion was lively and members provided great insights into critical skill targets for developers in any vertical. A number of crucial themes quickly emerged.</p>
<h1 id="communication">Communication</h1>
<p>Communication of some kind came up in just about every discussion. Developers can help a project become successful by practicing good communication - around requirements, timelines, and difficult topics to name a few. A project suffers missed deadlines, unexpected features, and slow progress when communication within the project is broken. Developers need to clearly communicate with their coworkers, team leads, Quality Assurance, project managers, and project stakeholders.</p>
<h1 id="negotiation">Negotiation</h1>
<p>Successful developers negotiate requirements, time estimates, competing priorities, resource usage, architecture and design, testing levels, etc with people in a variety of roles. They even negotiate with themselves - evaluating options and making trade-offs to find the most appropriate solution to stakeholder goals. Negotiation is a crucial skill in a human-based software project.</p>
<h1 id="scope-control">Scope Control</h1>
<p>Scope can be a touchy subject with stakeholders, but it&#39;s a crucial safety net that keeps the project under control. Stakeholders often hold a particular vision of the software in their head without fully explaining it to the development team or other stakeholders. When an important stakeholder makes a casual remark about Feature X she thought would be included, some developers rush to add it at the cost of expanding scope.</p>
<p>Managing scope relies on good communication between project participants. Successful developers call out when the project&#39;s scope changes so stakeholders know they can get Feature X, but it will add cost to the project. Agile approaches to software development help curb the impact of scope creep by keeping initial scope small and forcing a re-evaluation every sprint.</p>
<h1 id="timeline-management">Timeline Management</h1>
<p>When a stakeholder declares a timeline ultimatum, the project turns into a death march. The developer team is forced to focus on stuffing features in before the deadline and start neglecting quality and testing just to check something off the to-do list.</p>
<blockquote>
<p>Projects that have a must do by x date are doomed to have low quality. -Cristina Ruth</p>
</blockquote>
<p>Successful developers <strong>communicate</strong> and <strong>negotiate</strong> with stakeholders to find a reasonable middle ground instead of slogging toward the project&#39;s death. In this scenario the stakeholder has declared the timeline to be the number-one concern. A successful developer helps them understand that the timeline exceeds the scope so scope must be reduced to fit the timeline. In addition, successful developers know how to prioritize their efforts so the most important things get done on time.</p>
<blockquote>
<p>I think &quot;under promise and over-deliver&quot; might fit here -Steve</p>
</blockquote>
<h1 id="listening-comprehension">Listening/Comprehension</h1>
<p>In order to be successful a developer must understand the work to be performed - and that requires listening. Too often developers miss critical details by declining to ask clarifying questions or drilling down to the root of the problem the stakeholder is trying to solve. Much of software development is about transferring information between people, and being a good listener makes that a lot easier.</p>
<p>Some good resources for learning better communication habits were suggested in the discussion:</p>
<ul>
<li><strong>How to Win Friends and Influence People</strong> by Dale Carnegie (<a target='_blank' rel='noopener noreferrer'  href="https://www.amazon.com/dp/8189297813">book</a>)  (<a target='_blank' rel='noopener noreferrer'  href="https://www.amazon.com/dp/B0006IU7JK">audiobook</a>)</li>
<li><strong>7 Habits of Highly Effective People</strong> by Stephen R. Covey (<a target='_blank' rel='noopener noreferrer'  href="https://www.amazon.com/dp/1451639619">book</a>) (<a target='_blank' rel='noopener noreferrer'  href="https://www.amazon.com/dp/B0006IU4C0">audiobook</a>)</li>
<li><strong>Crucial Conversations</strong> by Patterson, Grenny, McMillan and Switzler (<a target='_blank' rel='noopener noreferrer'  href="https://www.amazon.com/dp/0071771328">book</a>) (<a target='_blank' rel='noopener noreferrer'  href="https://www.amazon.com/dp/B009S8GO14">audiobook</a>)</li>
<li><strong>Simon Sinek</strong> (<a target='_blank' rel='noopener noreferrer'  href="https://www.youtube.com/watch?v=yjpL_otEhAs">youtube</a>)</li>
</ul>
<h1 id="testing">Testing</h1>
<p>Humans create bugs! A successful software project should have the fewest bugs possible. That means testing is a key to a successful project - and not just for the QA team - developers need to test their code before foisting it off on someone else. A good rule of thumb for developers is if you&#39;d feel comfortable enough to deploy the code you just wrote into production during the busiest day of the year, it&#39;s ready for QA.</p>
<blockquote>
<p>Always appreciate your testers, even when they find problems in your code. - rosslarson</p>
</blockquote>
<h1 id="public-speaking">Public Speaking</h1>
<p>Developers have to present things all the time - their opinion on design strategies, feature ideas, proposals, estimates, bad news - to people in a variety of roles. Regardless of who you have to present things to, being comfortable while speaking to an audience makes it easier to gain stakeholder support, persuade coworkers, lay out a plan to the boss - all things that help grease the project&#39;s wheels.</p>
<blockquote>
<p>Even just webinar presenting is an art -Joe Warbington</p>
</blockquote>
<p>A successful developer learns how to be a good public speaker so he can make his case effectively and persuasively. Even presenting over the phone requires a well thought-out approach and path. Presenting to an audience in person takes more practice, but the results are worth it.</p>
<h1 id="conclusion">Conclusion</h1>
<p>Throughout Dev Together Madison&#39;s Let&#39;s Discuss event, many common themes were raised around building crucial developer skills. Thank you to everyone who participated!</p>
]]></content:encoded></item><item><title><![CDATA[Critical Skills for Beginning Developers]]></title><description><![CDATA[How can new developers improve quickly? This was the topic of a recent Let's Discuss Slack event from  Dev Together Madison . The discussion was lively and members provided great insights into critical skill targets for new developers. A number of cr...]]></description><link>https://blog.steveperkins.info/critical-skills-for-beginning-developers</link><guid isPermaLink="true">https://blog.steveperkins.info/critical-skills-for-beginning-developers</guid><dc:creator><![CDATA[Steve Perkins]]></dc:creator><pubDate>Wed, 08 Jan 2020 14:33:18 GMT</pubDate><content:encoded><![CDATA[<p>How can new developers improve quickly? This was the topic of a recent Let&#39;s Discuss Slack event from  <a target='_blank' rel='noopener noreferrer'  href="https://www.meetup.com/DevTogetherMad">Dev Together Madison</a> . The discussion was lively and members provided great insights into critical skill targets for new developers. A number of crucial themes quickly emerged.</p>
<h1 id="soliciting-external-input">Soliciting External Input</h1>
<p>Several discussions wound around the idea of approaching external sources for help, starting with asking &quot;stupid&quot; questions.</p>
<blockquote>
<p>They know enough to know how truly little they know starting out and worry that they will be left behind or perceived as low-value if they reveal that fact
-Fred Turkington</p>
</blockquote>
<p>Junior developers may feel as though they&#39;re expected to know all the answers already, resulting in imposter syndrome when they don&#39;t. This may be a cultural impediment; if junior developers are routinely criticized or berated for not knowing the answers to their questions, they&#39;ll stop asking questions. Senior developers should encourage questions; junior developers will have a difficult time learning without exposure to new information.</p>
<blockquote>
<p>As beginners (and even experienced devs), we need to be aware of our limitations and when we are completely stuck, and learn to ask for help from our peers/mentors.
-Cristina Ruth</p>
</blockquote>
<p>That&#39;s not to say developers shouldn&#39;t first attempt to solve the problem without help; it&#39;s still important for developers to show that they&#39;re stuck and not just asking for easy answers.</p>
<blockquote>
<p>Hearing &quot;help me with my thing&quot; is annoying, but helping someone who has obviously already put in effort is not.
-rosslarson</p>
</blockquote>
<p>Asking a specific question and describing the solutions you&#39;ve already tried is a winning formula, as can be seen across StackOverflow. But the target of your question doesn&#39;t even have to be human - rubber-duck debugging came up several times as a great way to look at the problem from a different angle.</p>
<h1 id="self-directed-searching">Self-directed Searching</h1>
<p>Of course, figuring out what to try first isn&#39;t always straightforward. The vast expanse of the Internet offers thousands or millions of pages that might come up in a simple Google search. Not all solutions are equal or even valid, which makes a tedious task of sifting through and trying all the possibilities. Learning to search with specificity and accurately judge the value of information sources makes searching for answers far more efficient. Locating technology-specific communities in Slack, Twitter, Reddit, Discord, dev.to, and even local Meetups makes finding targeted, high-quality answers much easier.</p>
<h1 id="accepting-failure">Accepting Failure</h1>
<p>Some of the event&#39;s discussions centered around failure and perceived failure. Like it or not, it&#39;s entirely possible the solution a developer&#39;s committed to isn&#39;t the best one - and that doesn&#39;t constitute failure. Allowing your ego to reject all other solutions is failure. &quot;We all make mistakes,&quot; typed Cristina Ruth. &quot;There&#39;s always something to learn, so it&#39;s very important that we don&#39;t destroy our self-confidence as we go through learning something new.&quot;</p>
<p>Another way to look at accepting &quot;failure&quot; was described by Jacob Zimmerman as &quot;Ask, Then Listen&quot;. Being willing to genuinely understand the answer coming from the other side of the table instead of assuming you caught all the important keywords is another form of backing down your ego and accepting that there are still things to be learned.</p>
<p>Failure can be a positive thing when it&#39;s considered an opportunity to improve. If something doesn&#39;t go well or your solution is torn apart by others, it&#39;s OK! Take a moment to understand what went wrong, understand how to fix that for the future, and move on.</p>
<blockquote>
<p>There&#39;s always something to learn, so it&#39;s very important that we don&#39;t destroy our self-confidence as we go through learning something new.
-Cristina Ruth</p>
</blockquote>
<h1 id="celebrating-small-wins">Celebrating Small Wins</h1>
<p>If you read through the last few paragraphs, it may seem like successful new developers must resign themselves to a dark and dreary life of ego-bruising failure after failure. That&#39;s not true! &quot;It&#39;s important to take the time to celebrate your accomplishments,&quot; Cristina Ruth said - no matter how small the wins are. Don&#39;t get overwhelmed - persevere!</p>
<h1 id="breaking-things-down">Breaking Things Down</h1>
<p>Skillfully breaking large problems down into small, digestible chunks is crucial to staying focused in long-term goals, creating winnable tasks, and overcoming failures. This skill has far-reaching value - some of the other applications brought up were:</p>
<p>Learning new technologies by chopping them into manageable chunks</p>
<ul>
<li>Demonstrating thought process to others</li>
<li>Gaining a holistic understanding of an architecture</li>
<li>Mapping out software requirements</li>
<li>Building accurate time and cost estimates</li>
<li>Planning a development strategy for a large project</li>
<li>Distributing concurrent work</li>
<li>Troubleshooting software problems</li>
<li>Attacking problems in general</li>
</ul>
<h1 id="conclusion">Conclusion</h1>
<p>Throughout Dev Together Madison&#39;s Let&#39;s Discuss event, many common themes were raised around building crucial developer skills. Identifying when to ask for help, removing ego, staying positive, and deconstructing problems were all well-represented during these discussions. Thank you to everyone who participated!</p>
]]></content:encoded></item></channel></rss>