August 18, 2026

The Tech Talent Cliff

By Jason Ward, Partner at DeveloperTown

The tech talent cycle isn’t a cycle at all— but a cliff.

If you've worked in tech for any amount of time, you've lived through at least one or two talent shortages. Maybe there was a hot job market, or some bidding wars for the best people, or a year or two of painful turnover. Eventually, things loosened up again. More people entered the workforce, the market cooled, and hiring went back to normal for the most part.

Lately, I’ve been thinking about an uncomfortable fact.

The next talent shortage is likely to be permanent, or at the very least, utterly transformative.

A Shrinking Pool That Doesn't Refill

Since the dawn of modern capitalism, we’ve been able to count on one certainty: the talent pool will grow. That assumption is quietly ending in the US and many other large economies. In the US specifically, the Congressional Budget Office (CBO) anticipates a net decline in workers sometime in the 2040s or early 2050s, allowing for some margin of error based on migration trends. The US population grew by only 0.5% year over year between 2024 and 2025, which is about half the average rate over the preceding 50 years. Researchers who study population trends now expect that by the 2050s, most of the world's people will live in countries with shrinking working-age populations. This is not a slowdown in growth; it’s a decline, year after year, possibly for generations.

This isn't some far-off, abstract forecast either. It's already showing up in some countries that anchor the global economy. Japan, South Korea, and China are the sharpest examples. Birth rates in all three now sit below one child per woman, and their populations are projected to fall by 20 to 30 percent by 2050.

Europe and North America are on a similar path, just a bit slower in the decline.

The traditional fix for this kind of gap has always been immigration: incoming workers from countries with growing populations. And there is still some opportunity there. Africa's share of the global workforce is expected to nearly triple over this century as its working-age population keeps expanding while everyone else's shrinks. But immigration policy is politically fraught almost everywhere, and it's not something any individual company controls. You can't hire your way out of a demographic trend by lobbying for a different visa policy. You need a plan that works regardless of what happens with immigration.

Why "Just Hire More People" Won't Be The Answer

For most of business history, growth strategy has quietly assumed an infinite talent pool.

Need to scale? Post more job openings.

Need specialized skills? Recruit them, or poach them from a competitor.

But that playbook depended on there always being more workers coming up behind the ones you already have.

That assumption is what's breaking. Talent leaders are already saying, plainly, that you can't simply buy your way out of a widening talent gap. You have to build capability and capacity without increasing headcount, because the market will continue to get thinner. That's a real shift in mindset. It means the winning move over the next few decades won't be "who can recruit the most people"; it'll be "who can maximize the productivity of internal talent and develop strong partnerships with external specialists."

AI As a Skill Accelerator, Not a Replacement

There's an abundance of hype about artificial intelligence right now, and plenty of it deserves skepticism. Company-wide productivity claims are often overstated, and only a small fraction of companies can currently point to a real, measurable improvement to their bottom line from AI tools. So let's be honest about that upfront; AI tools are not a magic fix, and anyone selling them as one is selling ahead of the evidence.

While some modern AI tools are showing some positive impact on productivity growth in some roles at some companies, the trend is by no means monolithic. Lower-skilled, less experienced workers are seeing the greatest gains in efficiency, and to a lesser extent, efficacy. But higher-skilled, more experienced workers are seeing fewer gains, with some notable exceptions. Overall, however, the industries seeing the greatest improvements in productivity since the adoption of current AI tools are the exact same industries that saw similar gains in productivity before the AI tools existed, further confounding any correlation vs. causation claims.

Still, the opportunity for AI to be a net positive for quality and efficiency, even with inevitably increasing costs, is real. The task becomes picking the right tools, putting them in the right hands, and learning to use them as a talent amplifier rather than a talent replacement. We are seeing this happen in a few places already, notably in our work as software engineers and app developers.

We use Claude, CoPilot, and a few other AI tools in moderation, and to great effect, as a means of speeding up the rote tasks of writing/designing requirements, generating code, and testing. But we haven’t replaced any engineers, testers, or product professionals; we’ve just started focusing on the “purpose” of those roles rather than the “tasks” performed by those roles.

This philosophy is allowing us to begin addressing the coming talent shortage in our own industry. Ironically, the adoption of AI tools in coding among would-be junior developers and recent college graduates may be creating a shortage of future “purpose-first” engineers who can lead projects and be skilled solution architects. The next generation of coders may not be building the foundations upon which to grow those skills because of a reliance on AI tools. There are plenty of talented folks at the mid and senior stages of their careers in tech, but we foresee a huge shortage in the future.

The Other Half of The Answer: Outside Experts

AI may have the ability to increase productivity for the people already on your payroll, with the proper implementation, but these tools can’t solve every talent problem. Most companies have areas of surging need where they lack proper specialization. Not every mid-market company can keep a full bench of niche specialists to meet project surges and spikes in demand. They may have plenty of .NET software developers on staff to maintain legacy systems, but when the time comes to launch a new software tool, those same developers cannot do both system maintenance and architect, build, and test a new software.

For enterprise companies, these surges are nearly permanent. When one group is completing a large project that requires outside talent, another group inside the same company is inevitably starting one. This is where outsourced professional specialists start to matter more. As full-time hiring gets harder and slower, bringing in outside experts for defined, high-value work becomes less of a stopgap and more of a permanent piece of how work gets done. You don't need to own every skill. You need reliable access to it when the time comes.

The Real Shift in Mindset

Now put these two practices together. AI tools can make your internal team ramp up faster and handle more on their own, and provide a trusted bench of outside specialists you can call in for the work that truly requires deep expertise. Now you have a workforce strategy built for a world where you can't simply count on an endless supply of new hires.

None of this is about replacing people with software or replacing employees with contractors. It's about accepting a fact that's easy to ignore until it's already a problem: the talent pool that most businesses have relied on for the past century won't refill itself. The companies that come out ahead over the next few decades won't be the ones with the biggest recruiting budgets. They'll be the ones who figured out, early, how to do more with the people they have, and how to bring in the right outside expertise at exactly the right moments to fill in the rest.

That's not a talent strategy for a downturn. It's a talent strategy for a permanently smaller pool. The sooner companies start building it, the less painful the transition will be.

Editor’s note: The views expressed in this article are Jason Ward’s own and do not necessarily reflect the views or beliefs of DeveloperTown or its broader team.

August 10, 2026

Your Engineering Org Chart Is Shaping Your Software

By Alex Billingsley, VP of Engineering at DeveloperTown

I’ve been at DeveloperTown for ten years. During that time, I’ve watched us evolve our organization more than once. Each change was driven by the same reality: the world around us moved, and our structure needed to move with it.

We started narrow and flat. We primarily worked within one technology stack, and one leader could hold most of the technical picture in his head.

That worked until the engineering landscape became broader and deeper. Front end, back end, mobile, and DevOps each demanded real specialization. We responded by creating dedicated practice areas.

That worked too, for a while.

Practice areas gave us depth, credibility, and a clear technical identity for every engineer on the team. But over time, we began to see the constraints hidden inside that clarity.

When people are organized around technologies, their careers can become attached to those technologies. Their manager is often also their technical authority. Their growth path runs through a single domain. Their professional identity becomes “I’m a front-end engineer” or “I’m a back-end engineer.”

That may work until the technology changes, someone’s ambitions broaden, or a client’s problem refuses to fit neatly into one of those boxes.

All three happen regularly in software consulting.

When the Solution Starts Looking Like the Org Chart

We had engineers who wanted to move in new directions but felt as though they would need to switch teams simply to explore a new framework or discipline. We had talented people whose interests had outgrown the practice they originally joined.

And, honestly, we had Conway’s Law quietly influencing our work: our solutions sometimes began to resemble the structure of our organization.

When front-end and back-end work belong to separate groups, it is easy for delivery to inherit the same division. One person completes part of the work and hands it to another. Each handoff introduces coordination, delay, and the possibility that important context will be lost.

That structure may be convenient internally without being the best way to solve a client’s problem.

Clients increasingly ask for “full-stack engineers,” but I think there is something more nuanced underneath that request. They want breadth, but they still need depth. They want people who can own more of an outcome while knowing when deeper specialist judgment is required.

A consulting firm’s only real asset is its people. We do not ship a product or sell licenses. When a client chooses DeveloperTown, they are buying the judgment, skill, and continued growth of the consultants working on their engagement.

If our people stagnate, our offering stagnates. If our organizational structure makes growth awkward, that is not merely a people problem. It is a business problem.

So we asked a simple question:

What if we decoupled career development from technology identity?

Enter Communities of Practice

Our answer was to move from traditional practice areas to a model built around stable professional-development managers and communities of practice.

A community of practice is a group of practitioners who improve by learning from one another’s real experiences.

It is not a training class; there is no instructor.

It is not a project team; there is no deadline.

It is not a staff meeting; no one is there to report status.

It is a space where people who care about the same craft regularly share what is working, what is not, and what they are still figuring out.

The key difference from our previous practice-area structure is that people can—and intentionally do—belong to more than one community.

Each DeveloperTown consultant participates in two:

  • A “home” community focused on an area in which they already have meaningful expertise. Their role is to contribute experience, sharpen standards, and help define what excellent work looks like.
  • A “growth” community focused on an area they want to develop. Here, they can absorb knowledge from others while introducing useful perspectives from the disciplines they already know.

Meanwhile, each person has a consistent manager focused on helping them grow as a consultant and professional.

The manager helps develop the person. The communities help develop the practitioner.

Those responsibilities are related, but they do not have to belong to the same person or organizational structure.

A full-stack engineer can participate in both front-end and back-end communities without a reporting change. A back-end engineer curious about AI can begin learning from that community without leaving their team. People’s careers can become bigger than any single technology while our collective expertise becomes broader and deeper at the same time.

Why This Model Matters Now

Two forces make this the right moment for communities of practice.

The first is the pace and breadth of technological change.

The days of choosing one stack and riding it for a decade are behind us. Our clients ask us to work across React, .NET, Python, Next.js, Power Platform, MuleSoft, and an expanding range of AI capabilities.

We will not try to be all things to all people. Focus still matters. But an organizational structure that locks people into a single domain cannot keep pace with the market.

Communities of practice allow expertise to travel across the company without requiring us to reorganize every time the technology landscape shifts.

The second force is AI.

AI will perform more of the execution work involved in software delivery. We do not see that as a threat; it is the direction we are actively building toward.

But it raises an important question:

Who decides whether the AI did the work correctly?

I do not mean merely technically correct. I mean correct as in: This reflects how experienced practitioners believe the work should be done. This is secure, maintainable, and appropriate for the client. This is something we are willing to stand behind.

That judgment lives with practitioners, and it becomes sharper when practitioners regularly compare experiences and discuss what good work looks like.

A community of practice becomes the circle of expertise that keeps AI-assisted delivery honest.

The community develops the knowledge. We encode that knowledge into standards and reusable artifacts. AI tools consume those materials. Practitioners evaluate the output and use what they learn to improve the standards again.

It is a loop, not a pipeline—and the community is what makes the loop trustworthy.

As consultants increasingly orchestrate AI agents alongside human specialists, the depth of craft knowledge inside these communities becomes a quality layer. The people participating are not merely learning from one another. They are establishing the standards against which our AI-assisted work will be measured.

Creating the Conditions for Better Work

The organizational structure is only scaffolding. What matters is what people build inside it.

Imagine an engineer working through a difficult problem on a client engagement—perhaps a state-management pattern that has become brittle at scale.

In a traditional structure, that engineer might contact someone they happen to know or simply power through the problem alone.

In a healthy community of practice, they bring the problem to the group. Several people who care deeply about that craft examine it together—not as a formal code review or a status update, but as practitioners wrestling with a real problem.

Someone may have seen it before. Someone else may not have, but asks the question that reframes the entire approach.

The engineer returns to the engagement with a better solution than they would have developed alone, and everyone in the room leaves knowing something they did not know before.

That is the environment we are trying to create.

Communities of practice allow depth and breadth to grow simultaneously.

Depth comes from creating space for genuine craft mastery: people pushing one another to become sharper at what they do.

Breadth comes from allowing people to participate in multiple communities and bring cross-domain thinking into their client work.

For a consulting firm, that combination is everything. Depth is what makes clients trust us with difficult problems. Breadth allows us to meet clients where they are instead of forcing their problems into our preferred technology stack.

The Work Is Just Beginning

We are still early in this model, and we are still learning.

Our rhythms will take time to develop. Some sessions will not land. Some experiments will not work. That is part of building a practice-oriented culture: we try, evaluate, and improve together.

But this is not organizational change for its own sake.

It is an effort to create the conditions for every consultant at DeveloperTown to grow faster, go deeper, reach broader, and do the best work of their career.

The technology will continue changing. Our clients’ needs will continue changing. Our structure should help our people move with those changes—not hold them in place.

Is Your Structure Keeping Pace?

If your engineering structure is limiting how your people grow (or making it harder to deliver across increasingly complex technologies), we would be glad to help. Contact DeveloperTown to discuss how stronger engineering practices, cross-functional expertise, and AI-assisted delivery could help your team solve difficult problems more effectively.

August 10, 2026

AI Made Code Cheaper. That Doesn’t Mean You Should Build More.

By Caleb Francis, VP of AI Services at DeveloperTown

AI has lowered the cost of turning an idea into working software.

That’s exciting, but it’s also dangerous.

When code was expensive, every feature had to compete for limited engineering time. Teams argued about scope, cut ideas, and delayed anything that could not justify the investment. That friction was frustrating, but it also forced prioritization.

Now, a developer can use AI to prototype an internal tool in an afternoon. A team can test several versions of an experience instead of debating one version for weeks. Products that once looked too small or specialized to justify the cost may suddenly make economic sense.

The wrong conclusion is that we should use all of that new capacity to build more.

The better conclusion is that we should use it to learn faster.

Code Wasn’t Always the Bottleneck

This is especially true for startups.

I have worked with many founders who arrived with a list of 10 major features they believed they needed before going to market. In most cases, the primary risk was not whether those features could be built. It was whether customers wanted them.

That was true before AI, when code was expensive. It is even more important now that code can be produced faster.

If a team responds to AI-assisted development by packing more features into its first release, it may deliver more software without reducing any business risk. The company still does not know whether it has chosen the right problem, whether the product fits the customer’s workflow, or whether anyone will pay for it.

It has simply reached uncertainty with a larger codebase.

Speed only creates value when it shortens the path to an answer.

Build Smaller Experiments, Not Bigger Backlogs

The most useful shift is not from slow development to fast development. It is from planning one large solution to testing several small ones.

When an idea is inexpensive to prototype, teams can:

  • Build a narrow proof of concept before funding a full product.
  • Test several approaches with users instead of committing to the first plausible one.
  • Put a small version into a real workflow and observe what breaks.
  • Retire an experiment that served its purpose without treating the discarded code as a failure.

That last point requires a different mindset.

We have traditionally treated software as an asset that should last. But some AI-enabled software is more like a research instrument. Its job is to answer a question. Once it does, keeping it may be less valuable than what the team learned from it.

The falling cost of code should make us less emotionally attached to code.

Enterprises Have a Different Opportunity

Large organizations often face a different constraint. They rarely lack ideas or potential use cases. Their backlogs are full of internal dashboards, workflow improvements, integrations, and specialized tools that never rise high enough to receive funding.

AI changes the economics of some of that work. A useful tool no longer needs a massive audience to justify its existence. A team may be able to solve a narrow operational problem that was previously cost-prohibitive.

Even then, the answer is not to build everything below the old prioritization line.

The same questions still matter:

  • What decision or workflow will this improve?
  • Who will use it, and how often?
  • What evidence would justify investing beyond a prototype?
  • What security, governance, integration, and maintenance obligations come with it?
  • If the experiment works, who will own the production system?

AI reduces implementation effort. It does not eliminate the costs of adoption, change management, support, security, or bad decisions.

Expertise Matters More When Output Is Easy

As AI makes development faster, “fast and cheap” becomes a weaker differentiator. Nearly every capable development team will gain access to similar models and tools.

The difference will be judgment.

Can a team recognize which idea deserves to move forward? Can it design an experiment that produces reliable evidence? Can it distinguish a convincing demo from a production-ready system? Can it anticipate the constraints that appear only after software meets a real organization?

Those capabilities come from experience, not raw output.

AI can accelerate the work, but expertise determines whether the work is worth accelerating.

The Goal Isn’t More Software

There will be more software because of AI. Problems that were once too expensive to solve will have viable solutions, and increased efficiency will create demand in places we cannot fully predict.

But “we can build it now” is not a strategy.

The teams that benefit most from AI will not be the ones that generate the most code or fill the largest backlogs. They will be the ones that turn lower development costs into tighter feedback loops, better decisions, and faster validation.

Do not use AI to arrive at the same answer with twice as many features.

Use it to find the right answer sooner.

Find the Right Place to Start

AI creates the most value when it’s applied to the right problem, not simply used to produce more software. DeveloperTown helps organizations identify practical AI opportunities, test ideas, and turn the ones that work into dependable solutions.

Explore DeveloperTown’s AI services or contact our team to start a conversation.

July 8, 2026

Project-Based Work vs. Staff Augmentation: How Enterprise Teams Should Choose

A modernization effort is falling behind. Deadlines are slipping. Stakeholders demand updates. A business-critical initiative needs attention, but the internal team is stretched thin or lacks the specialized expertise required to move it forward.

At some point, most organizations arrive at the same crossroads:
Should they add people to an existing team or bring in outside software engineering services?

Finding experienced software engineering consultants is only part of the decision. How you integrate those consultants into the work can influence delivery speed, accountability, stakeholder alignment, and overall project success.

Project-based delivery and staff augmentation are both common engagement models, but they solve different problems.

The First Question to Ask: Who Should Own the Outcome?

When organizations evaluate external software support, the conversation often begins with headcount: How many developers do we need? How quickly can we add them? What skills are missing?

Those are reasonable questions. A growing backlog, missed deadlines, or mounting business pressure can make additional capacity feel like the obvious answer.

But before deciding how many people you need, it’s worth deciding who should own the work.

Who will set priorities, make tradeoffs, manage delivery, and communicate progress to stakeholders?

At DeveloperTown, we often frame the decision this way:

Who do you want to own the project's risks and outcomes?

Organizations with strong product ownership, established engineering leadership, and a clear roadmap often prefer to keep control while adding expertise or capacity. Those situations are typically well-suited for staff augmentation.

Others know the outcome they need but want help shaping the solution and coordinating delivery. Those situations are often better suited to project-based delivery.

What is Project-Based Delivery?

Sometimes an organization identifies the goal but doesn’t yet have a clear path to get there.

  • A legacy system may slow down operations. 
  • A customer-facing platform may need modernization. 
  • A business opportunity may be obvious, but the solution remains uncertain.

In those situations, adding developers doesn’t necessarily solve the problem. The underlying challenge is turning a business objective into an executable initiative.

Project-based delivery brings in a team to help shape, build, and deliver a solution. Rather than filling specific roles, the engagement aims to achieve a defined result.

This approach is especially valuable when the challenge extends beyond software development itself. We often see organizations request additional developers when they haven’t yet aligned on what to build, how to measure success, or who owns key decisions.

In those situations, moving faster is not always the answer. Successful custom software design and development efforts often depend on making the right decisions before development ramps up. Aligning stakeholders, evaluating tradeoffs, identifying risks, and establishing a realistic plan early can prevent expensive course corrections later.

The client still owns the business objectives. The delivery partner takes greater responsibility for creating structure, maintaining momentum, and guiding the work toward success. As priorities shift or new information emerges, the team helps the organization adapt without losing progress.

What is Staff Augmentation?

Other times, the hard part isn’t figuring out what to do next. It’s finding enough people to do it.

The roadmap is clear. Leadership is aligned. The team knows what needs to happen. But a modernization initiative is moving too slowly, a critical project needs specialized expertise, or delivery commitments have outpaced available capacity.

That’s where staff augmentation shines.

Rather than handing ownership to an outside team, organizations bring experienced software engineering consultants into an existing delivery process. The consultants contribute expertise and execution support, while the client retains responsibility for priorities, direction, and outcomes.

That’s an important distinction. One of the biggest misconceptions about staff augmentation is that it can solve leadership problems. In reality, augmentation works best when leadership already exists.

The organizations that benefit most already have product ownership, prioritization processes, and a clear understanding of how work moves from idea to delivery. When those pieces are in place, consultants can contribute quickly because they’re joining a system that already knows how to absorb and direct their work.

That structure also creates flexibility. Priorities can shift. New information can influence direction. Teams can adapt without changing the engagement model.

The trade-off is accountability. Organizations keep control over the work, but they also remain responsible for directing it. Someone still needs to answer questions, prioritize work, integrate consultants into existing processes, and ensure efforts stay aligned with the desired result.

When those conditions are in place, staff augmentation lets organizations add expertise and capacity without giving up ownership of the work.

How DeveloperTown’s Staff Augmentation Differs from Staffing

Many staffing firms solve a straightforward problem: you need a developer, and they provide one. There’s nothing inherently wrong with that model. If all you need is additional capacity, it can be effective.

As a development consultancy, DeveloperTown approaches staff augmentation differently.

Our consultants bring experience from helping organizations design, build, modernize, and improve software. As a result, they don’t simply execute assigned work. They bring perspectives from similar projects, teams, and challenges they’ve encountered elsewhere.

That perspective often shows up in the questions they ask.

  • Is this the right problem to solve? 
  • Are we overcomplicating the solution? 
  • Is there a simpler path to the outcome? 
  • Are we introducing risks that will be expensive to address later?

Those conversations help teams avoid unnecessary detours, focus investment where it matters most, and move forward with greater confidence.

Over time, clients gain more than additional development capacity. They gain a consultant who is thinking about technical execution, business objectives, and long-term sustainability at the same time.

That’s why we don’t view staff augmentation as simply filling seats. Traditional staffing can provide additional hands. Consultative augmentation should provide additional traction.

Questions to Ask Before Choosing an Engagement Model

If you’re deciding between project delivery and staff augmentation, start with a few simple questions:

  • Do we already know what needs to be built, or are we still defining the solution?
  • Do we have product and technical leaders who can direct the work?
  • Are we looking for additional capacity, or do we need help creating direction and alignment?
  • Do we want to manage the process ourselves, or do we want a partner accountable for the outcome?
  • Are we primarily solving a capacity problem or a coordination problem?
  • If priorities change six months from now, which model gives us the flexibility we need?

The answers often make the decision clearer than comparing staffing structures, contracts, or project plans.

The choice isn’t always permanent, either. As priorities, teams, and initiatives evolve, organizations sometimes move between project delivery and staff augmentation based on what the work requires.

Procurement considerations can influence the decision as well. Some organizations can approve contingent workers or staff augmentation engagements more easily than project-based work. While those realities matter, they shouldn’t replace strategic evaluation. Faster approval doesn’t automatically make an engagement model the right fit for the work.

Start With the Outcome, Not the Staffing Plan

Enterprise teams often approach this decision as a question of staffing. In our experience, it’s usually a question of ownership, alignment, and accountability.

The right engagement model isn’t necessarily the one that adds the most people. It’s the one that helps your organization make progress toward your goal while reducing the risks that can derail the initiative along the way.

Sometimes that means augmenting an existing team with experienced software engineering consultants. Other times, it means partnering with a delivery team to help define the path forward, coordinate the work, and drive the project toward a successful outcome.

Whether you’re evaluating staff augmentation, project delivery, or broader software design and development services, the first step is understanding the problem you’re actually trying to solve.

If you’re evaluating an upcoming initiative and aren’t sure which model makes sense, talking it through can often help uncover assumptions, identify risks, and clarify next steps before committing significant time and budget.

November 5, 2024

Involving Real Users To Design Best In Class Experiences. 

At DeveloperTown, we believe in validating our product assumptions and designs with users ensuring we are building what users want / need. Often times, product teams engage UX Research during discovery phases, at DeveloperTown we believe that UX Research should continue to be assessed throughout the design and development into when the feature or application has launched. This approach can be applied to both system replacement / modernization as well as blue sky products.  

So how should you get started with involving users in your design and development cycle? 

Look to build pipelines of users that can be engaged with user interviews and user testing sessions as well as larger groups that can be sent surveys and other quick touch by valuable information gathering.  

We like a tool called Maze to organize these groups and manage all correspondence and research gathered. Maze is a SaaS based UX Research tool that can be used to created user groups for products as well as conduct research right in the tool. We can create surveys to send to users or embed figma prototypes to get feedback on application interactions. This gives our team quick access to data that we use to validate our approach. 

Ideally, we would advocate for product teams to create two groups of users.

  1. Product Advocates - These are stakeholders, sales, customer support and users who are key influencers that help drive product roadmaps. We would expect this group to be the smaller of the two. This group could be as small as 3-5 and as large as 40-50 depending on the number of stakeholders
  2. General Research Pool - This group consist of users of the application and is a much larger group. This is a group that as we have questions, we could send surveys for their thoughts or send Figma prototypes for quick feedback on flows and interactions from boots on the ground.

So what happens if I can’t get access to actual end users of my product? 

We would start to look at services that can help identify individuals with advanced attributes to pair down and invite those users into our groups. This is a paid service that is pretty quick but also comes with a cost to get access to those hard to identify networks.  

October 18, 2023

The Role of Collaboration in Crafting Testable User Stories 

Effective collaboration is the cornerstone of successful software development, and when it comes to creating testable user stories, this collaborative spirit becomes even more critical. In this blog post, we'll explore how the synergy between developers, testers, and product owners plays a pivotal role in crafting user stories that are not only clear in their intent but also inherently testable. 

Bridging the Gap Between Developers and Testers 

Let’s start by calling out the traditional gap that often exists between developers and testers. Even the natural workflow of the work item keeps the testing team more naturally involved towards the end when work is ready to be reviewed. But the first step towards crafting testable user stories is just that – removing the distance. Make sure your QA team is involved in planning and refinement. Get the two disciplines talking earlier and your team will reap the rewards. 

The Product Owner's Perspective: Aligning Goals 

A significant component in a testable user story is a clear perspective of value from the product owner. A product owner's vision, when clearly communicated and understood, forms the basis for writing improved, comprehensive user stories. The alignment of goals between the product owner, developers, and testers is essential for creating user stories that meet both business objectives and testing requirements. 

Workshops and Joint Sessions for Clarity 

Are you noticing alignment on stories seems to slip mid sprint? Have no fear. A collaborative workshop or joint session where developers, testers, and product owners come together to discuss upcoming user stories can be the remedy. These sessions, when run efficiently, can serve to iron out details, clarify doubts, and foster shared understanding of what the purpose of the PBI is. 

Continuous Communication Throughout the Sprint 

Communication is not a one-time affair, but a continuous process and the scrum master and team must keep ongoing communication throughout the sprint. Regular stand-ups, updates, and a shared digital space for documentation can significantly enhance collaboration, ensuring that everyone is on the same page regarding the evolving user stories.  

Retrospectives are also critical in ensuring team members are sharing with one another and the business. The scrum master should be mindful that members feel safe sharing but also demonstrate that the feedback is received by acting on it. The team will pay attention to what is acted upon and are more likely to give feedback if they know they’re being taken seriously. 

Feedback Loops: Iterative Refinement 

Finally, it’s important to highlight the significance of feedback loops. By having iterative feedback loops between developers, testers, and the product owner, user stories can be refined, and any emerging issues can be addressed promptly. This continuous refinement process contributes to the creation of user stories that are inherently testable and aligned with the evolving needs of the project. 

Conclusion 

There’s no magic spell or pill for crafting testable user stories. By breaking down silos and encouraging ongoing communication among developers, testers, and product owners, teams can create a synergy that transcends the conventional barriers within the development lifecycle. User story creation is not a one-time task but an iterative process with continuous refinement. Regular reviews and adjustments contribute to the evolution of user stories that not only meet testing standards but also adapt seamlessly to the evolving needs of the project. 

Cultivate a culture of collaboration, uphold ongoing communication, and embrace iterative refinement to empower your teams to create robust, testable user stories that will leave your product owners and customers smiling.  

September 26, 2023

JavaScript Framework Comparison

In the rapidly evolving landscape of web development, choosing the right JavaScript framework is crucial for building efficient, maintainable, and user-friendly applications. With a multitude of options available, developers often find themselves in a dilemma about which framework to choose. In this post, we'll take an in-depth look at six popular JavaScript frameworks: React, Solid, Vue, Svelte, Angular, and Qwik. We'll explore their key features, pros, and cons to help you make an informed decision on which is right for you. 

We’ll also include some code showing what a simple select component might look like in each framework, a few stats about the built project, and thoughts while building out the component. All code is available on github.com. Let's get into it. 

React 

React is developed and maintained by Facebook and has become a cornerstone of modern web development. It's a component-based library that focuses on building user interfaces and allows developers to create reusable UI components. 

Building out a simple Select component is straightforward, though that could be because React is our preferred framework and the one we use the most. React is sometimes criticized because you have to explicitly handle setting the value and handling the change events, where some frameworks like Vue add some syntactic sugar to make setting this up easier. A project consisting of only this component had a build size of 143kB which is not terrible, but hardly great compared to some of the newer frameworks. 

Link to code 

Pros: 

- Virtual DOM: React's Virtual DOM efficiently updates only the necessary parts of the actual DOM, leading to better performance. 

- Large Community: React has a massive community, resulting in extensive documentation, tutorials, and third-party packages. 

- Component Reusability: React's component-centric approach promotes code reusability and maintainability. 

- Strong Ecosystem: The ecosystem includes tools like Jotai, Zustand, and Redux for state management and Next.js for server-side rendering. 

Cons: 

- Learning Curve: The component-based paradigm and JSX syntax might have a steeper learning curve for newcomers. That being said once you learn JSX it can be used in other frameworks like Solid, Qwik, Astro with only minor differences. 

- Performance Optimization: Understanding when and how to use “useMemo” and “useCallback” are essential to getting the best performance but are also easy to mess up.  

- Boilerplate: Complex applications may require additional libraries, potentially leading to more boilerplate code. 

Solid 

Solid is a relatively newer framework that aims to provide a highly efficient reactivity system. It focuses on minimalism and optimal performance by reducing unnecessary re-renders. 

One thing you might notice when looking at this Solid component is how similar it is to React’s implementation! The only differences are the <For/> component to loop over the options. Technically you can actually write the loop exactly like React’s, but for best performance Solid recommends using the <For/> helper to iterate. One thing to be careful of in Solid though is that when you destructure props like we are here, you could run into issues where you make a reactive prop non-reactive. It's not an issue here but it is an issue that is easy to make if you are coming from React. 

The size of this project when built is only 14kB, which is tiny, making Solid a great choice if you need a tiny JS footprint and excellent performance, especially if you already know React. 

Link to code 

Pros: 

- Reactive System: Solid's fine-grained reactivity system ensures efficient updates without unnecessary re-renders. 

- Small Bundle Size: Solid's runtime is lightweight, resulting in smaller bundle sizes and faster load times. 

- JavaScript Syntax: Solid's syntax is similar to Reacts, making it accessible to developers already familiar with that. 

Cons: 

- Smaller Community: Compared to older frameworks like React and Vue, Solid has a smaller community and fewer third-party packages. 

- Limited Ecosystem: While Solid's core is robust, it may lack some of the extensive tools and libraries available in other frameworks. 

Vue 

Vue.js has gained popularity for its simplicity and ease of integration. It offers a flexible and progressive framework for building user interfaces. Recently it has released a new API called the Composition API, which can help organize your code and make your code easier to reason about. Supporting two APIs has muddied the water when it comes to finding guides/references online. 

Vue diverges from React quite a bit with its default template syntax, though it is possible to use Vue with JSX. For the most part Vue wants you to feel like you're just writing HTML, with a few extra directives to extend it. Vue is a bit more magic than React and can get more complicated when writing highly reusable components, but the more complex components can potentially lead to easier implementation when using the components.  

The build size of this project came out to be 51kB which is firmly middle of the pack, but definitely not bad at all.  

Link to code 

Pros: 

- Approachable Syntax: Vue's templating syntax is easy to understand for both newcomers and experienced developers. 

- Versatile: Vue can be used for building small components or full-fledged single-page applications. 

- Comprehensive Documentation: Vue boasts clear and comprehensive documentation, aiding developers of all levels. 

- Great Supporting Packages: Vue maintains some great support packages for some common things that most apps need. For routing, most people are going to reach for vue-router. For state management, most will be using Pinia, which are both excellent.  

Cons: 

- Scaling Challenges: While Vue is great for smaller projects, it might face scalability issues in larger applications compared to other frameworks like React, though one might argue the Composition API helps with this. 

- API Confusion: There are a lot of ways to write Vue. There is the Options API, the Composition API, and the Composition API using the setup script. If that all sounds confusing, well it is! This is mostly an issue with learning the language, and discovering what works best for you, but can definitely be confusing. 

- Smaller Ecosystem: Vue's ecosystem, though growing, might have fewer options when compared to React's ecosystem. 

Svelte 

Svelte is unique in that it shifts a significant portion of its work from runtime to compile-time, resulting in highly optimized applications. Svelte, while new, has been battle tested in large applications like the New York Times. Svelte can be run as an SPA, though for SSR there is Svelte Kit. 

Working with Svelte is very easy, and a lot of thought has been put into DX. The templating engine is essentially just HTML with some directives for control flow.  

This project’s build size is a paltry 8kB. This is because Svelte isn’t really a framework, it’s a compiler. That’s why some people call it the disappearing framework.  

Link to code 

Pros: 

- Zero-runtime Approach: Svelte compiles components into efficient JavaScript at build time, resulting in faster runtime performance. 

- Declarative Syntax: Svelte's declarative syntax makes it easy to learn and understand. 

- Automatic Optimizations: Svelte's compiler optimizes code automatically, reducing the need for developers to manually optimize. 

Cons: 

- Smaller Community: While Svelte's community is growing, it might not be as extensive as some older frameworks. 

- Learning Curve: Developers accustomed to other frameworks might need time to adjust to Svelte's paradigm. 

- Typescript Support: Because it has its templating system, the Svelte team also has to support its own LSP (Language Server Protocol) for TS support, and it doesn’t always work as well as JSX implementations. 

Angular 

Angular, developed and maintained by Google, is a full-fledged framework that offers a comprehensive set of tools for building dynamic web applications. Angular has a long history, and while it is one of the oldest, it still has a fairly large base of support, especially amongst bigger enterprise companies. 

Of all the Select components, this one is the most complex in my opinion. Angular has a much different paradigm from any of the other modern frameworks. Angular still holds firm to the separation of concerns and thus you will typically have 3 files per component; HTML, JS, and CSS. 

The build size of this Angular project clocked in at a hefty 179kB. That is a pretty large starting point, and the more modern frameworks have definitely made big strides in reducing bundle sizes. This is probably not a big deal for most web apps, but if you are targeting low mobile devices this could be an issue to consider. 

Link to code 

Pros: 

- Complete Solution: Angular provides everything needed for building complex applications, including routing, state management, and more. 

- Strong Typing: Angular is built with TypeScript, which offers strong typing and enhanced code quality. 

- CLI Tooling: Angular CLI streamlines project setup, testing, and deployment processes. 

Cons: 

- Complexity: Angular's extensive features and concepts can lead to a steep learning curve, especially for beginners. 

- Heavier Bundle: Angular applications might have larger bundle sizes compared to some other frameworks. 

Qwik 

Qwik is the new kid on the block and is probably not production ready for anything mission critical, but it is a very promising framework. What makes Qwik so exciting is that it ships only tiny amounts of JS to the client and the rest of the needed JS is lazy loaded.  

The first thing you’ll notice about the below Select component is how similar it is to React and Solid. This makes getting up to speed easier, though learning all the new paradigms of how Qwik functions can take a while. For instance, any JS you put in the body of your component will never execute on the client. Instead, it will run on the server, and then resume on the client. This resumability means that your props all need to be serializable, or passed as a QRL.  

Getting a build size for Qwik doesn’t make a ton of sense because Qwik doesn’t function as a SPA and requires that you have a JS server to host the app. In general, on first load, you can expect around 6kB or so of JS. It will never load JS that isn’t needed which is a huge shift in how most frameworks handle JS. Qwik is definitely a framework to keep an eye on. 

Link to code 

Pros: 

- Server-Side Rendering (SSR): Qwik is designed for optimal server-side rendering, leading to improved initial load times. 

- Component-Centric: Qwik follows a component-centric model, similar to other popular frameworks like React and also uses JSX. 

- Emphasis on Performance: Qwik places strong emphasis on rendering performance and optimization. 

Cons: 

- Experimental Nature: As of now, Qwik is still in its early stages and might lack the stability and ecosystem of more mature frameworks. 

- Limited Adoption: Due to its experimental status, Qwik might not be the best choice for large-scale production applications. 

Conclusion 

React, Solid, Vue, Svelte, Angular, and Qwik all offer unique features and trade-offs. So how do we pick the framework that is going to bring the most value now and in the long term for our project and org?  

Evaluate these frameworks based on your project's needs to make an informed decision that aligns with your development goals. Project requirements, developer familiarity, performance considerations, and community support should all come into play when thinking through the options. Bundle size, SEO optimization, and the skill sets of your existing dev team are also worth thinking through. 

With all these things to consider, how can you make sure you make the right choice? Well, that’s where we come in. At DeveloperTown, we’ve helped hundreds of clients make the right technology choices over the last 10 years. From picking the right tool sets to mentoring your existing development team, we’re here to help make sure your next project is a wild success.  

July 24, 2023

From Ambiguity to Clarity: The Power of Advanced Prototyping

As Product Designers at DeveloperTown, our job is a unique blend of creativity, problem-solving, and technical acumen. We transform abstract concepts into tangible design artifacts - from user journeys that map the user's interaction with the product, to wireframes that provide a skeletal layout of the product, pixel-perfect hi-fidelity interfaces that represent the exact visual and functional design of the product, and robust prototypes that breathe life into our designs. 

Prototyping, in particular, is a fundamental aspect of our design process. These dynamic, interactive blueprints serve as a critical bridge between design ideas and their implementation. In this article, we delve deeper into how we, at DeveloperTown, leverage advanced prototyping for developer handoffs, client sign-offs, user testing, and design critique. 

Stakeholder Collaboration 

Group of people collaborating around a table

Incorporating stakeholders into the design process from an early stage can leads to better aligned visions, efficient decision-making, and fewer revisions later on. Interactive prototypes allow stakeholders to experience the design in a way that static images or verbal descriptions simply cannot achieve. They can directly interact with the design, understand the user flow, and contribute their feedback based on this first-hand experience. 

At DeveloperTown, we use prototyping as a cornerstone of our stakeholder collaboration. Stakeholders can visualize the product, comprehend its functionality, and provide constructive feedback that enhances the design. Prototypes also facilitate dialogue about design choices and help explain why certain decisions have been made. 

Moreover, prototypes are incredibly useful for client sign-offs. Providing stakeholders with a clickable, easy-to-navigate prototype helps them visualize the final product better than static screens or wireframes. Experiencing the product firsthand assures stakeholders about the design decisions and makes them more likely to spot potential issues or areas for improvement. This interactive feedback loop allows us to refine and finalize the design collaboratively, ensuring that the end product aligns with everyone's expectations. 

In essence, prototypes foster a more transparent, iterative, and collaborative design process with stakeholders. They encourage active participation, mutual understanding, and constructive feedback, making them an indispensable tool in our design toolbox at DeveloperTown. 

User Testing 

User testing an app on a phone

At DeveloperTown, user testing is an integral part of our design process, and prototyping serves as a powerful instrument to maximize its effectiveness. With advanced prototyping, users get to interact with an approximation of the final product. This hands-on interaction elicits more accurate and valuable feedback, leading to more effective design revisions. 

Our approach to user testing with prototypes is multi-staged. Initially, we use low-fidelity wireframes to validate problems, workflows, and foundational interactions. This early-stage testing helps us to iterate quickly, adapt our designs to user needs, and establish a solid foundation for the product's design. 

As we progress further in the design process, we switch to high-fidelity, advanced prototypes that represent a near-accurate depiction of the product’s final implementation. This shift allows us to hone in on the finer details of the design, usability, and interaction. By this stage, we're not just validating the product's purpose and functionality but also refining the user experience to a level of polish necessary for the final product. This meticulous approach ensures we have addressed any potential issues before the project advances to the development stage. 

Advanced prototyping supports a wide variety of user tests, such as A/B testing, usability testing, and more. These methods offer vital insights into user behavior, preferences, and pain points. By integrating prototyping into our user testing processes, we're able to identify and address user problems early on, preventing costly and time-consuming revisions in later stages of the product development cycle. 

Design Critique

Two designers examining post-its on a wall

Design critique sessions are indispensable in our workflow at DeveloperTown. They provide a platform for constructive feedback and innovative solutions to design challenges. Prototyping amplifies the value of these sessions by providing an interactive representation of the design, as opposed to static images or descriptions. 

Through prototyping, design critique becomes a more engaging and productive process. Team members can interact with the design, explore different user flows, and provide informed feedback based on their experience. It's not just about what looks good - it's about what works well and enhances the user experience. 

Advanced prototyping helps us visualize complex interactions, test alternative solutions, and assess the feasibility of design elements. The flexibility of prototypes allows us to iterate quickly based on the feedback received, leading to a more refined and effective design. 

Moreover, prototypes foster better communication during design critiques. They help bridge the gap between what's in the designer's mind and what the rest of the team perceives. This level of clarity streamlines discussions, mitigates misunderstandings, and ensures everyone is on the same page. 

In essence, prototypes have transformed our design critique sessions into dynamic, collaborative, and fruitful discussions. They help ensure our final designs are not just visually appealing, but also intuitive, user-friendly, and align with the project's objectives. 

Developer Handoffs

A group of engineers sitting around a table.

The design to development handoff is a pivotal juncture in any project. It's a phase where precision matters. Any misunderstanding or misinterpretation during this transition can lead to unnecessary rework, project delays, and ultimately, an increase in the cost of development. At DeveloperTown, we've honed our approach to ensure this handoff is as seamless and accurate as possible. 

Prototyping plays a starring role in this process. More than just a representation of design intent, it provides our developers with an interactive, tangible guide to the intended functionality and flow of the product. Advanced prototyping tools such as Figma, Sketch, Adobe XD, and InVision become our instruments of choice, enabling us to illustrate detailed insights into design elements, specifications, and animations. This vivid, visual communication aids our developers greatly during the implementation phase. 

To further solidify the efficiency of this process, we maintain our prototypes as a 'source of truth' throughout development. By using a rigorous change management system, we ensure our prototypes are always up-to-date and reflective of the latest approved designs. This constant reference removes ambiguity for both stakeholders and developers. Viewing a design as a prototype guarantees it's stable, vetted, and ready for implementation. 

In Conclusion

At DeveloperTown, we recognize that prototyping is much more than an intermediate step in the design process. It's an essential tool that fosters effective communication, enhances collaboration, ensures design accuracy, and drives user-centric design decisions. 

From facilitating seamless developer handoffs and thorough user testing, to fostering meaningful stakeholder collaboration and constructive design critique sessions, advanced prototyping is deeply ingrained in our design methodology. It's this emphasis on interactive, dynamic design representation that allows us to deliver products that are not only aesthetically pleasing but also functional, user-friendly, and in line with our clients' vision. 

May 31, 2023

Reducing Human Risk in Software Security

In today's world, the security of software systems is of paramount importance. Organizations invest heavily in sophisticated technologies and complex algorithms to safeguard their applications, yet one often overlooked aspect remains a significant vulnerability: the human factor. Humans, whether developers, administrators, or even end-users, can inadvertently introduce security weaknesses, leaving software systems vulnerable to exploitation. To mitigate these risks, it is crucial to adopt a proactive approach that limits human factors in security throughout the software development lifecycle.  

This blog post explores key strategies for building stronger digital fortresses by minimizing human-induced security threats. 

  1. Cultivate a Security-First Mindset: 

The first step towards limiting human factors in security is to foster a culture of security awareness and responsibility among all stakeholders involved in the software development process. From developers and testers to project managers and executives, everyone should understand the importance of security and prioritize it throughout the development lifecycle. Regular training sessions, workshops, and awareness campaigns can help educate individuals about potential vulnerabilities and instill best practices for secure coding and system administration.  

  1. Implement Secure Development Practices: 

Secure development practices are essential for minimizing human-induced security risks. Embrace frameworks like the Open Web Application Security Project (OWASP) or National Institute of Standards and Technology (NIST) and leverage their resources, such as the OWASP Top Ten, which outlines the most critical security vulnerabilities to address. Integrate secure coding guidelines and Static Application Security Testing (SAST) and Dynamic Application Security Testing (DAST)  tools into the development process to identify and remediate vulnerabilities early on when they are cheapest to fix. SAST tools can be used to scan for a wide range of vulnerabilities, including SQL injection, cross-site scripting, buffer overflows, and insecure coding practices.  DAST tools serve a similar purpose to SAST but have the advantage that these tools can find vulnerabilities that are introduced by runtime behavior and vulnerabilities that are already deployed.  Developing a culture where all code is reviewed before it goes into the main branch can also help catch potential security flaws along with ensuring adherence to secure coding practices.  

  1. Role-Based Access Control and Privilege Management: 

Implementing role-based access control (RBAC) and privilege management mechanisms helps restrict unauthorized access and limit the potential damage caused by human errors or malicious activities. Define  security roles with appropriate access privileges based on job responsibilities. Continuously review security roles and update access rights as employees' responsibilities evolve or change within the organization. Implement the principle of least privilege (PoLP), where individuals are granted only the minimum permissions necessary to perform their tasks, reducing the overall attack surface. 

  1. Robust Authentication and Authorization Mechanisms: 

Human-induced security risks can be significantly reduced by implementing robust authentication and authorization mechanisms. Encourage the use of strong passwords and multi-factor authentication (MFA) to ensure the identities of users accessing the system. Implement granular authorization controls to enforce data access restrictions based on user roles and responsibilities. Regularly review user accounts, revoke unnecessary privileges, and promptly disable accounts for employees who leave the organization. Consider implementing a federated single sign-on service to centralize user management, which can both streamline the process of onboarding new users and ensure that offboarding users doesn’t mistakenly allow continued access to business systems. 

  1. Continuous Security Monitoring and Incident Response: 

Prevention is essential, but a comprehensive security strategy also involves continuous monitoring and robust incident response capabilities. Implement security monitoring tools and intrusion detection systems to detect and respond to potential threats. In the AWS ecosystem, some cost-effective solutions to enable exception reporting and threat detection include AWS CloudTrail to audit any interactions with an AWS account, AWS Guarduty to detect interaction anomalies. AWS CloudTrail and GuardDuty can be integrated with AWS Cloudwatch metrics to alarm when anomalies are detected. Outside of AWS, two other battle-tested tools for reviewing logs as part of continuous security monitoring or an incident response plan are DataDog and Splunk. Establish an incident response plan that outlines the steps to be taken in the event of a security incident, including communication protocols, containment measures, forensic analysis, and system recovery procedures. Regularly test and update the incident response plan to reflect changes in the threat landscape and organizational infrastructure. 

Software development organizations must recognize that human factors play a crucial role in software security. By cultivating a security-first mindset, implementing secure development practices, and embracing role-based access control, robust authentication, and authorization mechanisms, organizations can significantly reduce the risks posed by human-induced security vulnerabilities. Additionally, continuous security monitoring and a well-defined incident response plan are essential for promptly addressing security incidents and minimizing their impact. By adopting these strategies, organizations can build stronger digital fortresses and protect their software systems from the ever-evolving threat landscape, ensuring the security and trust of their applications and users. 

May 15, 2023

Designing for Accessibility

Designing for accessibility means creating products, services, and environments that are usable by individuals with disabilities. This can include people with physical, sensory, and cognitive impairments. Accessibility is not only important for individuals with disabilities, but it is also important for everyone, as it can improve usability and user experience for all users. In this blog post, we will discuss the importance of designing for accessibility and provide some tips for creating accessible designs. 

Why is designing for accessibility important? 

Designing for accessibility is important for several reasons. First, it is a matter of social responsibility. As designers, we have the responsibility to create products, services, and environments that are inclusive and accessible to everyone, regardless of their abilities. Second, designing for accessibility can improve usability for all users. For example, designing a website with clear and easy-to-read text can benefit users with visual impairments, but it can also benefit users who are in a hurry or are using a small screen device. Third, designing for accessibility can help organizations comply with laws and regulations related to accessibility. For example, in the United States, the Americans with Disabilities Act (ADA) requires that public accommodations be accessible to individuals with disabilities. 

Tips for designing for accessibility 

Here are some tips for designing for accessibility: 

  1. Consider accessibility from the beginning: Accessibility should be considered from the beginning of the design process. This means involving individuals with disabilities in the design process and considering their needs and preferences. 
  1. Follow accessibility guidelines: There are several accessibility guidelines that designers can follow, such as the Web Content Accessibility Guidelines (WCAG) and the Accessible Rich Internet Applications (ARIA) specification. These guidelines provide recommendations for making web content and applications more accessible. 
  1. Use clear and concise language: Use clear and concise language in your designs. Avoid jargon, acronyms, and complicated terminology. Use simple and straightforward language that is easy to understand. 
  1. Provide alternative text for images: Provide alternative text for images. This helps users with visual impairments understand the content of the image. The alternative text should describe the content and function of the image. 
  1. Use high contrast colors: Use high contrast colors for text and background. This helps users with visual impairments read the text more easily. 
  1. Provide captions and transcripts for videos: Provide captions and transcripts for videos. This helps users with hearing impairments understand the content of the video. 
  1. Use a logical and consistent layout: Use a logical and consistent layout for your designs. This helps users with cognitive impairments understand the content more easily. 

Summing it all up 

Designing for accessibility is important for creating inclusive and usable products, services, and environments. By considering accessibility from the beginning of the design process, following accessibility guidelines, and using clear and concise language, designers can create designs that are accessible to everyone, regardless of their abilities.