Oscar Farga, Senior Software Developer and Tech Lead, shares his perspective on what it takes to be successful on long-running digital transformation projects.
An AEM Tech Lead manages the technical implementation of new requirements based on client specifications and a detailed blueprint, ensuring state-of-the-art development processes and quality.
Since every client has different requirements, each solution is bespoke. As a result, our tasks and responsibilities vary widely from project to project. For example, on long-running projects, our day-to-day tasks and activities may change as we work as a team to code, recode, release, repair, adapt, fine-tune and improve. This is actually what makes our job very exciting.
Interview with Oscar Farga
My team of developers and Adobe certified experts work primarily in the Solutions Development phase where we take the specifications defined by our Requirements Engineers and launch the implementation process. However, my job doesn’t start or end there as I’m involved throughout the Experience Development phase to ensure coherency throughout and continuous improvement.
Along the development journey, we deliver thousands of features, repair defects, adapt and improve entire systems. In each of these tasks, we deploy only the highest quality code in accordance with both our clients’ and our own standards.
No one likes change, and from a productivity standpoint, it can be overwhelming for users to learn new ways of working and break old habits with legacy systems. For many people, the reaction is to resist change and that can make the implementation process more challenging.
As we develop new systems, we need to take into account the implicit migration in user behavior. Users are not expected to start over or adapt immediately when we migrate to a new tool or environment. When implementing to a new system we try to keep things as simple as possible for users by mimicking the legacy system as much as possible. This way, users are not surprised by the need to immediately re-learn new features or tools.
Our success in developing solutions that minimize disruption stems from actively listening to every relevant stakeholder and involving the key business units throughout the process. Therefore, accountability does not fall solely on the change management or transformation teams, but includes the specifications, development and testing teams as well.
Technical debt in software development is the implied cost of additional rework caused by taking the “easy way” now rather than applying the best long-term solution. This is usually caused by the need to get things working quickly using code that is easy to implement. However, this requires a lot of refactoring down the line as the system grows and becomes more complex.
Like financial debt, technical debt incurs interest stemming from the extra work needed in future development. We can choose to continue paying the interest that accumulates over time, or we can pay down the principal by refactoring the easy solution into a better overall design.
In long-running projects, technical debt can be a major issue and must not be underestimated. In our experience, we have had to conduct maintenance work or refactor parts of a system that are not new, but need to be replaced to keep the whole system operational.
Continuous advancement in web technologies and standards push us to constantly evolve our methods to create more powerful websites in terms of responsiveness, accessibility, SEO and progressiveness. This shifting landscape has made us agile and always prepared to adapt to dynamic conditions.
We have dedicated teams that support our clients as they navigate through a dynamic and fast-paced business landscape. Our four pillars of our success are:
The specifications team consists of Requirements Engineers – programmers and developers – who are dedicated to analyzing and documenting applications. These engineers have an extremely high-level understanding of each specific system as they are tasked with making sense of every detail.
This team has to think about backward compatibility, content and the co-existence of colliding functionalities that often complicate the development process. Their key to success is writing clear specifications and producing detailed blueprints in order to formulate the recipe needed.
This team implements the specifications and client requirements as outlined by Requirements Engineers. By following this outline as our single source of truth, we’re able to develop exactly what is needed and this is why we’ve been so successful with implementations.
Development can be complex when you think about backward compatibility, existing content, and co-existence of colliding functionalities. In Adobe Experience Manager (AEM), for example, we have several templates with different structures, look and feel, which are used for different purposes as well as components that deliver concrete functionalities. However, we may want to use the components in the different templates and sometimes want them to behave and look differently. Our Solutions Development and Testing team have the required expertise to seamlessly integrate components or templates to keep a system consistent.
Project Managers orchestrate onsite and offsite development team members to rollout releases and changes according to detailed project timeline, using continuous integration to ensure that we have valid and viable applications and functionalities at all times.
Systems engineers develop the infrastructure and transform the project into reality. They set up virtual environments, enable deployment, and improve the caching system and interface with customer IT services.
In long-running projects, real support services are mandatory. Therefore, the same development team that works on a project also provides continuous support. In addition, Netcentric has a stand-alone support team consisting of technical engineers with knowledge of processes and methodologies who are able to troubleshoot common production problems e.g. editing or publishing a page. Larger problems are escalated to the development team.
It’s definitely our ability to work as a cohesive team. It’s critical to foster an environment based on trust within teams, clients and key stakeholders to achieve long-term success.
Our clients count on us day after day to deliver the right solutions and solve their problems. Making ourselves available to our clients everyday ensure that we always understand their core needs and never let them down.
It’s also being agile enough to accommodate continuous change. Changes are supposed to be positive, but with increasing complexity comes unforeseen challenges for clients and developers. When developing for complex and long-running projects, for example, we have to re-engineer systems, refactor and improve the architecture incrementally. To achieve this easily, we develop systems that are built by blocks that are consistent, cohesive, loosely-coupled and that have a logical relationship, so that when one block or module is changed, it doesn’t affect the others.
Finally, we’ve been successful because we take the time to fully understand and make sense of our clients’ needs. We follow the specifications and blueprints of our Requirements Engineers as our single source of truth when developing and deploying new solutions.
It’s the privilege and opportunity to work with a long-standing client and deliver dozens of releases, thousands of features, repairing defects and improving systems. From my experience working on large-scale and long-running projects, I’ve humbly learned to listen, adapt, fix, recode, add and improve.
This journey may be pitted with challenges, but the experience as a developer has been exceptionally rewarding. It’s wonderful being part of the bigger picture – working as a team to provide continuous support to fine-tune and perfect solutions for global companies.