The Craftsperson’s Toolkit: Professionalism, Pragmatism, and Self-Improvement

Philips
Philips Technology Blog
10 min readOct 23, 2024

Authors: Fernando Vieira and Rodolfo Hansen, Software Compentency Leads (Developer advocates/evangelists)

Despite the ubiquity of software in modern life, the public often overlooks its complexity. On the one hand, people still view the software industry through the lens of traditional engineering disciplines like mechanical or electrical engineering, where outcomes are more predictable, quietly ignoring how software uniquely explodes in its dynamic complexity. At the same time, it is common to find in media statements like “you can become a millionaire overnight with a killer app after taking this 6-month course”. The combination of both these views inspires young people to pursue careers in software engineering motivated by false assumptions: software engineering is not especially hard, you can master it in 6 months, and you will make your fortunes by coming onboard. This turns into a unique challenge for the industry at large.

Robert C. Martin (a.k.a. Uncle Bob) has accurately predicted the challenge, including the experience gap (nearly half of software engineers have less than five years of experience) and the growing potential for legal liability for individuals due to the consequences of software failures[1]. To address these issues, he has advocated software engineers should pursue excellence and work with professionalism. Uncle Bob is right. Even with advancements in tools and processes, the quality of software remains heavily reliant on the craft of engineers. And developing craftsmanship requires more than just enthusiasm; it requires a combination of continuous learning, responsibility and commitment to excellence throughout a professional lifetime.

Source: Philips

Another factor underestimated by the media and influencers is the vast amount of existing software. Currently, it is unlikely a software engineer will be hired to deal only with new projects. We must acknowledge that today, more than ever, being a software developer means joining a company with an existing codebase. Companies hire developers to add features to their existing products while making improvements in performance, security, reliability, etc. Managers expect newcomers to learn the technology stack previously adopted; one which is often outdated. This means software teams always need to face the problem of technical debt, which is a pervasive issue in the software industry, even in startups.

This is the new normal of our industry. It is a bit far from idealized portrayals often presented but it is not a catastrophe. We should adapt to the real world and find opportunities with these circumstances. Also, while you are affected by consequences of your predecessor’s decisions, developers will likewise be affected by consequences of your decisions. Our decisions need to embrace responsibility and accountability. The current landscape requires decisions balancing innovation with the maintenance and improvement of existing systems.

The balance can be reached when teams have maturity in their development practices. Technical debt management works well when the team diligently applies the Boy Scout Rule[2], has a defined process, and can reserve part of its capacity to pay back this debt. Static analysis and strong code review can guarantee that new or modified code meets quality standards. A holistic test approach will provide safety for developers refactoring code and improving design. Strong automation will ensure that developers do not spend time on tasks that a machine could handle. Finally, constructive programming and other formal methods can add safety and correctness to the code the team produces.

Mastering relevant software practices is essential because they give you freedom. Once a team reaches maturity, developers discover they finally have time to experiment and add new technologies or paradigms. Then, your responsibility as a professional is to understand if you are choosing a solution because you would like to try it or because it is the best option for a given problem. If the decision involves more passion than reason, you should analyze the true value the new item will add to the product you are responsible for. Remember that technology is just a means to an end, and that simple solutions can be very elegant and effective.

Artificial Intelligence is a good example. No one doubts AI will be integrated with both software products and the development environment. However, software engineers should carefully consider whether AI is the optimal solution when alternatives are available. The decision to incorporate AI into an existing product needs to start with the customer perceiving value on the solution and end up with the company being able to deal with the development and operational complexity AI would add during the lifespan of software.

The landscape we painted is challenging and imperfect, but it is also full of opportunities. It demands people who are resilient enough to maintain professionalism and commitment with continuous learning even in the face of adversity; it demands people who truly feel passionate about software. By embodying these qualities, they will not only build solid careers; they also can make a positive impact on society through their work in a world increasingly driven by software.

So how to build a solid career? Do it by everyday endeavors in personal and professional development. Although authors differ in the number and name of categories, the core principles remain consistent: professionalism, pragmatism, and self-improvement. By striving for excellence in these areas, you’ll become a valuable professional to any organization, regardless of the ever-evolving challenges of the software development industry. On the following paragraphs you will find detailed descriptions of each principle, followed by improvement suggestions.

Professionalism

A professional is an individual who consistently demonstrates excellence in their field through a combination of technical competence, ethical conduct, and interpersonal skills. Professionals are accountable for their actions, proactive in problem-solving, and committed to continuous learning. They foster a positive and collaborative work environment by exhibiting respect, reliability, a strong work ethic and reciprocity. This means that professionals expect others to uphold the same high standards of behavior that they show.

A professional developer must:

Master the craft — Domain development practices, being able to apply them when solving complex problems. The outcome is high quality code that meets all requirements and is well designed, efficient and maintainable.

Demonstrate ethical conduct — Exhibit integrity, honesty and respect for others. Adhere to laws, code of ethics and company principles, when available. Prioritize society’s best interests.

Communicate effectively — Read, write and speak clearly and concisely. Learn to effectively translate technical concepts into non-technical language, and vice versa, while communicating with all people involved in a software project.

How to improve:

Master the Craft — Learn and practice all development practices through reading books and articles, watching videos and lectures, and exercising with personal and open-source projects.

Demonstrate ethical conduct — Analyze how your actions impact people. Explore your company’s principles and read codes of conduct like the IEEE one. Understanding how your code impacts customers and society can provide insights into making things better for everyone.

Communicate effectively — Reading and writing are the cornerstones of effective communication. There is a vast array of online courses focused on developing communication abilities.

Pragmatism

Pragmatism[3] is essential for navigating into the current landscape of software development. It does not mean an excuse to avoid pursuing excellence in accepting things worse than they should be. It means understanding the difference between the ideal and real world, to deal with trade-offs, and it means making the best with the available resources.

In short, pragmatism is about being practical, flexible, and results-oriented. It’s about understanding the realities of the industry, making informed decisions, and delivering the best possible software within the given constraints.

A pragmatic developer must:

Balance theory and practice — Master foundational concepts and apply them to real-world scenarios, fostering adaptability to technological changes and building enduring knowledge.

Adhere to YAGNI — Avoid complex technology or design aiming a possible future. The “you ain’t gonna need it”[4] principle should guide your approach. Refrain from overcomplicating solutions for today’s problems unless there’s a clear business case or a well-defined product roadmap justifying the complexity.

Be adaptable — Be flexible and able to learn processes and technologies quickly. It is an essential trait the best software companies look for due to the proliferation of programming languages and tools. Be willing to adopt newer technologies when they offer clear advantages, avoiding getting stuck due to personal preference or the time dedicated to learning older ones. Embrace a mindset of continuous learning, recognizing that technology is a tool, and core value lies in problem-solving.

Analyze cost-benefit — Be able to evaluate the trade-offs and the consequences of a choice. Make the best possible decisions given the limitations.

How to improve:

Balance theory and practice — A good exercise you can always do is trying to explain some of your practical decisions with theory. The same applies when you learn new concepts: try to apply them in some practical problem. This way you will make sure that your knowledge is solid.

Adhere to YAGNI — When choosing technology, try to do score cards with honest criteria. Let the reasoning decide what option best fits with the problem. When designing systems, try to do it incrementally. Test-Driven Development is great because it forces you to gradually adapt your solution to the real cases the software must address.

Be adaptable — Adopting a positive attitude towards change is the first step. Another crucial aspect is to actively exercise your adaptability skills. You can do this by tackling small coding challenges in programming languages that you haven’t mastered. Try to solve one small problem daily, and you’ll notice a significant improvement in your adaptability.

Analyze cost-benefit — Start trying to do the analysis for small decisions. You can try techniques like balanced score cards and decision trees. Use the same process to make decisions in your life. For example, to decide what car or mobile phone best fits your needs.

Self-Improvement

Self-improvement is a lifelong pursuit of personal growth and development. It involves planning your time wisely, keeping promises and being able to learn and improve your craft. It is about doing your best at work and life, including ways to cope with stress of hard times, balancing both. It is also about finding passion and purpose in a way that your work integrates with your values, being a source of satisfaction and achievements.

A committed developer must:

·Manage time effectively — Know how to deal with numerous duties and distractions, prioritizing tasks and accomplishing outcomes. Be punctual at meetings; punctuality is essential for maintaining a positive professional image.

· Engage in continuous learning — Expend additional hours to learn. Uncle Bob states we should dedicate an additional 20 hours per week to be up to date with technology and improve our craft. Although the number of hours is debatable, there is no doubt software developers need to make extra effort to have a solid career. If the modern world changes fast, the software industry changes 20 times faster.

· Pursue passion and purpose — Find passion in your work and have a clear sense of purpose, aligning your work with your values. Consider the importance of your work in the daily life of people you know. The comfort of the modern world also relies on software.

· Maintain a work-life balance — Pursue a good life, a life that allows you to spend time with family, friends and things you like while still value the profession.

· Deal with stress Develop effective coping mechanisms for dealing with work-related stress. The question is not if you will experience stress, but when.

How to improve:

Manage time effectively — There are many articles, videos and courses about this subject. Here our suggestion is to try some techniques and to embrace the ones that you can naturally incorporate into your daily life. If you work from home, establish a clear boundary between your personal and professional life.

Engage in continuous learning — Plan your life with continuous learning as an unnegotiable task. You will have to find time to read articles and books, or just to play with some problems using unfamiliar technology. Maintain a notebook to track knowledge gaps and learning goals.

Pursue passion and purpose — Define what is important to you and the people you love. After, analyze how the products and services you contribute to support what you value. Put yourself in the position of your customer (sometimes it is not even necessary because you are also the customer). Like any customer, you like to get the best possible product or service. This view, alone, gives you the importance of pursuing excellence.

Maintain a work-life balance — In order to make a good balance, set clear boundaries between work and personal life and communicate it. Having passion and energy in work is great, but spending leisure time at work often leads to burnout. Spare time is fundamental for your health and well-being.

Deal with stress — It is common for people to engage in mindfulness and relaxation sessions or practicing physical activity. Having hobbies always helps; if you don’t have a hobby, find one. Some developers can combat stress coding for personal or open-source projects; some others prefer to take a break from the tech world. The goal is to alleviate stress and continue your journey toward professional and personal fulfillment.

A Final Thought

Remember that circumstances play a big role in our lives. To adapt and evolve is required for each living organism. If you read along and find it overwhelming, try reading again and highlighting any points in the above list that can help you, personally, improve as a craftsperson. Hang on to those and realize that it is indeed possible to grow and flourish in the context of what it means to be a software developer today. There have been plenty of recent advancements that need to make their way into the industry, and you are responsible for making the environment you work in follow and model your own passions.

Curious about working in tech at Philips? Find out more here

References:

[1] Clean Craftsmanship: Disciplines, Standards, and Ethics (Robert C. Martin)

[2] Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin)

[3] The Software Craftsman: Professionalism, Pragmatism, Pride (Sandro Mancuso)

[4] https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it

--

--

Philips Technology Blog
Philips Technology Blog

Published in Philips Technology Blog

Learn more about how Philips designs, builds, and operates our systems and engineering organizations

Philips
Philips

Written by Philips

All about Philips’ innovation, health technology and our people. Learn more about our tech and engineering teams.

No responses yet