diff --git a/apps/website/public/images/ai-adoption-without-burning-your-team.png b/apps/website/public/images/ai-adoption-without-burning-your-team.png new file mode 100644 index 00000000..eafad4f5 Binary files /dev/null and b/apps/website/public/images/ai-adoption-without-burning-your-team.png differ diff --git a/apps/website/src/assets/ai-adoption-without-burning-your-team.png b/apps/website/src/assets/ai-adoption-without-burning-your-team.png new file mode 100644 index 00000000..eafad4f5 Binary files /dev/null and b/apps/website/src/assets/ai-adoption-without-burning-your-team.png differ diff --git a/apps/website/src/components/BlogLink.astro b/apps/website/src/components/BlogLink.astro index 8fc90e15..0622ed38 100644 --- a/apps/website/src/components/BlogLink.astro +++ b/apps/website/src/components/BlogLink.astro @@ -29,7 +29,7 @@ const linkImageSrc = await images[`/src/assets/${image || ""}`](); sizes={"160px"} /> {title} ; } -const { title, subtitles, content, styles, img, classNames, link } = +const { title, subtitles, content, styles, img, classNames, links } = Astro.props; const images = import.meta.glob<{ default: ImageMetadata }>("../assets/*.*"); @@ -94,8 +94,8 @@ const image = await src(); class="[&_p]:text-sm [&_p]:leading-[26px] sm:[&_p]:text-base md:[&_p]:text-[20px] md:[&_p]:font-normal md:[&_p]:leading-8 text-left" set:html={content.html} /> -
- { +
+ {links.map(link => ( link?.title && link.image ? ( ) + )) }
diff --git a/apps/website/src/components/Services.astro b/apps/website/src/components/Services.astro index c5e8c7f2..3eb7d4b1 100644 --- a/apps/website/src/components/Services.astro +++ b/apps/website/src/components/Services.astro @@ -20,7 +20,7 @@ for (const service of servicesCollection) { alt: service.data.imgAlt, }, background: service.data.bgColor, - link: service.data.link, + links: service.data.links, }; } --- @@ -52,7 +52,7 @@ for (const service of servicesCollection) { content={value.content} img={value.img} styles={classNames("will-change-transform", value.background)} - link={value.link} + links={value.links} /> )) } diff --git a/apps/website/src/content/posts/ai-adoption-without-burning-your-team.md b/apps/website/src/content/posts/ai-adoption-without-burning-your-team.md new file mode 100644 index 00000000..77503a9a --- /dev/null +++ b/apps/website/src/content/posts/ai-adoption-without-burning-your-team.md @@ -0,0 +1,105 @@ +--- +title: "Adopt AI without burning your team" +description: "Practical guidance for CTOs to adopt AI tools without hurting quality or morale, covering team dynamics, standards, and safe ways to start." +createdAt: 1769602029014 +updatedAt: 1769602029014 +authors: ["david"] +category: "AI" +editors: ["velimir"] +draft: false +abstract: "AI adoption is not an IDE preference. It changes how engineering work gets done. This piece helps CTOs set expectations, protect quality, and reduce resistance. It starts with low-risk use cases, shows how to build social proof, and keeps juniors learning while the team ships faster. The goal is sustainable velocity without burnout or morale damage." +image: "/images/ai-adoption-without-burning-your-team.png" +--- + +If you're a CTO trying (and failing) to get your engineering team to adopt AI, this article is for you. + +If you have spent any time on X, LinkedIn, conferences, or talking to peers, you have heard that every team ships at lightning speed with Claude Code, OpenCode, or Cursor. + +In practice many aren't, uhm, most aren't. Some teams are dabbling in ways that just aren't productive. + +If that's your team, I feel your concern. Velocity gaps do compound. Teams that figure this out early ship faster and take on projects others won't even think to start. + +But beware, AI adoption creates a split in your team. Some engineers are eager adopters. Others quietly or quite loudly resist the change. The reasons are consistent between orgs and teams: fear of quality loss, more cleanup work, and a sense that the coding craft is eroding. + +From the CTO chair, this whole situation is uncomfortable. You can see the upside, but also morale risk if you push too hard. + +## Contents + +## This is not a tooling change + +AI-assisted development changes the shape of engineering work. + +Teams spend less time on raw implementation and more time on: + +- specifications and intent-setting +- system design & architecture +- code review & QA + +That shift is real, every engineer feels it, and some love it, others not so much. You shouldn't ignore this, as it will backfire. + +Set expectations for the timeline. Tools like Claude Code / OpenCode are less than a year old, and many senior engineers formed their instincts in different environments, IDEs, and processes. Being skeptical about such a monumental change makes total sense. + +The biggest mistake that you can make here is to treat this like an IDE preference instead of a structural change in how software gets built. + +## You can hold the line and still lead with empathy + +As a CTO, you set direction. AI adoption should not be a committee vote, but direction without empathy will turn this into a compliance theater. + +Start by acknowledging the tradeoffs openly. More code reviews and QA will be required. Bad prompting will produce bad code faster than a single dev could write, and AI has changed how the craft looks. + +If quality is the concern, address it systemically. Invest in standards, quality assurance, and review practices. Build internal tooling that defines what "good" means for your codebase. Be really clear that prompting, scoping, and evaluation are all new skills that should be learned. + +## Remove pain before you sell upside + +Most resistance you will find is defensive. Engineers avoid pain more than they chase novelty. + +You should start by encouraging AI use in the parts of the job people already dislike: + +- documentation +- changelogs +- repetitive refactors +- boilerplate tests + +Give clear permission to use AI here. Call it cheating if you want. The risk of introducing AI in these four areas is quite low, and most engineers will be open to it. + +## Reframe the value + +Once the pain and frustration drop to an acceptable degree, talk about what changes with AI adoption. + +You don't delegate reasoning to AI, it actually clears the way so you can do more problem-solving. Exploration becomes real cheap. You can try multiple architectures and approaches, iterate, and prototype without having to manually write code. Doing multiple PoCs for a big change became the norm. + +For engineers who care about impact, faster shipping means more cycles of building things that help users. That motivates engineers across seniority levels. + +## Be explicit about juniors + +AI adoption impacts junior engineers the most. AI can accelerate learning or short-circuit it. + +Juniors still need to learn fundamentals. You should be really clear that AI should not replace their thought process but shift where most of the effort is spent. + +Set expectations clearly: use AI as an assistant, a tool. There should be a human who reasons about the code AI produces. Review their work closely and ask them to explain outputs. Make learning the explicit goal. + +## Use social proof + +Mandates rarely create adoption. Pick a curious senior engineer. Give them access to different AI models and protected time on a low-stakes project. Let them share what worked and what didn't. One internal success story does more than any policy doc or any all-hands meeting. + +Adoption spreads best through proximity. + +## Create space to try + +Truthfully, most teams are already overloaded. Telling engineers to "experiment with AI" doesn't bring any results. If you want this to stick, clear time. A full day or a disposable project. It's quite expensive, but stagnation costs more. + +## Resistance turns to refusal + +Sometimes, even with time and support, someone will refuse to engage. You should have a direct conversation about fit. The efficiency gains are real and compounding. Refusing AI tooling is closer to rejecting version control than disliking a formatter. + +Going through retraining and learning something new was always part of the software engineering job. Indefinite refusal has steep costs. + +## The craft is still there. + +Across teams, enthusiasm levels vary. What's consistent is the shift in work: more intent and judgment. + +**Clarity and taste matter more now than ever before.** + +AI is an expertise force multiplier, and poor inputs still yield poor outputs, just faster. + +As a CTO, your goal shouldn't be to turn everyone into an AI evangelist. Set direction, protect quality, and create conditions for your team to discover the benefits for themselves. They don't need to love it overnight. They need to see the work they care about isn't being erased, just rebalanced. diff --git a/apps/website/src/content/services/create-an-evolving-architecture.md b/apps/website/src/content/services/create-an-evolving-architecture.md index c331099c..e7bbc6b5 100644 --- a/apps/website/src/content/services/create-an-evolving-architecture.md +++ b/apps/website/src/content/services/create-an-evolving-architecture.md @@ -9,11 +9,11 @@ imgPath: "/pic-web-dev-topics.png" imgAlt: "Illustration showing web development topics and architecture planning" idx: 2 bgColor: "bg-[#424C6DE5]/[0.9]" -link: - href: "/blog/using-lago-to-create-a-flexible-billing-system" - text: "See case study" - title: "Using Lago to Create a Flexible Billing System" - image: "using-lago-to-create-a-flexible-billing-system-2.png" +links: + - href: "/blog/using-lago-to-create-a-flexible-billing-system" + text: "See case study" + title: "Using Lago to Create a Flexible Billing System" + image: "using-lago-to-create-a-flexible-billing-system-2.png" --- From start to finish, we are there to design, implement, and guide you through the adoption of a future-proof, flexible software architecture. Backed by strong product engineering practices and tailored to your unique needs, we aim to reduce costs and mitigate the risks of downtime, technical debt, and evolving industry demands. diff --git a/apps/website/src/content/services/improving-engineering-tempo.md b/apps/website/src/content/services/improving-engineering-tempo.md index 7feca86d..8a628f99 100644 --- a/apps/website/src/content/services/improving-engineering-tempo.md +++ b/apps/website/src/content/services/improving-engineering-tempo.md @@ -10,9 +10,9 @@ imgAlt: "Charts and graphs showing engineering performance metrics and improveme idx: 3 iconPath: "/stopwatch-gold.svg" bgColor: "bg-[#3C3843E5]/[0.9]" -link: - href: "/contact" - text: "Schedule a free DevEx audit" +links: + - href: "/contact" + text: "Schedule a free DevEx audit" --- By optimizing workflows and breaking down tasks, we boost engineering tempo and support your team in delivering higher-quality software, faster. Through hands-on process coaching, placing experienced engineers directly in your team, or deploying a dedicated task force to unblock delivery, we streamline development to make releases more frequent and reduce production failures. diff --git a/apps/website/src/content/services/lead-migrations-without-imacting-customers.md b/apps/website/src/content/services/lead-migrations-without-imacting-customers.md index e05a7222..cc3f1e9d 100644 --- a/apps/website/src/content/services/lead-migrations-without-imacting-customers.md +++ b/apps/website/src/content/services/lead-migrations-without-imacting-customers.md @@ -9,11 +9,11 @@ imgPath: "/pic-boy-schedule.png" imgAlt: "Developer working on migration planning and scheduling" idx: 1 bgColor: "bg-[#5362DBE5]/[0.9]" -link: - href: "/blog/how-we-rebuilt-a-legacy-ui-with-zero-downtime" - text: "See case study" - title: "How We Rebuilt a Legacy UI With Zero Downtime: A Case Study in Component Libraries and Frontend Guidance" - image: "how-we-rebuilt-a-legacy-ui-with-zero-downtime.png" +links: + - href: "/blog/how-we-rebuilt-a-legacy-ui-with-zero-downtime" + text: "See case study" + title: "How We Rebuilt a Legacy UI With Zero Downtime: A Case Study in Component Libraries and Frontend Guidance" + image: "how-we-rebuilt-a-legacy-ui-with-zero-downtime.png" --- Move away from legacy systems and navigate major tech initiatives such as new framework adoptions, without disrupting your users. Whether you need end-to-end delivery or staff augmentation, our bottom-up approach empowers your existing teams to drive change sustainably and confidently. diff --git a/apps/website/src/content/services/upskill-existing-team.md b/apps/website/src/content/services/upskill-existing-team.md index f1ed5a99..f43db73e 100644 --- a/apps/website/src/content/services/upskill-existing-team.md +++ b/apps/website/src/content/services/upskill-existing-team.md @@ -10,11 +10,15 @@ imgAlt: "Team of developers collaborating and learning together" idx: 4 iconPath: "/management.svg" bgColor: "bg-[#1E1A1AE5]/[0.9]" -link: - href: "/blog/migrating-an-enterprise-app-from-angularjs-to-react" - text: "See case study" - title: "Migrating an Enterprise App from AngularJS to React" - image: "from-angular-to-react.png" +links: + - href: "/blog/migrating-an-enterprise-app-from-angularjs-to-react" + text: "See case study" + title: "Migrating an Enterprise App from AngularJS to React" + image: "from-angular-to-react.png" + - href: "/blog/ai-adoption-without-burning-your-team" + text: "See case study" + title: "Adopt AI without burning your team" + image: "ai-adoption-without-burning-your-team.png" --- Help your team keep up with industry demands through dedicated mentorship and hands-on support. We offer technical coaching, on-the-job pairing, and structured growth plans to identify and close skill gaps so your developers become more effective and confident with modern technologies and practices.