Celebrate a decade of Kubernetes. Explore why K8s continues to be one of the most prolific open-source systems in the SDLC.
With the guidance of FinOps experts, learn how to optimize AWS containers for performance and cost efficiency.
There are several paths to starting a career in software development, including the more non-traditional routes that are now more accessible than ever. Whether you're interested in front-end, back-end, or full-stack development, we offer more than 10,000 resources that can help you grow your current career or *develop* a new one.
DZone Annual Community Survey: What's in Your 2024 Tech Stack?
How to Become a Software Engineer Without a CS Degree: Essential Strategies for Success
In cybersecurity, professionals are often divided into two distinct groups: Red Teams, which focus on offense, and Blue Teams, which focus on defense. Red Teaming involves ethical hacking. Here, security experts simulate cyberattacks to find vulnerabilities in a system before malicious actors can exploit them. On the other hand, Blue Teaming is all about defending the system from such attacks. Blue Team members monitor, detect, and respond to security incidents. For developers, understanding the dynamics of both Red and Blue Teams is very important. Developers are often on the front lines of building and securing applications. They must consider how their work fits into the broader security landscape. Whether you are writing code for a new app or patching vulnerabilities in apps after a security breach, knowing the strategies and challenges of both teams can make you a more well-rounded professional. Let's explore the recruitment and advanced training of specialists focused on countering cyberattacks, known as the Blue Team. We will examine the distinct career paths and training strategies, focusing on the contrasting roles of Blue Teaming (defense) and Red Teaming (offense). In this article, you will find why many students are drawn more to Red Teaming rather than Blue Teaming. We will also touch upon training methodologies, the importance of balancing theory with practical experience, and initiatives to make Blue Teaming more attractive and accessible to budding cybersecurity professionals. Decoding Career Preferences Many students are captivated by the appeal of becoming ethical hackers, finding it both thrilling and trendy. While they are aware of the Blue Team's role, they often struggle to grasp the career trajectory. While defensive security is now a familiar concept, offensive security remains relatively unusual. The uniqueness of offensive roles, filled by the Red Team, makes them more appealing due to higher salaries and greater opportunities for personal achievement. Consequently, more young specialists are attracted to these positions. Clearly, the defensive role, or Blue Team, needs to be made more accessible and appealing to future specialists to balance the appeal between offensive and defensive cybersecurity roles. It is important to communicate the long-term career benefits and security that come with Blue Team roles to counterbalance the initial allure of Red Teaming. A significant challenge here is the widespread belief that defensive roles are not as prestigious. So, it is essential to better showcase the critical impact and intellectual challenge Blue Team jobs offer. In addition, to enhance the Blue Team's attractiveness, it is good to implement structured mentorship programs that highlight career progression and stability, which are appealing to those looking for long-term growth. Despite having more skilled specialists, the role of the Blue Team, which focuses on building foundational cybersecurity knowledge and skills, has become less visible. Attackers often hold the upper hand with the flexibility to choose their tactics and timing, forcing defenders to react swiftly and under significant pressure. Defense requires thorough, time-intensive thought in building protection lines and routine work, in contrast to the Red Team, where students and young specialists often prefer quicker, more visible results. In Blue Teams, staff handle the routine job of monitoring alerts and constructing defenses. On the other hand, Red Team members carry out more lively tasks, attacking systems using different methods. By frequently updating training modules to cover various attack types, Blue Team roles can become more engaging and exciting. It is important to note that working on the Red Team often leads to job burnout, resulting in many specialists transitioning to the defensive side. Typically, career progression involves achieving success on the Red Team before moving to the more stable Blue Team. Business owners should recognize that equipping the Blue Team with better tools and visibility can prevent burnout and enhance their effectiveness, safeguarding the business more efficiently. The average salary of a Blue Team specialist is considered very attractive. However, the rewards that white hackers earn through Bug Bounty programs for discovering vulnerabilities can be significantly higher. There is a noticeable gap between market demands and the capabilities of specialists. Some companies fail to find great people for the Blue Team because there are no experienced specialists who want to change jobs. Young Blue Team specialists often lack a thorough understanding of attacker techniques, tactics, and infrastructure. They need more skills in areas like OSINT, analyzing breach data, and deep web research. So, to attract good specialists, they must either be highly motivated or well-supported in their training. It is good that there are now enough training courses. Assessing and Improving Blue Team Skills Training in realistic combat scenarios is highly effective. It is advised to use cyber exercises to hone teamwork skills. Although it might be trickier to assess individual performance, these exercises offer valuable insights. Teamwork is what matters most in businesses, so evaluating individual performance in these exercises might be less important. Adding mentors to these exercises can spot knowledge gaps on the spot, allowing for immediate correction. Junior cybersecurity professionals can jumpstart their careers by honing core skills quickly through hands-on training at cyber ranges. Following this initial training, participating in Purple Team exercises can elevate their skills to an even higher level, pushing them towards expertise. Consider establishing a rotational program within your company. This would expose young infosec professionals to diverse security areas and roles, fostering a well-rounded skillset and deeper understanding of the field. However, practical experience thrives alongside a strong theoretical foundation. Without the underlying knowledge, hands-on work can lack direction and focus. For this reason, combining theory with practice while maintaining a balance is crucial. Effective cybersecurity training caters to various learning styles. Additionally, a well-structured program with multiple levels should progressively develop skills, taking professionals from foundational knowledge to advanced expertise. This personalized and progressive approach ensures every team member gains maximum benefit. Remember, it is important to train not only the Blue Team but all company specialists to ensure comprehensive security. When everyone on the team is informed and ready to respond to security threats, the company's overall defenses are much stronger. Cultivating Cyber Talents Among Students Since training cybersecurity professionals can be time-consuming, companies often seek candidates with pre-existing skills. Universities with on-site Security Operations Centers (SOCs) and realistic cyber exercises are proving to be valuable talent pipelines. Businesses can tap into this pool by recruiting students as early as their junior year. Cybersecurity vendors and related companies always offer a range of training options for specialists, from virtual training grounds to specialized vendor courses. Hackathons, university partnerships, and internship programs further enrich the talent pool. To attract future talent, regular industry events and career fairs showcase real-world security applications. Cutting-edge recruitment methods, like AI-powered sourcing and decision-making, can help companies find top talent quickly. Students should actively seek internships or part-time roles that offer experience in cybersecurity to complement academic studies and provide a competitive edge in the job market. As a student, seeking internships in both Red and Blue Teams, as well as exploring potential IoT career paths, cloud security, or digital forensics, can provide a balanced perspective and a better understanding of each role's contributions to cybersecurity. Evolving Blue Team Job Market The value placed on enhancing the cybersecurity skills of Blue Teams is being reevaluated. Until recently, very little funding was allocated to staff development; however, this trend is now shifting. Collaboration with universities is crucial for businesses. Previously, graduates often lacked a clear career direction after graduation. Now, partnerships with universities allow students to identify specific career paths during their studies, which significantly benefits the industry. Collaboration between vendors and universities is set to grow. Vendor specialists are increasingly teaching at universities, and comprehensive programs from leading cybersecurity providers are emerging. Final Thoughts Blue Teaming's career path can be unclear for some young professionals, who might find Red Teaming's focus and immediate impact more appealing. While Blue Teaming involves dedicated effort, the repetitive tasks of offensive roles can lead to a sense of monotony. However, defensive security offers a deeper well of skill development. To address this, there is a growing range of courses, hackathons, and resources actively encouraging students to pursue the defender role.
Human beings resist change. This is not personal opinion, it's our defense mechanism against uncertainty. If you narrow your target to software engineers and technologists - who, in almost all cases, are humans - the defense mechanism can become a survival mechanism.Successful companies rarely rest on their laurels and assume the money will flow in unimpeded by change. Instead, companies constantly analyze the current to define their vision for the future: How do economic and market conditions affect our ability to sell? Would new features or product offerings attract new customers while retaining existing customers? Could we more efficiently increase market share through acquisitions rather than internal product development? Are there partner opportunities beneficial to us? How can we expand the industries in which are products are sold? And on and on and on. Answering the questions leads to decisions about company direction, which leads to change: a fast-growing product gets additional resources while a stagnant product is starved or even killed; a nascent market receives R&D funding while expanding an existing market does not. Decisions made well above my pay grade, decisions which make or break senior leaders. Regardless, change is constant. Change is the one constant in software engineering: programming languages, tech stacks, database types, deployment models, user interfaces, integration patterns, security requirements, processes, and methodology. What else has changed in your technology career? Eventually, your day-to-day work is affected, and then what? You're human, so of course you push back. While change may be better for all involved, rarely does it go smoothly. Stages 1. Disregard Anyone who has written software professionally for a reasonable period has likely suffered through experienced at least one change cycle which may impact how software solutions are designed and implemented. Some are good changes, some are bad, but you don't know about this one. It often starts as vague rumors and whispers in the wind that something is being discussed, rumors that may disappear as fast as they appeared in the first place. You hope assume that the talk is a scuttlebutt that, for now, is not worth wasting the mental effort to worry about it - especially if you can't control it - so you decide to keep your head down and continue work on your current assignments. It can't exist if you ignore it, right? 2. Deny The rumors continue and intensify, acquiring a level of specificity that makes the rumors more tangible than your run-of-the-mill rumor, and definitely more tangible than you want to admit. You comfort yourself by believing it won't impact you, your product, or your deliverables because, of course, you're not the one spreading the rumors. It's Team X's fault, why did they make that promise?!? You continue to keep your head down and work on your current assignments, having created your stock answers to reduce the chatter. . . assuming anyone's interested in your opinion in the first place. 3. Be Angry The rumors can no longer be denied, and, in fact, directly impact you: your product, your technology, your design, your processes, whatever. It's become personal and you've become the senior citizens admonishing teenagers to get off your lawn: I've been writing software this way for 200 years and you can't make me change! Unfortunately for you, they can make changes without your agreement, understanding, or approval. You either accept that change is occurring or get shown the door. You're boxed into a corner, making you more angry. 4. Negotiate After further discussions and exploration, you've finally admitted - to yourself, your peers, and your leadership - that something's going to change. As now is not the time to change employers, you become negotiator-in-chief, attempting to mitigate the overall impact or, more importantly, the overall impact on you. Your first concession is to accept change to the low-hanging fruit and anything else you find uninteresting, making it appear you're on board. Next, you'll offer alternatives to the most onerous or disagreeable (to you) changes in an attempt to soften the impact (to you). Though others may believe you are on board, you are, in fact, probing to see where you're able to influence the decisions into something more agreeable (to you). 5. Accept Change Despite your best efforts to soften the changes, you've lost the battle. Even worse, the final agreed-upon changes are even more pervasive and intrusive than feared, and your day-to-day work is substantially changing with a likely impact on your productivity. This does not imply that you're happy about it, but leadership has the petal-to-the-metal and your ride is just beginning. Bummed, but life goes on. 6. Internalize It's time to take a deep breath and move on. You incorporate the change into your daily work, you start to understand and admit the benefits. Publicly you haven't conceded that change was necessary - it's still possible that someone will see the errors in their ways - but you are looking forward and no longer reminiscing nostalgically about how things were. It's time to become part of the solution instead of being the problem child. 7. Advocate Over a period of time - weeks or months, sprints or releases - you finally grok the overall benefits to your organization. Not only are you on board, but you are key to explaining and promoting the benefits to your team and anyone else who will listen. New products, faster time-to-market, increased code quality, fewer customer support issues, better data, and in general, a reimagined organization. You no longer think about what you're doing or why, it just is . . . ideal until the next change cycle! So Now What? Many of you have experienced at least some levels of grief when your organization proposes a change that appears to be unnecessary, non-sensical, out-of-character, or just outright wrong, but nothing apparently can cause leadership to pause and reconsider. The decision has been made: go forward and execute. I've been there more times than I'd like to admit. As your career advances, as you are better able to present counterarguments to the proposed changes, you may be able to at least somewhat adjust how the changes impact the engineering staff. That said, some decisions are immutable, no matter how bad they appear to the minions. The only choice is to become a senior leader and have a (remote) seat at the table. And even then, your influence might be negligible. The choices of last resort are either to shut-the-fuck-up or find a new job. Image Credits "Grief-2.jpg" by docoverachiever is licensed under CC BY 2.0. "Mutual disregard" by thriddle is licensed under CC BY-NC-SA 2.0. "denial" by robynejay is licensed under CC BY-SA 2.0. "facial expression - anger" by DesignFathoms is licensed under CC BY-NC-SA 2.0. "PATHWAYS Negotiation Education Summer2018" by U.S. Embassy Jerusalem is licensed under CC BY 2.0. "202 - Accepted" by GirlieMac is licensed under CC BY 2.0. "Free Hugs Campaign International" by Juan Mann is licensed under CC BY-NC-ND 2.0. "Education Advocate Malala Attends MDG Event" by United Nations Photo is licensed under CC BY-NC-ND 2.0.
In this article, I will discuss how you can apply the Pareto principle to quickly learn a new programming language and start solving real-world problems while you develop a deeper understanding of the programming language. What Is the Pareto Principle? The Pareto principle, also known as the 80/20 rule, states that for many outcomes, roughly 80% of consequences come from 20% of causes. Applying this to a personal level, 80% of your work-related output could come from only 20% of your time. I first came to know about this principle after reading the book "The 80/20 Principle: The Secret to Achieving More with Less" written by Richard Koch. How to Apply the Pareto Principle to Quickly Learn a New Programming Language When I initially started to learn programming, I used inefficient methods to learn it. I was watching hours and hours of video courses and reading books trying to master all the concepts that ever existed in the programming language before attempting to solve any real-world problems. By doing this, I was losing motivation to continue to learn. Over time, I realized that this is not an efficient way to learn a new skill. Learning about the 80/20 rule made me realize that by learning around 20% of the concepts in a programming language I could solve 80% of the problems. I needed to learn a new programming language in a short period of time a couple of times. The first time, I was using a programming language at work that was not easy to use for attending interviews, and I wanted to switch to a new programming language for solving problems in technical interviews. The second time, I was in a new team that used a completely new programming language that I had never used in the past. I used the following 4-step approach which made it efficient to learn the new programming language while keeping me motivated to increase my skill level with the programming language. Step 1: Identify key concepts of the programming language. Identify key concepts such as data structures, flow control statements, functions, classes, etc. Step 2: Spend 20% of your effort to learn these key concepts. Pick up a book or a course, and focus on learning only the key concepts identified in Step 1. Step 3: Solve some real-life problems using these concepts. Depending on the purpose of learning, pick some real-life problems and try to solve them using the concepts that you learned in the 2 steps above. For example, if you are planning to do technical interviews, try to solve some problems from websites like LeetCode or HackerRank. Step 4: Learn additional concepts as you encounter them. If you are stuck solving the problem, search for how to solve this problem and learn the additional advanced concepts as you encounter them. What Are Some Important Programming Concepts? As an example, let's look at some of the core concepts of Python that can be quickly learned before attempting to solve some problems using Python: Data structures: Review important available data structures such as strings, lists, tuples, dictionaries, and sets. Loops: Python offers two types of loops - the "for" loop and the "while" loop. Also, understand how to use continue and break statements within the loops. Conditional statements: Understand how to use conditional statements such as if, else, and elif. Logical operators: Learn logical operators such as and, or, not, etc. Functions: Learn how to define functions, pass arguments to the functions, and return values from the functions. Classes: Learn how to create and use Classes. Important built-in functions: Try to learn important built-in functions such as range(), format(), max(), min(), len(), type(), sorted(), print(), round(), etc. Other concepts: Lambdas, list comprehensions Conclusion Learning a new programming language may look daunting but leveraging the Pareto principle will make it easier to learn it quickly by spending 20% of the time mastering important concepts such as data structures, loops, conditional statements, functions, and classes and applying the knowledge to solve 80% of real-life problems.
Editor's Note: The following is an article written for and published in DZone's 2024 Trend Report, Low-Code Development: Elevating the Engineering Experience With Low and No Code. The rise of low-code and no-code (LCNC) platforms has sparked a debate about their impact on the role of developers. Concerns about skill devaluation are understandable; after all, if anyone can build an app, what happens to the specialized knowledge of experienced programmers? While some skepticism toward low-code platforms remains, particularly concerning their suitability for large-scale, enterprise-level applications, it's important to recognize that these platforms are constantly evolving and improving. Many platforms now offer robust features like model-driven development, automated testing, and advanced data modeling, making them capable of handling complex business requirements. In addition, the ability to incorporate custom code modules ensures that specialized functionalities can still be implemented when needed. Yes, these tools are revolutionizing software creation, but it's time to move beyond the debate of their impact on the development landscape and delve into the practical realities. Instead of being a sales pitch of codeless platforms, this article aims to equip developers with a realistic understanding of what these tools can and cannot do, how they can change developer workflows, and most importantly, how you can harness their power to become more efficient and valuable in an AI-supported, LCNC-driven world. Leveraging Modern LCNC Platforms for Developer Workflows The financial benefits of LCNC platforms are undeniable. Reduced development costs, faster time to market, and a lighter burden on IT are compelling arguments. But it's the strategic advantage of democratizing application development by empowering individuals to develop solutions without any coding experience that drives innovation and competitive edge. For IT, it means less time fixing minor problems and more time on the big, important stuff. For teams outside of IT, it's like having a toolbox to build your own solutions. Need a way to track project deadlines? There's an app for that. Want to automate a tedious report? You can probably build it yourself. This shift doesn't mean that traditional coding skills are obsolete, though. In fact, they become even more valuable. Experienced developers can now focus on building reusable components, creating templates and frameworks for citizen developers, and ensuring that their LCNC solutions integrate seamlessly with existing systems. This shift is crucial as organizations can increasingly adopt a "two-speed IT" approach, balancing the need for rapid, iterative development with the maintenance and enhancement of complex core systems. Types of Tasks Suitable for LCNC vs. Traditional Development To understand how various tasks of traditional development would differ from using a codeless solution, consider the following table of typical tasks in a developer workflow: Table 1. Developer workflow tasks: LCNC vs. traditional development Task Category LCNC Traditional (Full-Code) Recommended Tool Developer Involvement Simple form building Ideal; drag-and-drop interfaces, pre-built components Possible but requires more manual coding and configuration LCNC Minimal; drag-and-drop, minimal configuration Data visualization Excellent with built-in charts/graphs, customizable with some code More customization options, requires coding libraries or frameworks LCNC or hybrid (if customization is needed) Minimal to moderate, depending on complexity Basic workflow automation Ideal; visual workflow builders, easy integrations Requires custom coding and integration logic LCNC Minimal to moderate; integration may require some scripting Front-end app development Suitable for basic UI, but complex interactions require coding Full control over UI/UX but more time consuming Hybrid Moderate; requires front-end development skills Complex integrations Limited to pre-built connectors, custom code often needed Flexible and powerful but requires expertise Full-code or hybrid High; deep understanding of APIs and data formats Custom business logic Not ideal; may require workarounds or limited custom code Full flexibility to implement any logic Full-code High; strong programming skills and domain knowledge Performance optimization Limited options, usually handled by the platform Full control over code optimization but requires deep expertise Full-code High; expertise in profiling and code optimization API development Possible with some platforms but limited in complexity Full flexibility but requires API design and coding skills Full-code or hybrid High; API design and implementation skills Security-critical apps Depends on platform's security features, may not be sufficient Full control over security implementation but requires expertise Full-code High; expertise in security best practices and secure coding Getting the Most Out of an LCNC Platform Whether you are building your own codeless platform or adopting a ready-to-use solution, the benefits can be immense. But before you begin, remember that the core of any LCNC platform is the ability to transform a user's visual design into functional code. This is where the real magic happens, and it's also where the biggest challenges lie. For an LCNC platform to help you achieve success, you need to start with a deep understanding of your target users. What are their technical skills? What kind of applications do they want to use? The answers to these questions will inform every aspect of your platform's design, from the user interface/user experience (UI/UX) to the underlying architecture. The UI/UX is crucial for the success of any LCNC platform, but it is just the tip of the iceberg. Under the hood, you'll need a powerful engine that can translate visual elements into clean, efficient code. This typically involves complex AI algorithms, data structures, and a deep understanding of various programming languages. You'll also need to consider how your platform will handle business logic, integrations with other systems, and deployment to different environments. Figure 1. A typical LCNC architecture flow Many organizations already have a complex IT landscape, and introducing a new platform can create compatibility issues. Choosing an LCNC platform that offers robust integration options, whether through APIs, webhooks, or pre-built connectors, is crucial. You'll also need to decide whether to adopt a completely codeless (no-code) solution or a low-code solution that allows for some custom coding. Additional factors to consider are how you'll handle version control, testing, and debugging. Best Practices to Empower Citizen Developers With LCNC LCNC platforms empower developers with powerful features, but it's the knowledge of how to use those tools effectively that truly unleashes their potential. The following best practices offer guidance on how to make the most of LCNC's capabilities while aligning with broader organizational goals. Leverage Pre-Built Components and Templates Most LCNC platforms offer pre-built components and templates as ready-made elements — from form fields and buttons to entire page layouts. These building blocks can help you bypass tedious manual coding and focus on the unique aspects of your application. While convenient, pre-built components may not always fit your exact requirements. Assess if customization is necessary and feasible within the platform. Begin with a pre-built application template that aligns with your overall goal. This can save significant time and provide a solid foundation. Explore the available components before diving into development. If a pre-built component doesn't quite fit, explore customization options within the platform before resorting to complex workarounds. Prioritize the User Experience Remember, even the most powerful application is useless if it's too confusing or frustrating to use. LCNC platforms are typically designed for rapid application development. Prioritizing core features first aligns with this philosophy, allowing for faster delivery of a functional product that can then be iterated upon based on user feedback. Before you start building, take the time to understand your end users' needs and pain points. Sketch out potential workflows, gather feedback from colleagues, and test your prototype with potential users. To avoid clutter and unnecessary features, the rule of thumb should be to focus on first developing the core functionalities that users need. Use clear labels, menus, and search functionality. A visually pleasing interface can significantly enhance user engagement and satisfaction. Align With Governance and Standards Your organization likely has established guidelines for data usage, security protocols, and integration requirements. Adhering to these standards not only ensures the safety and integrity of your application but also paves the way for smoother integration with existing systems and a more cohesive IT landscape. Be aware of any industry-specific regulations or data privacy laws that may apply to your application. Adhere to established security protocols, data-handling guidelines, and coding conventions to minimize risk and ensure a smooth deployment process. Formulate an AI-based runbook that mandates getting IT approval for your application before going live, especially if it involves sensitive data or integrations with critical systems. Conclusion Instead of viewing low code and traditional coding as an either/or proposition, developers should embrace them as complementary tools. Low-code platforms excel at rapid prototyping, building core application structures, and handling common functionalities; meanwhile, traditional coding outperforms in areas like complex algorithms, bespoke integrations, and granular control. A hybrid approach offers the best of both paradigms. It is also important to note that this is not the end of the developer's role but rather a new chapter. LCNC and AI are here to stay, and the smart developer recognizes that resisting this change is futile. Instead, embracing these tools opens up new avenues for career growth and impact. Embracing change, upskilling, and adapting to the evolving landscape can help developers thrive in an AI-based LCNC era, unlocking new levels of productivity, creativity, and impact. This is an excerpt from DZone's 2024 Trend Report, Low-Code Development: Elevating the Engineering Experience With Low and No Code.Read the Free Report
As software engineers, we often pride ourselves on our technical prowess, our ability to solve complex problems, and our mastery of intricate codebases. However, as I’ve learned through personal experience, the true mark of a skilled software professional lies not only in their technical abilities but in their capacity to navigate conflicts and foster effective collaboration. A Story of Clashing Perspectives Early in my career, I found myself embroiled in a heated conflict with a colleague during a critical project. We were tasked with designing a new system architecture, and our differing perspectives on the best approach quickly escalated into a clash of egos and stubbornness. I was adamant that my proposed solution, a microservices architecture, was the optimal choice for scalability and modularity. My colleague, on the other hand, strongly advocated for a more traditional monolithic approach, citing concerns about complexity and potential performance issues. Instead of seeking to understand each other’s viewpoints and finding common ground, we dug our heels in, each convinced of our own superiority. The conflict devolved into personal attacks and blame-shifting, creating a toxic environment that threatened to derail the entire project. It was then that our team lead intervened, recognizing the need for conflict resolution. In a series of one-on-one meetings, he helped me understand the importance of active listening, empathy, and considering alternative perspectives. Lessons Learned: Embracing Conflict Resolution Through this experience, I learned several valuable lessons about conflict resolution as a software engineer: Check your ego: Software engineers often take immense pride in their technical expertise, but this can lead to a stubborn unwillingness to consider other viewpoints. Checking your ego and embracing humility is crucial for effective conflict resolution. Seek to understand, not just convince: Instead of merely trying to convince others of our rightness, we must actively seek to understand their perspectives, concerns, and motivations. Only then can we find common ground and work towards a mutually beneficial solution. Collaborate, don’t compete: Conflicts often arise from a misguided sense of competition, where we perceive differing opinions as threats to our own ideas. Instead, we should approach conflicts as opportunities for collaboration, where diverse perspectives can lead to innovative solutions. Emotional intelligence is key: Technical skills are essential, but emotional intelligence — the ability to recognize and manage emotions, both our own and others — is equally crucial for navigating conflicts effectively. Learn from mentors: Seek out mentors and leaders who excel at conflict resolution, and learn from their techniques and approaches. Observe how they foster open communication, find common ground, and negotiate compromises. Building a Conflict Resolution Toolkit Armed with these lessons, I began actively working on developing my conflict resolution skills. I attended workshops, sought feedback from colleagues, and practiced active listening and empathy in my interactions. Over time, I built a toolkit of conflict resolution techniques, such as: Separating the problem from the people involved Identifying shared goals and areas of agreement Encouraging open and respectful discussions Brainstorming creative solutions collaboratively Compromising and finding a middle ground Involving neutral third parties when needed Today, when conflicts arise in my team, I approach them with a more open mindset, actively seeking to understand different perspectives and working towards mutually beneficial solutions. I’ve learned that effective conflict resolution is not about winning or losing but about fostering an environment of collaboration, trust, and continuous growth. Conclusion Conflict is an inevitable part of the software engineering journey, but how we choose to navigate and resolve those conflicts can make all the difference. By embracing conflict resolution skills, such as emotional intelligence, active listening, and a willingness to compromise, we can transform conflicts into opportunities for innovation, strengthened team dynamics, and personal growth. My own journey has taught me that being a skilled software engineer isn’t just about technical mastery; it’s about cultivating a well-rounded skillset that includes the ability to navigate conflicts effectively. By sharing my story and lessons learned, I hope to inspire fellow software professionals to prioritize conflict resolution as an essential part of their professional development, paving the way for more harmonious collaborations and better software solutions.
As we approach International Women in Engineering Day on June 23, 2024, we must recognize women's remarkable achievements and invaluable contributions to engineering. This global awareness campaign, celebrated annually, aims to highlight the accomplishments of women engineers and encourage more women to pursue careers in this dynamic and impactful industry. In this article, we bring together the insights and experiences of several exceptional women in technology who share their thoughts on the significance of this day and the importance of promoting diversity in the tech industry. The Power of Diversity in Driving Innovation Barkha Herman, Developer Advocate at StarTree, emphasizes diversity's critical role in driving innovation. "Diversity is crucial for driving innovation, not just a buzzword." "When women and underrepresented groups get equal opportunities, their unique perspectives propel technology forward, creating more inclusive products." Barkha highlights the transformative impact of a woman-led company that revolutionized the industry by turning defense robots into the first autonomous vacuum cleaners for homes. She urges us to continue breaking barriers and stereotypes to inspire future generations of women to pursue engineering and STEM careers. Visibility and Representation Matter ChanChan Mao, Developer Advocate at Alluxio, reflects on the growing representation of women in the tech industry and the importance of visibility. "I am always so in awe every time I attend tech events and conferences and see a woman on stage confidently speaking about her area of expertise." ChanChan emphasizes that our intelligence, passion, and innovative minds transcend gender labels and that opportunities for growth and leadership should be equally accessible to all. She celebrates the incredible potential of women in tech and encourages them to overcome gender stereotypes and excel in their careers. Reflecting on Progress and Opportunities Elisa La Roche, Senior Director of Support Engineering at Starburst, views International Women in Engineering Day as a moment to reflect on the progress and opportunities ahead. She acknowledges the female innovators who paved the way for diverse workforces that generate more innovative ideas and achieve higher-quality outcomes. Elisa encourages women who are passionate about engineering and technology to be curious and bold and believe in the importance of their ideas. She emphasizes the significance of developing young women professionals and supporting early education programs to strengthen the engineering field for generations. Celebrating Trailblazers and Inspiring the Next Generation Elizabeth Dove, Digital and Analytics Consultant, finds immense significance in International Women in Engineering Day as it celebrates trailblazing women who have shattered glass ceilings and left an indelible mark on diverse engineering disciplines. She draws inspiration from role models like Stephanie Kwolek, the American chemist and inventor of Kevlar, who emphasized the importance of creating something "bigger than herself" that could save lives. Elizabeth believes that commemorating progress while acknowledging the work still needed to achieve true gender parity is crucial in inspiring the next generation of women in engineering. The Importance of Confidence and Trust in Oneself Margaret Hoagland, VP of Global Sales and Marketing at SIOS Technology, reminds women in engineering to be courageous and trust in themselves. "When you have something to say, know it is worth the wait." Margaret encourages women to pause, reflect, and speak purposefully, emphasizing that their voices matter, especially in STEM fields. Breaking Stereotypes and Advancing Technology Saadia Khan, VP of Engineering and DevOps at Hammerspace, has devoted her career to advancing technology and innovation while defying stereotypes. With notable successes, including patents and contributions to open-source software communities, Saadia believes that International Women in Engineering Day is crucial in showcasing women's invaluable contributions to engineering. She stresses the importance of sharing unique journeys, celebrating remarkable achievements, and igniting curiosity in the next generation of women to explore diverse opportunities in STEM fields. Collaboration for Change Annemie Vanoosterhout, Release and Project Manager at Datadobi, emphasizes the significance of collaboration in achieving gender equality in engineering. "Collaboration is the key to accomplishing change, and it should not be a solitary endeavor." Annemie highlights the potential of remote work in creating more flexible hours and benefiting women balancing family life and job responsibilities. She calls for a collective effort to challenge the status quo and pave the way for future generations of women engineers. The Importance of Community and Representation Amanda Kelly, Streamlit Product Director at Snowflake, provides a personal reflection on the significance of International Women in Engineering Day: "It is an opportunity to recognize not just all the great women who have paved the way and contributed so much to engineering — but to reflect on how the world is changing and where women are having an impact now." She shares her experience of often being the only woman in rooms filled with engineering leaders, emphasizing the importance of this day in connecting with peers and feeling part of a worldwide community. The Importance of Diversity in Building Successful Teams Prasanna Krishnan, Head of Collaboration and Horizon at Snowflake, views International Women in Engineering Day as a reminder of the crucial role diversity plays in building successful teams. "To me, International Women in Engineering Day is a reminder that diversity, on all dimensions, is important to building successful teams. Gender is one of those key dimensions." Prasanna emphasizes that this day serves dual purposes: celebrating achievements and prompting reflection on creating inclusive environments as technology rapidly evolves. She raises an important point about the future of technology, asking, "How do we minimize subconscious bias as GenAI is used to create content?" This question highlights the ongoing need for vigilance and proactive measures to ensure inclusivity in emerging technologies. Conclusion As we celebrate International Women in Engineering Day 2024, we honor the remarkable achievements of women engineers worldwide and reaffirm our commitment to promoting diversity and inclusivity in the technology industry. The insights shared by Barkha Herman, ChanChan Mao, Elisa La Roche, Elizabeth Dove, Margaret Hoagland, Saadia Khan, Annemie Vanoosterhout, Amanda Kelly, and Prasanna Krishnan highlight the multifaceted significance of this day. It serves as a platform for recognition, inspiration, community building, and reflection on the progress and challenges ahead in achieving gender equality in engineering. By showcasing women's unique perspectives, skills, and contributions in engineering, we can inspire the next generation of female innovators and create a more equitable future. Together, let us continue to break barriers, challenge stereotypes, and pave the way for a more diverse and inclusive engineering landscape.
I am an avid reader of technical books, specifically those focused on Cloud, DevOps, and Site Reliability Engineering (SRE). In this post, I will share a list of books that I believe are essential for anyone looking to start or advance their career in Cloud, DevOps, or SRE. These books will help you build a strong foundation in the top skills required in these fields. While this post focuses primarily on Amazon AWS for public cloud, I will also include a few vendor-neutral books. Note: This is my honest opinion, and I am not affiliated with any of these book authors or publishers. How Linux Works, 3rd Edition: What Every Superuser Should Know by Brian Ward and the Linux Command Line, 2nd Edition by William Shotts Learning Linux is the first step before acquiring any other skills in DevOps. These books are excellent for building a strong foundation in Linux internals and getting familiar with the Linux command line, which is essential for excelling in the DevOps space. Python Programming is the second most important skill after Linux for DevOps or SRE. I recommend starting with Python Cookbook: Recipes for Mastering Python 3. Begin with the basics, then move on to object-oriented concepts, databases, APIs, and scripting. Eventually, you should learn about MVC and other design patterns to build comprehensive products, not just scripts. As a production engineer, you will need to develop many infrastructure tools. Solutions Architect's Handbook — Third Edition and AWS Cookbook These books provide a comprehensive view of what an AWS engineer needs to know. They were particularly helpful in preparing for the AWS Solution Associate exam, covering topics such as MVC architecture, domain-driven design, container-based application architecture, cloud-native design patterns, and performance considerations. The AWS Cookbook is excellent for practical labs and contains useful topics like secure web content delivery, dynamic access with security groups, automated password rotation for RDS, and big data solutions. Terraform up and Running by Yevgeniy Brikman Terraform is a widely used infrastructure automation tool in DevOps. This book covers the basics, and intermediate topics like managing state files, creating reusable modules, Terraform syntax, and more. It also addresses the challenge of managing secrets and provides options for integrating with Docker and Kubernetes. The book concludes with strategies for managing Terraform code within a team. Continuous Integration and Deployment This skill is crucial for developers, DevOps, SRE, or any engineer involved in development or operations. Tools like Jenkins, GitLab, and GitHub Actions are commonly used. For Kubernetes environments, GitOps tools like Flux and ArgoCD are popular. I recommend Automating DevOps with GitLab CI/CD Pipelines by Christopher Cowell for those starting with CI/CD. Kubernetes This technology has been trending and growing rapidly. For theoretical knowledge, the Kubernetes documentation is sufficient, but for hands-on learning, I recommend The Kubernetes Bible: The Definitive Guide to Deploying and Managing Kubernetes Across Cloud and On-Prem Environments. Microservice development and deployment are on the rise. For AWS, small microservices-based products can be deployed with ECS but for large-scale products, Kubernetes is required. System Design This is a vendor-neutral skill. I recommend Designing Data-Intensive Applications by Martin Kleppmann to learn how to build reliable and scalable systems. Finally, I acknowledge that merely reading books won't make you an expert. You need to engage in extensive hands-on labs to excel in this field.
This article discusses the skill set that is expected by various companies for the roles of SREs. I have worked as a Site Reliability Engineer for companies such as Amazon, Microsoft Corporation, and TikTok. I have attended numerous interviews for Site Reliability Engineering roles and have interviewed other engineers for SRE roles in the companies where I worked. The role of Site Reliability Engineer can have different titles in various companies. For example, Google calls this role Site Reliability Engineering, Microsoft used to call this role Service Engineering, Amazon calls it Systems Development Engineer, Meta calls it Production Engineering, and a few other companies call this role DevOps. These roles have many common requirements. Let's look into various skills that companies, especially the big technology companies, look for while interviewing engineers for these roles. Coding One of the important skills that SREs need to have is coding since automating repetitive tasks and writing tools to manage infrastructure efficiently is an important part of the SRE job. Companies test the candidate's coding skills through coding interviews. Usually, these interviews tend to be of two types. The first type of coding interview focuses on standing data structures and algorithms. Coding challenges from websites like leetcode or hackerrank will help practicing coding for this type of interview. The second type of coding interview focuses on coding challenges that may emulate some of the day-to-day tasks SREs work on. For example, reading data from files and processing the data, etc. Companies are usually open to candidates using any programming language but, based on my experience, coding in Python would be helpful since it is easy to implement solutions in Python and the majority of SREs use Python for day-to-day automation. System Design The second important skill that an SRE needs to have is a solid understanding of large-scale distributed systems. Companies look for this knowledge by asking System Design questions during the interviews. An example question for a system design interview is "Design a logging service." These questions tend to be vague and it is important to ask a lot of clarifying questions before coming up with a design solution. A few key things to focus on as an SRE while designing a system are Scalability, Reliability, and Security of the system. It is also important to focus on Non Abstract parts of the systems such as capacity planning. Operating Systems A deep understanding of Operating Systems, especially Linux, is an important skill that will be invaluable for an SRE. Companies look for this knowledge through the interviews focused on the Linux operating system. The questions may include various topics such as popular Linux commands to administer and troubleshoot issues on Linux, Linux Kernel, System Calls, troubleshooting performance issues on Linux, and Memory/Network/Disk/Process sub-systems of Linux. Computer Networking A good understanding of various protocols and TCP/IP models is a great skill to have for an SRE as this will help in troubleshooting any production issues or designing infrastructure. A few protocols that are important to have a deeper understanding of are HTTP, TLS, DNS, TCP, UDP, IPv4, IPv6, ARP, ICMP, etc. It is also useful to know which tools can be used to analyze each of these protocols. SRE Best Practices Companies often look for candidates who understand the SRE best practices related to topics such as observability (alerts, metrics, logs, traces, dashboards, etc.), incident management, change management, automation, operational excellence, and capacity planning. The topics may also include concepts such as SLI/SLA/SLO, MTTR/MTTA/MTTI, etc. Work Experience This category includes questions related to the kind of projects that you have worked on in your current and previous jobs. Interviewers typically ask for a specific project that the candidate worked on in the past and dive deep in to understand various aspects such as the complexity of the project, challenges faced during the project and how the candidate overcame those challenges, and what the candidate learned from any failures from the projects. Infrastructure A key responsibility of SREs is to design, deploy, and maintain various infrastructure components such as Kubernetes, SQL databases, non-SQL databases, message queues, load balancers, Content Delivery Networks, etc. Knowledge and experience working on various major cloud services such as Amazon Web Services(AWS), Microsoft Azure and Google Cloud Platform(GCP) is another important aspect that companies look for in the candidate. Depending on the role where the position is in, companies may assess the engineer's understanding of one or more of these infrastructure components. Troubleshooting Being part of the on-call rotation is an essential part of an SRE's job. Effective troubleshooting skills are important to have since resolving user-impacting issues under time pressure is critical for maintaining the uptime of the services. SREs combine their knowledge of various technologies, and systems and their experience operating services in production to troubleshoot issues. Companies assess troubleshooting skills by asking how the engineer would solve a given hypothetical issue. Approaching the troubleshooting problem methodically and showing the understanding of distributed systems is important in this type of interview. Behavioral Every company has its unique culture, values, and leadership principles. The behavioral interviews focus on asking questions to probe whether the engineer matches the company's culture. These questions tend to focus on how the engineer acted in the past in a similar situation. An example question is "Tell me a scenario when you had to disagree with your manager." A popular method to use to answer such questions is the STAR method. STAR refers to Situation, Task, Action, and Result. Conclusion Site Reliability Engineering role is a challenging role where one needs to have a deeper understanding of various technologies. By focusing on these key skills one can become a great Site Reliability Engineer crack challenging technical interviews and have a rewarding career. Happy interviewing!
There is no shortage of technical events such as conferences, meetups, trainings, hackathons, and so on. These events are a great way to learn new things, connect with people, and share knowledge with others. One of the most valuable and exciting ways to share knowledge is by giving a technical presentation. Today, we will look at how to submit a technical presentation for an event and get some personal recommendations from me, as well. Though we will specifically gear the information for the NODES 2024 call for proposals, nearly everything discussed can be applied to other technical events and speaking engagements. Let's get started! Event Research No matter what event you are interested in, do your research! Find out about the event, their goals, the audience, and the types of presentations they are looking for. This information will help you decide if the event is a good fit, as well as help you tailor your submission to the attendees. NODES 2024 is devoted to technical presentations related to graph data and technologies, with a special focus on community stories and perspectives. The audience will be looking for content to inspire ideas, learn how to do/build something, gather tips and tricks, and add skills to their toolbelt for business or personal projects. Developers, data scientists, and other technical professionals are the core audience. NODES 2024 Promo Now let's decide whether to speak. Speakers Wanted! Deciding to submit a presentation to an event is a commitment. It can be intimidating to put yourself out there and share your knowledge with others, plus the effort and time it takes to build and polish your content. But it can also be a rewarding and invigorating experience. I always remind myself that my experience and learning journey is unique and can hopefully inspire or help someone else. Everyone can contribute value to a conversation! As a speaker, you will have the opportunity to share your expertise, connect with others, and learn from the community. Yes, a speaker can (and should) learn from attendees. Understanding what problems others are solving or where gaps are can help you learn more about your topic, plus improve your future content. :) NODES 2024 will be virtual, so no travel or logistics are required. The event will be held over 24 hours, and sessions will be recorded and available for attendees to watch on-demand after the event. So you will have the opportunity to reach a global audience, as well as promote or provide evidence for your efforts! So, if you are thinking about submitting a presentation to an event, go for it! And if you have decided to submit, congratulate yourself on being courageous and taking the first step. If you're still on the fence, take some time to think about it and consider reaching out to the event organizers or other speakers for advice. I'm always happy to chat about speaking and help others get started! Deciding on a Topic Choosing a topic for your presentation can be challenging. You want to pick something that you are passionate about, that you have experience with, or want to learn about. Try to pick things you like or love. That enthusiasm will come through in your presentation and help keep you motivated as you prepare. If you're interested in the topic, it's likely that someone else will be, too. What projects or technologies are you currently working on? What problems have you solved or are trying to solve? What tools or techniques have you found helpful? What do you wish you knew when you started working with a technology? What mistakes do you want to help others avoid or learn from your experience? For NODES 2024, the event is focused on graph data and technologies to interact with graphs. Here are some topic ideas to get you started: How graphs solve a specific problem (broad or narrow) How to build applications that interact with a graph How graphs integrate with AI/GenAI Mistakes or pitfalls to avoid with graph databases, tools, use cases, and more How to interact with or get data into or out of a graph database Working with graphs in a larger system or architecture (including improving operations) This list could continue on, but hopefully, these give some good starting points. Once you have a topic in mind, it's time to write a session abstract and submit it! Session Abstract and Submission The session abstract is a short description of your presentation that will be used to promote your session to attendees. It should be clear, brief, and interesting. It should give attendees an idea of what to expect from your presentation and why they should attend. There are a few things I always look for when I'm on a program committee choosing sessions for an event. Title Aim for a descriptive phrase that gives attendees an idea of what your presentation is about. If you have a clever or catchy title, that's always a plus (but not required), and make sure it still states your topic. Abstract This is the core of your submission. It should detail what you will cover in your presentation, such as the problem you are solving, what aspects of a technology are involved, what tools could be used, and what attendees will learn. Notes for the Committee Include any additional information for the committee here. This could be special requirements or why your content is a good fit for the event. I like to include why I felt my topic is important and/or how my experience could help others. Keep this part brief, but it can help differentiate when there are multiple sessions with similar topics. Bio For a bio about yourself, keep it short, but be sure to outline your experience and specialties. If you have content or socials, highlight 1-2 accounts so that attendees or program committee members can learn a bit about you. There are also a few other things to keep in mind when writing your abstract. Audience Who is your presentation for? What's their level of experience? What will they gain from attending your session? Choose wording and technologies that resonate with your audience to help readers connect with your content. Format/Length Will your presentation be a talk, a demo, a workshop, a panel, or something else? Are you giving a demo or live coding? Sometimes you select a format on the submission form, but you can also mention sub-formats with terms like live demo, hands-on, interactive discussion, etc. I also recommend writing your abstract in a text editor or word processor first. This way, you can easily check for spelling/grammar errors, and you can save your work to reuse or reference later. Editors also typically include work/character counting tools to help track length. Once you have your abstract written, you can copy and paste it into the submission form. Tips and Tricks There are a few things that can help make your abstract stand out and increase your chances of being selected. On the flip side, there are a few things to avoid that can hurt your chances. Be Descriptive + Brief Provide enough details within 1-3 paragraphs so the program committee and attendees get a clear picture of what you will present. If you use jargon or acronyms, explain them. Even if attendees to your session are familiar with them, the program committee may not be, and that can make them feel less confident accepting a session. You can always explain acronyms in the notes section if you're unsure. Be Inviting You don't need fancy or fluent language, but a genuine passion or interest in your topic can go a long way. If you are excited about your topic, it will show in your abstract and presentation. Be Honest Developers (especially) don't like to be misled. Avoid hiding negative aspects and sales or marketing tactics. Honesty and authenticity build respect. There are also some things to avoid when it comes to abstract submissions. Minimal Effort People can tell when you don't care. One-line abstracts and bare minimum details can tell readers that you don't care about the topic or helping others learn. It's okay to be brief, but make sure to provide enough information to be helpful. In It for Me Attendees are giving up their time and focus to attend your session, event organizers are pouring money and time into the event, and companies are sponsoring the event or employees. They deserve valuable content in return. It's not about the speaker, it's about the attendee. Speakers are only valuable if they have an audience. Don't cause readers to be like Picard and Riker here. ;) For NODES 2024, all of these things apply, but there are a couple of additional things to keep in mind. The event is focused on graph data and technologies to interact with graphs. Be sure to mention how graphs are involved in your topic (I've seen abstracts that don't mention them at all!). Also, NODES is meant to showcase community stories and real-world uses, so be sure to include your honest, unique experience or perspective in your abstract. Sessions are geared for technical audiences, so try to include aspects such as architecture, demos, code, tools, solutions, and so on. Even if you don't write live code, you can still show code snippets or tool screenshots to help illustrate your points. Wrapping Up! Today, we walked through how to submit a technical presentation for an event. We discussed doing your research, deciding on a topic, writing a session abstract, and preparing for your presentation. We also covered some tips and tricks for writing a valuable abstract that will hopefully increase your chances of being selected. If you are interested in submitting a presentation to NODES 2024, the call for proposals is open until June 15, 2024. You can find more information and submit your presentation here. Happy coding and best wishes on your submissions!
The Importance of Soft Skills While technical competency is undoubtedly crucial, many experienced developers often overlook the significance of soft skills in their pursuit of career advancement. These non-technical abilities are the glue that holds teams together and enables effective collaboration, communication, and problem-solving. Some key soft skills that senior engineers should cultivate include: 1. Communication The ability to communicate complex technical concepts clearly and concisely, both verbally and in writing, is invaluable. Senior engineers often act as translators between stakeholders and technical teams. 2. Teamwork and Mentoring Leading by example, fostering collaboration, and guiding junior team members are hallmarks of senior engineers. They create an environment that encourages learning and growth. 3. Problem-Solving Senior engineers excel at breaking down complex problems into manageable components and devising innovative solutions. They can think critically and approach challenges from multiple perspectives. 4. Time Management With multiple projects and responsibilities, senior engineers must prioritize tasks effectively and manage their time efficiently to meet deadlines without sacrificing quality. Beyond the Code: Broader Perspectives In addition to soft skills, senior engineers need to develop a broader understanding of the business and the industry they operate in. This holistic view enables them to make more informed decisions and align their work with organizational goals. Business acumen: Understanding the company’s business model, target market, and competitive landscape allows senior engineers to appreciate the broader context and impact of their work. Industry trends: Staying up-to-date with emerging technologies, best practices, and industry trends ensures that senior engineers can adapt and evolve with the ever-changing technological landscape. Cross-functional collaboration: Software development rarely happens in a vacuum. Senior engineers must collaborate effectively with designers, product managers, and other stakeholders to deliver comprehensive solutions. Continuous Learning and Growth Mindset Perhaps the most crucial aspect of becoming a senior engineer is the willingness to embrace continuous learning and maintain a growth mindset. Technology evolves rapidly, and complacency can quickly render even the most experienced engineers obsolete. Seek out opportunities to learn from colleagues, attend conferences and workshops, and stay curious about emerging trends and technologies. Cultivate a mindset of humility, recognizing that there is always more to learn and room for improvement. Contribute Beyond Code As developers progress in their careers, their impact extends beyond writing code. Senior engineers often take on leadership roles, mentoring junior team members, contributing to architectural decisions, and shaping the overall technical direction of projects. Embrace opportunities to share knowledge through documentation, blog posts, or workshops. Participate in code reviews, providing constructive feedback and fostering a culture of continuous improvement. Engage in open-source projects or community initiatives, further expanding your influence and contributing to the broader tech community. Conclusion Becoming a senior engineer is a journey that requires dedication, perseverance, and a holistic approach to skill development. While technical expertise is undoubtedly crucial, it is merely the foundation upon which a well-rounded senior engineer is built. Invest in cultivating soft skills, broadening your perspectives, embracing continuous learning, and contributing beyond code. By doing so, you’ll not only enhance your chances of career advancement but also become a more valuable asset to your team and organization, capable of driving innovation and delivering impactful solutions. Remember: the path to becoming a senior engineer is not a destination, but a continuous journey of growth, adaptation, and learning. Embrace the challenge, and you’ll unlock a world of opportunities and personal fulfillment in your career.
Miguel Garcia
Sr Engineering Director,
Factorial
Jade Rubick
Engineering advisor,
Jade Rubick Consulting LLC
Manas Dash
Software Development Engineer,
TESCO
Scott Sosna
Senior Software Engineer II,
Datasite