Title Image

Uncategorized

The Art of Offshore Engineering: A Comprehensive Guide for Sustainable Growth

In the software development industry, the strategic move to engage offshore engineering teams stands as a persistent trend, offering tantalizing prospects of cost control and access to a vast pool of global talent. With a career spanning nearly three decades in this sector, I have noticed that the path to offshore collaboration isn’t a straight trajectory. It requires not only a keen understanding of the logistical and managerial nuances but also a holistic approach that fosters innovation, critical thinking, and symbiotic growth. In this blog post, I distill my observations and experiences into a comprehensive guide that aims to steer your offshore engineering venture towards sustainable success, emphasizing the importance of nurturing a culture that transcends the ‘build-to-spec’ mindset to form a true collaborative partnership.


Strategies for Offshore Engineering Success

1. Building Trust and Fostering Mutual Respect

Cultivate Relationships
Forge bonds that go beyond transactional interactions. Understand the culture and values of your offshore team, appreciating the richness and diversity they bring to your project. One way to do this is by initiating regular team-building activities that are inclusive and considerate of the diverse cultures represented in your team, fostering unity and understanding. For example, host brown-bag lunches where teammates from another country get a chance to tell you something about their country, personal lives, families, or hobbies. Doing this, I once learned of a new sport I had never heard of. (It’s called Padl, and it can get pretty crazy!)

Transparent Communication
Foster a culture of openness where concerns and ideas can be voiced without hesitation, paving the way for an environment that thrives on collaboration and mutual respect. Note that non-native English speakers can be intimidated doing this live and in person, and may feel more comfortable with offline, written forms of this exercise, or when they can otherwise prepare their thoughts ahead of time for discussion.

2. Optimizing for Collaboration

Encourage Critical Thinking
Refrain from restricting offshore engineers to “build-to-spec” roles. Encourage them to be critical thinkers who can enhance and sometimes challenge the defined specifications, cultivating a fertile ground for innovation. Grant them a substantial degree of autonomy in shaping the “how” of your project, aligned with your clearly defined “why” and “what”. This can involve allowing the team to break down user stories into tasks and take the lead in estimating the level of effort required, fostering a sense of ownership and engagement.

Encourage them to actively participate in devising strategies and solutions, instead of merely following a prescriptive set of tasks. This could manifest as regular collaborative sessions where they can propose innovative approaches or suggest enhancements to the existing plans, based on their expertise and insights.

By promoting a culture where offshore teams are empowered to contribute their critical analyses and creative solutions, you foster a more dynamic, responsive, and successful project environment, tapping into the collective intelligence and capabilities of a truly integrated team.

Eliminate The Telephone Game
A pivotal step towards nurturing a successful offshore collaboration is doing away with the ‘telephone game’ – a situation where communication with the development team is mediated through several layers, leading to potential misunderstandings, delays, and loss of vital information.

At the outset, ensure that you are not contracting a firm where your interaction is limited to just one individual while the rest of the team remains behind the scenes. This not only fosters high turnover rates among the developers but also results in a considerable loss of investment in their knowledge of your system, compounded by a lack of transparency that can hinder the project’s progress.

While having an engagement manager for handling relationship aspects at the corporate level is fine, it is vital to establish direct lines of communication with the individuals who are actively working on your project. Make an effort to know the offshore team members by name and encourage regular interaction between both teams.

By fostering direct communication, you promote a transparent working environment where information is shared more efficiently and team members are more invested in the project’s success. It reduces the risk of misunderstandings and ensures that the offshore team can directly contribute their insights and expertise to the project, creating a more collaborative and successful partnership.

Mind the Timezones
As you venture into offshore collaboration, one pivotal aspect to consider is the management of time zones. Ensuring that there is a substantial overlap of core working hours between your domestic and offshore teams can foster real-time collaboration and spontaneous problem-solving. This aspect might influence the countries you choose for offshoring, aiming for a balance where collaborative synergy is not hampered by wide timezone differences. Strategic planning in this regard can culminate in a cohesive and highly productive team dynamics, regardless of the geographical distances. For example, US-based companies may find it much easier to collaborate with teams in the Americas than in Asia or Europe.

3. Leveraging Technology Intelligently

Collaboration Tools
Employ modern collaboration tools to streamline communication and workflow, ensuring seamless interaction across different geographical locations. Tools such as Slack for real-time communication, Jira for project management, Confluence for documentation, and GitHub for code sharing and collaboration are pivotal in creating an integrated workspace where teams can work cohesively and efficiently. These platforms facilitate the easy tracking of project milestones, sharing of vital information, and fostering open dialogue, which are key to the success of offshore engineering ventures. Another way to achieve high-bandwidth, asynchronous communications is with pre-recorded videos and screencasts. Invest in tools and services that make videos, demos, bug repros, etc. easy to record, share, and find.

Security Protocols
Implement stringent security protocols to protect sensitive information, fostering a secure yet collaborative workspace. In cases where code and/or data must remain within the boundaries of your home country, utilizing solutions like Virtual Desktop Infrastructure (VDI) or GitHub Codespaces can offer secure, controlled environments that facilitate collaboration without compromising on data sovereignty. These tools, along with multi-factor authentication and regular security audits, form a robust line of defense. It’s also vital to train the offshore team on the nuances of these platforms and the company’s security policies, fostering a proactive approach to maintaining the integrity and confidentiality of your project.

4. Integrating Onboarding and Skill Development

Comprehensive Training
Invest in skill development to bridge any knowledge gaps, ensuring your offshore team is abreast with the latest trends and technologies. This could include facilitating workshops on the latest programming languages, offering courses on emerging technologies, or organizing seminars with industry experts. For instance, initiating regular training sessions on using modern tools like Docker or Kubernetes, and fostering a culture of continuous learning through platforms such as Coursera or Udemy, can help in nurturing a team that is well-equipped to contribute effectively to your projects. This proactive approach to training not only enhances skill sets but also fosters a culture of knowledge sharing and growth. It also helps with employee/contractor retention when they know you are willing to invest in them.

Smooth Integration
Facilitate a smooth integration of the offshore team into your company culture and values through comprehensive onboarding processes. Key strategies to achieve this include setting up mentorship programs where existing team members guide the newcomers, and organizing regular team meetings to update on project progress and company developments. Additionally, fostering open channels for feedback and suggestions, and creating platforms where team members can collaborate on ideas or projects, can help in building a cohesive and inclusive work environment. It’s essential to not only integrate the offshore team technically but also culturally, encouraging them to be active participants in your company’s community and initiatives. Having regular one-on-ones with offshore teammates is a great way to make sure they understand they are valued, and not just a nameless cog in your offshore machine.

5. Agile Process Alignment

Alignment with Established Processes
Ensure your offshore team is well-aligned with your established development methodologies, fostering a harmonious working relationship. This entails clearly articulating the existing processes and workflows to the offshore team, possibly through detailed documentation and training sessions. Consider hosting workshops or collaborative sessions where teams can work together to understand and adapt to these methodologies. Furthermore, creating channels for ongoing communication can aid in real-time alignment and adjustment, encouraging a collaborative approach to process adherence and evolution. This alignment facilitates a smoother collaboration and helps in averting potential roadblocks that may arise due to process disparities, fostering a synergistic working environment.

Agile Adaptation
Embrace an agile approach to promote a collaborative and responsive work environment, where adaptability is the linchpin of success. It’s important to realize that a well-functioning agile workflow extends beyond flexible product requirements to also encompass adaptations that cater to the strengths and preferences of your specific team. This might involve tailoring communication strategies, modifying project management techniques, or adjusting delivery timelines to suit the dynamics of your team. Regular retrospectives can be a key tool here, offering a platform for the team to reflect on what is working well and what might need adjustment. Essentially, fostering an agile environment means cultivating a space where iterative enhancements and collaborative problem-solving are the norms, thereby nurturing a team that can swiftly navigate the ever-changing project landscapes with agility and finesse.

6. Legal and Financial Prudence

Contracts and Agreements
Draft clear contracts that outline responsibilities, deliverables, and liabilities, establishing a solid legal groundwork for collaboration. In this endeavor, several crucial aspects should be meticulously attended to:

  • Understanding Copyright and Work Product Ownership Rights: It’s vital to acknowledge that laws pertaining to copyright and ownership of work products can vary significantly between countries. Ensure to conduct a detailed review of the pertinent regulations in the country where your offshore team is based, and structure your contract accordingly to prevent surprises and protect your interests.
  • Cultural Sensitivity to Holidays and Leave Policies: Different cultures have distinct holiday calendars and leave policies. To prevent unexpected disruptions, get a detailed vacation schedule codified upfront, incorporating a clear understanding of the holiday patterns and leave entitlements customary in the offshore team’s locale. This promotes a smooth workflow and helps in planning project timelines more effectively.
  • Mitigating the Risk of “Double-Dippers”: Beware of individuals who might be engaged in “double-dipping”, whereby they commit to multiple full-time contracts and fail to deliver the expected output on any. Include clauses in the contract that clearly specify the expected commitment levels and mechanisms to monitor performance regularly, thereby mitigating the risk of subpar contributions and potential project delays.

By crafting a comprehensive contract that considers these nuances, you create a framework that facilitates a transparent, respectful, and mutually beneficial partnership, minimizing potential conflicts and fostering a successful offshore collaboration. Good fences make good neighbors.

Compliance Vigilance
Maintain a strict vigilance over compliance to adhere to both home and host country regulations, fostering a lawful and ethical working relationship. This entails not only observing legal requirements but also industry standards and best practices which might vary considerably between regions. For instance, data protection laws such as GDPR in Europe have stringent guidelines on personal data usage and require adherence to specific protocols. Similarly, labor laws regarding working hours, overtime pay, and employee benefits can vary significantly and should be thoroughly understood to avoid non-compliance.

One strategy to ensure continuous compliance is to establish a dedicated compliance team or officer, tasked with the regular monitoring of legal developments and adjustments to company policies as required. Moreover, employing techniques such as regular audits, training programs, and consultations with legal experts can further ensure that your offshore engagements remain within the confines of prevailing laws and regulations. By fostering a culture of compliance vigilance, you safeguard your project from legal repercussions and build a reputation as a responsible and ethical business partner.


Points of Caution for Startups

As budding companies venture into the realm of offshore collaborations, there are several crucial cautionary points to bear in mind to sidestep potential pitfalls and facilitate a successful partnership.

First and foremost, small companies lacking robust technical and project management foundations might find offshore engagements challenging. The temptation to save costs with lower-priced labor might lead to the oversight of vital project management components. For instance, without well-defined product specifications, offshore teams might only deliver to the stated requirements, missing the subtleties or improvements that a more integrated team might capture.

To mitigate this, consider postponing offshore engagements until you have a solid internal structure with well-defined processes and experienced management in place. If you must start offshoring early, be prepared to invest in detailed project specifications and maybe even hire experienced project managers with a knack for meticulous planning and execution.

Furthermore, emerging companies should be cautious about treating offshore developers as fungible resources. Instead, strive to integrate them as first-class citizens within your team, facilitating a setup where they have direct access to individuals who understand your business nuances in their timezone, language, and culture. This might include, for example, hosting regular knowledge-sharing sessions or establishing mentorship programs to foster a sense of unity and collaboration.

By approaching offshore engagements with a careful and informed strategy, even emerging companies can build successful, mutually beneficial relationships that augment their growth and capabilities.


Conclusion

Embarking on the offshore engineering journey requires more than just geographical expansion and cost-saving strategies. It entails fostering a partnership that thrives on mutual respect, collaboration, and critical thinking. Through well-defined specifications and nurturing an environment of innovation and inclusivity, your offshore venture can blossom into a mutually enriching journey, steering your projects towards unparalleled success. Remember, the aim is to forge a symbiotic relationship that, nurtured well, can transcend borders to foster innovation and success in the long run.

👋 Offshore collaborations can be complex, but you don’t have to do it alone. Facet Digital is equipped to help you establish critical foundations for offshore success, assisting you not only in laying the groundwork but also in building a proficient offshore team aligned with your goals. Ready to transform your offshore strategy? Contact us now.

technology leadership

Building Technical Leadership: The Role of Principal Engineer at Facet Digital

At Facet Digital, we believe that outstanding software engineering goes beyond writing great code. It’s about building technical leadership and nurturing technical leaders who can drive innovation while upholding the high standards our clients expect. Today, we share our perspective on one of our most crucial leadership roles: the Principal Engineer.

 

Evolution of Technical Leadership

When we founded Facet Digital, technical leadership resided solely with the founding partners, Scott and Jeremy. As we’ve grown, we’ve carefully designed our leadership structure in order to scale our ability to consistently deliver superior results. Our Principal Engineer role represents a critical piece of this. It’s a position we’ve intentionally developed to maintain our rigorous standards while expanding our impact and building technical leadership across the organization.

 

Beyond the Staff Engineer

A Principal Engineer at Facet builds upon the foundation of our Staff Engineer role. For context, here’s how we define these positions in our internal handbook:

"A Staff Engineer is a senior technical contributor who works on complex projects, often leading efforts in their area of expertise without the direct management of teams. They are highly skilled engineers who influence technical decisions and mentor other engineers. The role is more hands-on and focused on specific technical challenges compared to the Principal Engineer, who often has broader responsibilities."

 

The Principal Engineer role takes this further:

"A Principal Engineer is a senior individual contributor with broad technical influence across the company. They work on the most critical projects, drive innovation, and set engineering standards. While similar to a Staff Engineer, a Principal Engineer typically has a wider scope, often impacting multiple teams or the entire engineering organization, and they may take on some strategic responsibilities without having direct reports."

 

Impact Across Projects

One of the unique aspects of our Principal Engineers is their ability to influence quality and innovation across multiple projects. As a client, even if your project team doesn’t include a dedicated Principal Engineer, you benefit from their oversight and guidance through:

  • Technical standards and best practices they help establish
  • Architectural reviews and guidance
  • Cross-project knowledge sharing
  • Quality assurance and mentorship

 

Building technical leadership at Facet Digital also means equipping Principal Engineers with the tools and opportunities to shape the future of engineering within our organization.

 

Career Growth at Facet

For engineers joining Facet, the Principal Engineer role represents a clear path for career advancement. It’s a position that offers:

  • Technical leadership without moving into management
  • Broad influence across multiple projects and teams
  • Exposure to wide variety of technologies, domains, and industries
  • Opportunity to shape technical strategy
  • Balance of hands-on development and strategic work

 

Looking Forward

As Facet continues to grow, we’re selectively expanding our Principal Engineer tier. Our recent internal promotion of one of our Staff Engineers into this role reflects both our commitment to growing talent from within and our high standards for technical leadership.

We’re always interested in connecting with engineers who aspire to this level of technical leadership or who have already demonstrated these capabilities in their careers. At Facet, you’ll find a culture that values technical excellence, thoughtful leadership, and continuous growth.

 

👋 If you’re interested in learning more about technical leadership opportunities at Facet Digital, or if you’re looking for a consulting partner that takes technical excellence seriously, we’d love to connect.

2023 09 09 12 23 18

Slow is Smooth; Smooth is Fast

“Slow is smooth; smooth is fast.”

This adage is a cornerstone in military training and precision sports. It encapsulates the principle that meticulous and deliberate actions, learned through repetition and deliberate practice, lead to swifter and more successful outcomes in the end. It champions the notion that fostering patience and delving deeper into understanding a task can expedite the journey to achieving it, steering clear of the pitfalls that haste often brings in its wake.

In software development, this wisdom reverberates with equal significance. The frenzied pace of progress can sometimes eclipse the fundamental principles of smooth, fluid, and predictable execution. Yet, adhering to quality and precision from the very outset often propels us towards our goals faster than a hurried approach would. This ideology nudges us to value excellence over sheer speed, recognizing that a seemingly slower route often manifests as faster and more reliable results over time.

To integrate this philosophy into software development, teams should invest in:

  1. A Clear, Shared VisionNothing slows you down more than going fast in the wrong direction.

    Establish a clear and unified vision before the onset of the project. This involves understanding the “why” and the “what” of the end goals, distinguishing essential features from those that can be deferred, and achieving team alignment prior to diving into execution.

  2. Automation and Rapid Feedback Cycles – The earlier you catch it, the cheaper it is to fix.

    Embed a culture of automation and feedback from the first day of development. Use tools that facilitate swift feedback loops, enabling bugs to be identified early in the “assembly line”. Use monitoring, alerting, logging, A/B testing, canary deploys, and feature flags to find issue in production before your customers do. Conduct QA acceptance testing to stop defects from ever making it to production. Use robust test code coverage to catch bugs in CI/CD stages, before they make it to the QA team, or even to other developers. Provide developers a robust, prod-like developer bench-testing environment so that they can ensure their code functions properly before it even gets to CI. Use modern IDE tools that can catch bugs and issues in real time as you type before you ever try to run it. With tooling, test coverage, deployment automation, non-prod environments, and other tooling, you can prevent a slew of costly setbacks down the road and ensure smoother progress toward the end goal.

  3. Code Quality PracticesMake it easier to do the right thing that it is to take shortcuts.

    Allocate time to implement static analysis tools such as linters, complexity analyzers, open-source dependency scanners, security scanners, and style/convention enforcers early in the process. Establish practices like draft pull request, PR templates, required peer code reviews, and ADRs (Architecture Decision Records). Although stopping to lay these foundations might extend initial timelines slightly, they reap dividends in the long run by fostering a culture of quality and efficiency, ultimately saving time and resources.

💡 It’s important to recognize that certain elements of project development flourish when approached as calculated investments in smoothness and consistency of execution, rather than hastily attached solutions in response to urgent crises or market forces pulling you in all directions. An early focus on ‘smoothness’ can preclude the necessity for rushed, reactionary steps later, thereby optimizing both time and resources.

👋Need help achieving excellence in execution? Contact Facet Digital today to find out how we can help you refine the fundamentals and start firing on all cylinders again.

DALL·E 2023 08 28 10.38.34 matt groening style cartoon drawing of the side view a cheetah sitting at a desk writing software with a giant thick iron chain holding him back digi

Top 10 Software Developer Productivity Killers

If you’ve recently found yourself trapped in a catacomb of chaotic code or entangled in a web of woefully unclear requirements, fret not! Bob’s journey through the perilous pitfalls of developer productivity is the adventure you’ve missed. Over the past two weeks, we’ve run a daily series of blog posts about the most prevalent software developer productivity killers we, at Facet Digital, often see in the engineering teams we are hired to assess. Some of these have do to with the technical team and their decisions, and some of them have to do with the business support around them.

Here’s a quick recap:

01Useless MeetingsBreaking up the Maker’s focus time
02Open-Plan OfficesNoise and visual distraction disrupt concentration
03Technical DebtShort cuts now make innovation take longer later
04Dead CodeHours wasted maintaining or searching through garbage
05Too Many Status ReportsTalking more about work than doing the work
06Unclear RequirementsSpending too much time guessing at the wrong intent
07Poor Branching StrategyWorking in too large of chunks and not getting feedback quickly
08Unrealistic / Arbitrary DeadlinesDemoralizing and stifling creativity
09MicromanagementNot letting the brains you hired use their brains to the fullest
10Poor DocumentationMaking the next dev guess and explore without a map

Familiar foes? If these productivity antagonists have been causing chaos in your dev-life, contact us for some superhero assistance.

🙋‍♀️ Encountered another productivity villain we missed? Share in the comments which dastardly devils resonate with you and any others lurking in the shadows!

DALL·E 2023 08 25 14.30.55 a comic strip style picture of a muscley super hero whos custom uses the team colors of the Seattle Seahawks with his chest out with no logo on his

Tech Docs: The Unsung Hero

Software Developer Productivity Killer #10: Lack of Good Docs

Picture this: Bob, having navigated through unclear requirements, suffocating micromanagement, and the pressure of unrealistic deadlines, comes face-to-face with… a wall. Not just any wall, but a vast, blank barrier that lacks information, direction, and clarity. This, my friends, is the wall of poor documentation.

👮‍♀️ Why Documentation is Non-Negotiable

Documentation isn’t just a sidekick; it’s the hero of software development. It’s the translator between developer lingo and the rest of the world, and between past developers and their successors.

  1. Onboarding Obstacles: New developers spend countless hours, not in producing quality code, but in decrypting existing systems, trying to understand processes, and setting up their environment. Good documentation is like a lighthouse, guiding them safely to shore.
  2. Maintenance Mayhem: Without proper documentation, diving back into a codebase becomes a guessing game. Fear of changing code creeps in, and the result is stagnation, hesitation, and decreased productivity.
  3. The Wrong Kind of Adventure: Developers love problem-solving, but being forced to explore a project blindfolded because of lack of documentation? That’s not the kind of adventure they signed up for.

📄 Essential Characteristics of Good Documentation

  • Dated and Versioned: Knowing when information was documented and which version it pertains to can be invaluable. It is imperative to be able to see and track changes to a document over time – who, what, and why.
  • Searchable and Navigable: Use platforms like Confluence or Slab to ensure your documentation can be quickly located, through both searching and intuitive navigation.
  • Templated Consistency: Uniformity in documents, like design doc templates or post-mortem templates, speeds up comprehension.
  • Location, Location, Location: Docs should reside close to their point of use. READMEs inside repositories, FAQs in the help section, architecture diagrams in wikis, and so on.
  • Stay Fresh: Outdated or irrelevant documentation can be worse than no documentation. Regularly review and prune as necessary.

🛥️ The Onboarding Advantage

A pro tip? Have your newest hires follow and enhance the onboarding documentation. This ensures a fresh set of eyes refines the process consistently.

And for a truly revolutionary approach? Consider integrating a bespoke private LLM AI system. Train it on your documentation and watch as developers simply query the system to get accurate, traceable answers straight from your archive. It’s an innovation Facet Digital is passionately pioneering.


📣 To all the leaders and developers out there, documentation is the unsung hero of productivity. Let’s give it the spotlight it deserves. And if you’re looking to revolutionize your documentation strategy, figure out how to weave it into your dev process seamlessly, or integrate cutting-edge AI solutions, please reach out. We’re here to guide your team towards unparalleled productivity.

Just joining us? Take a journey from the start with our series on developer productivity killers, beginning with the very first post.

DALL·E 2023 08 24 10.47.12 colored pencil drawing of a software developer wearing a hoodie with the hood down sitting at a desk with a computer looking at code with amanager w

The Micromanagement Menace

Software Developer Productivity Killer #9: Being Micromanaged

Oh, Bob. We’ve seen him weather the storm of unclear requirements, battle the beasts of artificial deadlines, and navigate the treacherous paths of poor branching strategies. But, as he sits at his desk, diligently tapping away at his code, he feels a shadow looming over him. It’s not a faulty server or a nasty bug; it’s something far more foreboding: the ever-watchful eyes of a micromanager.

🔬 Micromanagement: A Creator’s Kryptonite

Software development isn’t just a profession; it’s an art. Coders, like artists, need space to think, to test, to experiment, to create. Imagine for a moment, a world where Shakespeare was questioned at every sonnet line or where Da Vinci was advised on every brushstroke. Absurd, right? Then why do it to developers?

  1. The Trust Deficit: Micromanaging sends a clear message: “I don’t trust you.” If a developer feels distrusted, their motivation tanks faster than a lead balloon. They are professionals, having trained and practiced their craft. They deserve autonomy and trust.
  2. Turned-off Thinking Tanks: By giving developers overly specific instructions, you inadvertently switch off their innovative minds. The end result? Instead of a creatively crafted solution, you get a mundane, to-the-point output, devoid of innovation or flair. And if a single piece of your ultra-specific instructions fails? The domino effect kicks in, leading to bugs, skipped functionalities, and costly reworks.
  3. The Creativity Killer: Micromanagement suffocates the very essence of software development – creativity. Let’s not forget, you hired Bob for his ingenious coding skills, not to be a mere executor of over-detailed directions.

🤔 Are You a Micromanager? Signs You Might Be

  • You often think, “It’ll be faster if I just do it myself.”
  • You want to review and approve every minor decision or change.
  • You spend more time overseeing your developers than strategizing or planning.
  • You demand constant updates and have an insatiable thirst for progress reports.
  • You provide overly detailed instructions, often explaining how to do something instead of what needs to be done.

If you’re nodding along to more than a couple of these, it might be time to take a step back. Remember, you hired experts. Trust them to be just that. Remember, Bob thrives when he’s trusted and valued. As a leader, it’s crucial to provide direction, not domination. Embrace the brilliance of your team, and watch them turn your visions into virtual victories.

So, you still don’t get the results you desire without micromanaging? Perhaps it’s not about supervising more closely but improving the dynamics. Either you need to refine your team’s skills or you need to better define your directions and grant them more autonomy.

Need assistance on either front? Whether it’s bringing adept developers to bear or establishing effective communication strategies within your team, Facet Digital can guide the way. Reach out, and let’s keep those developer engines running without any unnecessary hiccups.