How to onboard a legacy software project smoothly? Part 1 | IT's time to talk #7
00:00 → 00:04
Ladies and gentlemen, legacy code is one of the
00:04 → 00:07
biggest pain points of all software engineers.
00:07 → 00:10
Today, with our presales engineers and software
00:10 → 00:14
architects, Kacper Świętkowski and Krzysztof Sikora,
00:14 → 00:18
we will discuss how to make onboarding of a
00:18 → 00:22
legacy project from one team to another possibly smooth.
00:27 → 00:30
Gentlemen, I'm super, super glad to have you here.
00:30 → 00:31
How are you doing?
00:31 → 00:34
Doing good. Thank you, Michael.
00:34 → 00:37
Good. Good. Good. Thank you for having us here.
00:37 → 00:38
Yes.
00:38 → 00:40
Today's show will be super transparent because we all
00:40 → 00:42
decided not to blur our backgrounds.
00:42 → 00:44
Oh, I think that Krzysztof blurred his background.
00:44 → 00:45
I blurred.
00:46 → 00:49
Never mind. So okay.
00:49 → 00:52
Let's talk about the legacy.
00:53 → 00:56
Please tell a few words about the characteristics of legacy projects.
00:56 → 00:59
I mean, they may sound obvious.
00:59 → 00:59
What is, let's say,
00:59 → 01:03
the main difference between working on a greenfield project and something,
01:04 → 01:05
let's say, legacy related?
01:05 → 01:08
But how does it look like from your perspective?
01:08 → 01:11
So to me, the most important part is actually to
01:11 → 01:15
understand why the current vendor is going to be
01:15 → 01:19
replaced, what are those issues,
01:19 → 01:23
and if we can actually fix them and perform better.
01:23 → 01:26
Because, that's the most important part.
01:26 → 01:29
If I can identify those issues
01:29 → 01:34
easily, propose solution that I know that I can deliver
01:34 → 01:37
the quality or the value to the customer, and this is, like,
01:37 → 01:39
the most important part.
01:39 → 01:44
To me, obviously, the difficult part is actually
01:44 → 01:47
to correctly identify those issues.
01:47 → 01:52
Very often, customer can only see the tip of
01:52 → 01:55
an iceberg, and the underlying causes are not that
01:55 → 01:58
clear at the first site.
01:58 → 02:01
But but this is
02:01 → 02:06
basically our approach when it comes to legacy code.
02:07 → 02:08
Alright. Christophe? Yeah. Yeah.
02:08 → 02:11
So kind of addressing your question,
02:11 → 02:13
what is legacy?
02:13 → 02:17
I think it can mean different things.
02:17 → 02:20
I mean, some people say that once the code is written,
02:21 → 02:22
it becomes legacy.
02:22 → 02:25
But, I mean, usually, I guess,
02:25 → 02:31
we talk about systems that have been around for quite some time,
02:32 → 02:35
like, five years, maybe even a a decade.
02:35 → 02:38
And I would say I usually
02:39 → 02:43
kind of sense, like, a system coming our way when you see
02:43 → 02:44
certain indicators.
02:44 → 02:47
Like, people say, okay.
02:47 → 02:51
No one works to no one wants to work on
02:51 → 02:52
this on this system.
02:52 → 02:55
Or, like, we lost key developers or it's very hard to
02:55 → 02:57
change or
02:58 → 03:02
there are outages or problems that the customer or or
03:02 → 03:05
the owning team cannot really identify.
03:05 → 03:09
So I think we could go on and identify a set of
03:09 → 03:14
indicators that can really classify a system as as a legacy
03:14 → 03:18
that is not actively kind of maintained
03:18 → 03:22
and is resting with time
03:23 → 03:24
more and more.
03:24 → 03:28
So what do you consider while reviewing potential projects for Handover?
03:28 → 03:31
Do you analyze performance, security issues,
03:31 → 03:33
market related value?
03:33 → 03:34
How does it look like?
03:34 → 03:36
First of all, I would consider, like,
03:36 → 03:38
success criteria.
03:38 → 03:42
So everything that you said is obviously
03:42 → 03:48
important, but I usually there are already some
03:48 → 03:51
pain points that are recognized by the customer
03:51 → 03:55
and understanding what's what's need to
03:55 → 04:00
be fixed and what are those issues are, like,
04:00 → 04:02
the most important one.
04:02 → 04:05
For some, it might be performance.
04:05 → 04:08
For something else, there might be security issues
04:08 → 04:14
or some outages as Shustov said.
04:14 → 04:18
It's very, very, very difficult to
04:18 → 04:24
give you just one answer for every case.
04:24 → 04:28
So there's usually process of understanding
04:28 → 04:30
the the the current situation of
04:30 → 04:34
the client and propose proposing a solution for that.
04:34 → 04:34
Yeah.
04:34 → 04:36
From presales perspective,
04:36 → 04:38
I I cannot really stress more understanding the current
04:38 → 04:41
business situation of the customer.
04:41 → 04:41
So
04:43 → 04:46
where they are at the moment, what problems do they face,
04:46 → 04:49
what is their, like, long term strategy,
04:49 → 04:53
are they willing to expand the business,
04:53 → 04:56
do they have specific needs
04:56 → 04:59
or requirements with regards to the system?
04:59 → 05:02
So I think understanding this is really key,
05:02 → 05:04
to decide on further steps.
05:04 → 05:08
And only then we can go into into technical analysis of what
05:08 → 05:11
the system is, what the tech stack is, doing code reviews,
05:11 → 05:16
and maybe analyzing the the kind of further requirements.
05:16 → 05:20
Because sometimes we see that the customers jump into
05:20 → 05:22
conclusions and,
05:23 → 05:26
do not really do this analysis up
05:26 → 05:28
front, and they want to have a new system,
05:28 → 05:33
which might be the the eventual decision
05:33 → 05:35
that is to be taken.
05:35 → 05:38
But I would really, encourage and,
05:38 → 05:43
take the time to properly understand what is
05:43 → 05:45
the problem and what is the goal.
05:45 → 05:48
So To give you an example,
05:48 → 05:53
customer may be not satisfied with
05:53 → 05:55
the velocity of the team,
05:55 → 06:00
so the pace that the current team is working on a software.
06:00 → 06:03
But, actually, the root cause for that can be
06:03 → 06:04
organizational.
06:04 → 06:08
So for instance, there is an increasing amount of technical
06:08 → 06:12
debt, and that makes the current team slow.
06:12 → 06:15
Maybe their the maintenance cost is growing,
06:15 → 06:20
or maybe the code and main
06:20 → 06:23
attainability is very high.
06:23 → 06:26
And sometimes there there are even, like,
06:26 → 06:30
HR issues where where a company cannot
06:30 → 06:32
rotate properly.
06:32 → 06:36
And if the project lasts for multiple years many years,
06:36 → 06:41
you can expect people change over time.
06:41 → 06:43
And then there are, like, many issues,
06:43 → 06:47
like lack of documentation might be an issue,
06:47 → 06:51
like lack of new talents and the ability to
06:51 → 06:55
gain new talent and onboard new talent to the team.
06:55 → 07:01
Sometimes the issue is with the growing
07:02 → 07:04
number of the team members.
07:04 → 07:07
So when the
07:07 → 07:11
platform was small and the team was small,
07:11 → 07:14
it was quite easy to develop.
07:14 → 07:18
Right now, because of the a sure amount of the
07:19 → 07:21
line code that is already been written,
07:21 → 07:24
changing anything may be very difficult.
07:24 → 07:27
And the issue is actually in the architecture.
07:27 → 07:32
So there there are, like, many, root causes,
07:32 → 07:36
like, plausible, for a
07:36 → 07:40
simple, pain point, which is the team
07:40 → 07:44
is not delivering in the pace that will satisfy us,
07:44 → 07:46
which maybe it's not, like,
07:46 → 07:49
longer feasible from, like, ROI
07:49 → 07:51
perspective.
07:51 → 07:56
Okay. So it's not, let's say, just an engineering challenge.
07:56 → 08:00
This may be a decision of a personal
08:00 → 08:02
or business background.
08:02 → 08:06
Does it mean let's focus on the business aspect.
08:06 → 08:10
We are about to take over a
08:10 → 08:12
project that is a legacy project and we recognize
08:12 → 08:17
business issues, it is is it beneficial to involve in such
08:17 → 08:21
process someone, let's say, from user experience team,
08:21 → 08:23
like someone who's doing research,
08:23 → 08:26
like a business analyst, that kind of person?
08:27 → 08:29
Obviously, it depends.
08:29 → 08:32
So if this is, like, back end system,
08:32 → 08:35
which is going to integrate to back end,
08:36 → 08:40
like, third party systems, maybe the UX is not needed.
08:40 → 08:45
But sometimes, yeah, you can eliminate much of a
08:45 → 08:49
customer support that is needed just improving the UX.
08:49 → 08:53
So there might be a situation when the current team is
08:53 → 08:57
overwhelmed with the customer support that is needed,
08:57 → 09:00
and you can solve that with improving UX.
09:00 → 09:02
Okay? So this is totally possible.
09:02 → 09:06
But this is just one of possible branches how the
09:06 → 09:08
current situation can be fixed.
09:09 → 09:09
Yeah.
09:09 → 09:12
And I can kind of counterbalance this with an
09:12 → 09:16
example from the past where a key part of
09:17 → 09:21
conquering a legacy system rewrite and transition was to
09:21 → 09:25
have a proper business analysis done Because a system that
09:25 → 09:27
initially was
09:28 → 09:32
mainly used by by the customer care turned out to be
09:32 → 09:36
so much kind of connected into many
09:36 → 09:39
departments, like finance, reporting,
09:40 → 09:44
kind of even even daily operations of the company that
09:44 → 09:47
from one stakeholder, the project turned out into, like,
09:47 → 09:50
a stakeholder board project because
09:50 → 09:54
there were so many things not really seen
09:54 → 09:58
initially on in the UI level.
09:59 → 10:03
For example, the system was used as a compliance
10:03 → 10:07
I mean, it was used for financial purposes in terms of
10:07 → 10:10
reaching a compliance in in the bookkeeping.
10:10 → 10:12
So
10:13 → 10:15
things like that can really surprise you.
10:15 → 10:16
So
10:16 → 10:19
Speaking about more complex enterprise type types of
10:19 → 10:23
systems that have been around for decades, and usually,
10:23 → 10:26
each company has such a system that was written in the
10:26 → 10:30
beginning and was covering many different areas.
10:31 → 10:33
These are really interesting cases.
10:33 → 10:36
So, proper analysis and then,
10:36 → 10:39
really splitting away different parts
10:39 → 10:43
of the system to satisfy new business requirements is is one
10:43 → 10:46
of the ways to go, and
10:47 → 10:50
that's that's sometimes the reality.
10:52 → 10:55
Okay then. Thank you very much.
10:55 → 10:58
We talked a little bit about the business aspects,
10:58 → 11:03
personal aspects, but let's focus now on engineering.
11:03 → 11:05
Very often when we take over,
11:05 → 11:08
even at the presales stage,
11:09 → 11:12
a legacy project, we conduct a code review.
11:12 → 11:12
Yes.
11:12 → 11:16
We take a deeper look in the repository that that
11:16 → 11:19
is shared with the client by the client,
11:19 → 11:24
and we tend to analyze to get at least some very initial orientation.
11:25 → 11:29
Are there any good practices that a person conducting code
11:29 → 11:30
review should follow?
11:30 → 11:32
Are there any, let's say,
11:32 → 11:36
advices that you would be able to give?
11:36 → 11:41
What we need to remember about while conducting a code review?
11:41 → 11:44
So I would say that, first of all,
11:44 → 11:48
you need to understand the limitations of code review.
11:48 → 11:52
So So not everything may
11:52 → 11:54
be included in the code review.
11:54 → 11:56
To give you an example,
11:56 → 12:00
you can have exactly the same query that retrieves a
12:00 → 12:05
user from a database which contains one
12:05 → 12:08
thousand users or one hundred thousand users,
12:08 → 12:11
and the system is completely different.
12:11 → 12:14
And the complexity
12:14 → 12:16
operating on such a
12:17 → 12:19
system is totally different.
12:19 → 12:21
So this is one thing.
12:21 → 12:22
So
12:24 → 12:29
the infrastructure and the context of the software is very important.
12:29 → 12:31
So that being said, for instance,
12:31 → 12:36
if you've got a software that is used
12:36 → 12:40
by a desktop employee and is going to,
12:40 → 12:43
I don't know, make some reports
12:44 → 12:48
Quarterly, and it crashes, like, once a year.
12:48 → 12:49
It may be painful,
12:49 → 12:52
but maybe this is something that is acceptable.
12:52 → 12:53
But on the other hand,
12:53 → 12:56
if you've got a train company
12:56 → 13:00
And your software causes train to crash once a
13:00 → 13:04
year, this is, like, completely different
13:04 → 13:08
requirement for the code quality.
13:08 → 13:12
So, like, prior to code quality,
13:12 → 13:15
we need to understand the the the
13:17 → 13:19
the severity of certain issues,
13:19 → 13:24
and then we can assess if given code will
13:25 → 13:28
will be sufficient enough to
13:29 → 13:33
be actually a solution of a problem that is stated.
13:33 → 13:34
So this is one thing.
13:34 → 13:37
And other later on, like, obviously,
13:37 → 13:40
you can focus on some smaller issues like
13:41 → 13:43
how the database is handled.
13:43 → 13:47
Is this something that is readable?
13:47 → 13:48
Very often,
13:49 → 13:52
during the transition period, you may expect some
13:52 → 13:54
walkthrough of the code,
13:54 → 13:58
but you need to remember that this walk through is
13:58 → 14:00
going to be
14:01 → 14:07
done by a company that maybe is not that interested
14:07 → 14:11
into you understanding fully what's going on.
14:11 → 14:13
So at the end of the day,
14:13 → 14:16
you need to make sure that you'll be understand you you'll
14:16 → 14:20
you'll be able to understand what's written in this code.
14:20 → 14:23
So this is one one thing.
14:23 → 14:24
And
14:25 → 14:27
one very important,
14:28 → 14:32
I would say, issue that may be understood from the code
14:32 → 14:36
is actually third party dependencies.
14:36 → 14:41
Very often, they may be not documented,
14:41 → 14:43
and it's
14:44 → 14:48
it's still so much easier
14:49 → 14:52
to understand what's written in
14:52 → 14:55
the code base that you have access to
14:56 → 15:00
comparing to using some other services that may be
15:00 → 15:04
legacy as well, and they are not documented and you don't
15:04 → 15:05
know how they work.
15:05 → 15:10
They are not built by their team that you're going to replace.
15:10 → 15:13
So this
15:14 → 15:20
like, these moments are actually what we're looking for.
15:20 → 15:20
Okay?
15:20 → 15:24
Some external dependencies that no no one is actually
15:24 → 15:27
aware of, even the customer itself.
15:28 → 15:33
When you've been saying about the train companies,
15:33 → 15:36
can I remind myself that about this advertisement that was
15:36 → 15:41
released recently that the German state railways,
15:41 → 15:45
they've been looking for a guy knowing Windows three eleven
15:46 → 15:50
because their schedules and everything is still relying on floppy disks?
15:50 → 15:50
Yeah?
15:50 → 15:54
And and they needed and they needed someone who
15:54 → 15:57
basically they knew the technologies that been commonly
15:57 → 15:58
used thirty years ago.
15:58 → 16:02
But and they couldn't give it away because it works. Yeah?
16:02 → 16:04
And they are super afraid of even touching it.
16:05 → 16:05
Yeah.
16:05 → 16:09
Risk management is a huge part of taking
16:09 → 16:11
over legacy platform.
16:11 → 16:13
That's that's for sure.
16:15 → 16:19
So sometimes we can do more damage than solutions.
16:19 → 16:22
So we and we need to be aware of that.
16:22 → 16:24
Okay then.
16:25 → 16:26
Speaking about legacy.
16:26 → 16:30
Speaking about more engineering aspect of legacy.
16:30 → 16:36
What about moving from monolith to arc to microservices architecture?
16:37 → 16:42
We get more and more requests of that kind.
16:42 → 16:43
And
16:44 → 16:49
and sometimes we are surprised learning that in some
16:49 → 16:51
projects, this is not a necessity,
16:51 → 16:53
and it's not even recommended.
16:53 → 16:57
What is your fault about moving from monolith to
16:57 → 16:58
microservices?
17:00 → 17:04
I I think it's it's usually a buzzword for many people.
17:05 → 17:09
Like, any of the the patrons that are high level might
17:09 → 17:11
be, you know, serverless or whatever,
17:11 → 17:13
and they have heard it.
17:13 → 17:17
Maybe it worked for a company they have been talking to,
17:17 → 17:20
and they've looked at the upsides and the benefits,
17:20 → 17:24
and they want this to happen over their system.
17:24 → 17:25
So
17:25 → 17:28
as has as has been already said,
17:28 → 17:33
there is no one solution if you don't, and we would usually, again,
17:34 → 17:38
go back to square one and analyze what is going on with
17:38 → 17:40
the system, what is wrong,
17:40 → 17:45
and if if really microservices might be a solution.
17:45 → 17:47
And if if it is, like,
17:47 → 17:51
it looks that this might be a solution, we would really,
17:51 → 17:55
very rarely advise to split and model it into micro
17:55 → 17:58
services and define as a project goal.
17:58 → 18:00
We would usually
18:00 → 18:04
mix the current, business opportunities and
18:04 → 18:08
challenges with introducing new services and
18:08 → 18:10
then maybe splitting away, like,
18:10 → 18:13
peeling the current system, from features.
18:13 → 18:17
So this would this would be be this kind of
18:17 → 18:21
evolutionary approach into the architecture,
18:22 → 18:25
you know, unless this is really an
18:25 → 18:28
obvious case, which is very rare.
18:29 → 18:32
So we have seen so many
18:32 → 18:36
microservices architectures going wrong, and this is also
18:36 → 18:41
quite it is also quite quite good amount of proof in
18:41 → 18:44
the literature that with that
18:44 → 18:48
as any other high level architecture or
18:48 → 18:51
product, you need to be really careful.
18:52 → 18:52
Yeah.
18:52 → 18:54
So
18:55 → 18:59
what I can add to that is
18:59 → 19:03
that, like, having microservice architecture is not
19:03 → 19:05
a property of the software.
19:05 → 19:08
So If you you want to consider, like,
19:08 → 19:12
architectural drivers, and this is, like,
19:12 → 19:15
maintainability of the code and
19:15 → 19:17
scalability of a code.
19:17 → 19:21
And then you can actually say if those markers are going
19:21 → 19:25
to improve because of that or the other way
19:25 → 19:31
around, we will introduce unnecessary complexity to the problem.
19:31 → 19:35
Some indicators that microservices might be a
19:35 → 19:38
good approach would be, for instance,
19:38 → 19:41
growing team
19:42 → 19:42
size.
19:42 → 19:43
Alright?
19:43 → 19:47
And you no longer can operate and merge
19:47 → 19:51
between each branches is going to take forever,
19:51 → 19:55
and it's very difficult to handle team of maybe twenty people.
19:55 → 19:59
Then we might might split the monolith
19:59 → 20:03
architecture to smaller team that are more agile,
20:03 → 20:06
more they can go faster.
20:06 → 20:08
The other way
20:09 → 20:12
other consideration is actually risk handling.
20:12 → 20:16
So imagine that you've got your legacy platform and you want
20:16 → 20:19
to rewrite that.
20:19 → 20:23
As you said, sometimes it's very difficult from
20:23 → 20:27
the risk from the perspective of the the the security
20:27 → 20:31
of the platform to rewrite everything at once.
20:31 → 20:35
So what you can do is split the current software into, like,
20:35 → 20:39
smaller pieces and rewrite piece after piece.
20:39 → 20:44
So with this approach, there's, like,
20:45 → 20:49
much lower risk that you will fail
20:49 → 20:50
tremendously.
20:50 → 20:51
Okay?
20:51 → 20:54
So you limit the the the possible
20:56 → 20:57
possible,
20:58 → 21:00
like, burnout.
21:00 → 21:04
Like, with the smaller project, every risk is reduced as well.
21:04 → 21:07
And the second part is scalability.
21:08 → 21:11
Very often, if you've got, like, monolith platform,
21:11 → 21:14
you'll end up with one database,
21:14 → 21:19
which usually is bottleneck when it comes to, rights.
21:19 → 21:20
So if this is the issue,
21:20 → 21:24
then probably some approach,
21:24 → 21:28
like CQRS, might be useful.
21:28 → 21:31
So you can actually split your platform and
21:31 → 21:34
scale the pieces of the platform
21:34 → 21:35
independently.
21:35 → 21:39
So that's the the the that's that is proved to be
21:39 → 21:41
a very
21:42 → 21:47
effective approach, but only when it's needed.
21:47 → 21:51
So the the the main call to the
21:51 → 21:56
microservice microservices is increased
21:56 → 22:00
complexity and the amount of communication between the
22:00 → 22:02
microservices.
22:02 → 22:05
So, definitely, it's not
22:06 → 22:12
a bullet point bullet silver bullet that will fix every software.
22:12 → 22:15
I hope you enjoyed the first part of our
22:15 → 22:19
conversation on legacy projects.
22:19 → 22:24
We decided to cut this episode into two, and
22:25 → 22:28
additional questions will be asked in the second part.
22:28 → 22:30
Thank you. Have a great day.



.avif)

.avif)
.avif)
.avif)