Luca Morelli
Software engineer and analyst
Team lead

Full-stack, in a team or team lead: 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 develop bespoke applications and 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 tools. 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.

AngularReact.NETSQL ServerRedisAzure
Case studiesC-06 · C-07 · C-09 · C-10 · C-11

What I do

  • 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
  • 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: I work side by side with the people who use the system every day, so the knowledge stays with the client

Graphic design and content are not included; the client or dedicated professionals take care of them.

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.

.NETAzure DevOpsJiraAgile
Case studiesC-02 · C-03 · C-04 · C-05 · C-08

What I do

  • 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.

Technical coordinationCode reviewJunior mentoringMulti-team
Case studiesC-01

What I do

  • 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-stackIn a teamTeam lead
Typical contextDirect client, new or existing projectLarge system, direct client or intermediaryProjects of a certain size, including multi-team
ScopeThe whole project, from need to releaseThe assigned tasks, owned end to endThe group and its work items
ContactsClient and stakeholdersColleagues involved in the taskTeam, other teams and services, management
AnalysisComplete, from needs to databaseTask analysis and input into its definitionDetailed work items with the group

Soft skills as well as hard skills

The hard skills, technologies and architecture, are covered on the other pages. I prefer projects where soft skills are assessed as well: in every way of working they count as much as the stack.

Collaboration within the team

Working directly with the people on the same task and checking progress often with colleagues.

Collaboration with other teams

In multi-team structures I coordinate development with the other teams and services and report external blockers to management.

Assessing needs

I gather needs and constraints with the client and stakeholders and keep asking questions until I have understood enough.

Analytical skills

I analyse tasks and the consequences of changes on the system before developing, from requirements down to the database.

Training junior developers

I mentor and train junior developers, in analysis and in development, so that the team stays self-sufficient after my engagement.

Troubleshooting

I trace the cause of problems in complex systems, starting from the symptoms.

Formats, location and languages

Formats
Project-basedTime-based, for set periodsDirect or through a software house
Location
RemoteOn site by arrangementBased in Perugia, Italy
Languages
ItalianEnglish

Getting started: working together

Which of these roles does your project need?

Detailed CV and references available on request.