Three roles, depending on the project and on how the client is organised.
The craft is the same, analysis and development on Microsoft .NET and web stacks, but the context changes a great deal: how wide my scope is, who I work with, who decides what gets built. These are the three situations I work in most often.
The three roles
01
Full-stack developer
With direct clients, I follow a request from the initial need all the way to production.
Sometimes we start from scratch, with client, server, database and architecture to build. Other times I take over an existing application, with some choices already made and room to choose the means. There is always a thorough analysis phase before we start; during the project I stay in constant contact with the stakeholders, because specifications evolve. Over the years I have used many technologies; today I rely mainly on the Microsoft stack.
What you get. A single point of contact, with nothing lost between analysis and development. I keep asking questions until I'm sure I have understood enough; from there, results come gradually and visibly.
Gathering needs and constraints with the client and stakeholders
Analysis of the changes and of the database
Frontend in Angular or React, backend in .NET Core
Infrastructure: defining environments and additional components, such as Redis; on some projects, DevOps as well
Project start-up and go-live
After release
The code always belongs to the client
I train the staff who will look after the system
With some clients I keep handling the major implementations, while maintenance and smaller changes pass to their own staff
Documentation on request: working side by side with the people who use the system every day, the knowledge already stays with the client
Graphic design and content are not included; they stay with the client or with dedicated professionals.
02
Developer in a team
On larger projects, I join an existing team that maintains and evolves a sizeable system.
The contact may be directly with the client or through an intermediary. The scope is narrower, but I take full ownership of the tasks assigned to me: analysis, development and verification, coordinating with the people involved. The team's work is organised and tracked with the client's own tools.
What you get. An experienced person who becomes self-sufficient without step-by-step supervision, and who helps junior developers along the way.
Development, mainly backend; frontend or full-stack when the project needs it
Task analysis and input into its definition, drawing on my experience
Direct coordination with the people working on the same task
Support for junior colleagues
Following the team's existing processes, conventions and tools. I have also worked with a 100% code coverage requirement and explicit tests for the bug or feature as a condition for approving the pull request
Ramp-up time
On complex systems it generally takes 3–4 months to become fully self-sufficient. Clients usually know this already, which is why team engagements normally last at least 6 months.
03
Technical team lead
On projects of a certain size, I lead a development group, from the approved work item to the result delivered on time.
My work starts when a work item goes into development. How deep it needs to go depends on how the client is organised and on the analysis done before approval. I usually know the system more thoroughly than the rest of the group, and that is the knowledge I put at the team's disposal. When the team is part of a multi-team structure, I also handle coordination with the outside.
What you get. Whoever runs the programme has a single point of contact in me, just as a direct client does in the full-stack role: they ask for an item to be delivered, receive my requests for clarification and reports of blockers, and find the work ready and compliant on time. And a team that stays self-sufficient after my engagement ends.
I analyse the work ahead based on each task's specifications and split it within the group
I assess with the team the impact of changes on the system
I review progress frequently together with my colleagues
In review, I check that the use cases are met and that the change introduces no regressions; code quality is usually already covered by tools such as SonarQube
I guide and train junior developers, both in analysis and in development
In multi-team structures, I coordinate development with the other teams and services, and flag external blockers to management
Time and team size
Coordination takes time: with a team of just 5 people, I spend about half of my time on development. I have led teams of up to 8–10 people.
At a glance
Full-stack
In a team
Team lead
Typical context
Direct client, new or existing project
Large system, direct client or intermediary
Projects of a certain size, including multi-team
Scope
The whole project, from need to release
The assigned tasks, owned end to end
The group and its work items
Contacts
Client and stakeholders
Colleagues involved in the task
Team, other teams and services, management
Analysis
Complete, from needs to database
Task analysis and input into its definition
Detailed work items with the group
Formats, location and languages
Formats
Project-basedTime-based, for set periodsDirect or through a software house
Location
RemoteOn site by arrangementBased in Perugia, Italy