WEBVTT

00:02.080 --> 00:04.880
Software development is not just about writing code.

00:05.160 --> 00:09.720
There's so much more that needs to be done before and after that happens.

00:10.040 --> 00:16.240
If you want to build apps that are ready to be used in real life, like production ready apps using

00:16.640 --> 00:21.880
coding, we need to understand the steps they need to bring something to life and make it available.

00:22.400 --> 00:26.400
This process is called software development lifecycle.

00:26.600 --> 00:31.160
Sounds kind of boring, but it's super important for everything that we're going to do next.

00:31.600 --> 00:37.960
Some parts of this process can be done completely by AI, but we typically tend to get the best results

00:37.960 --> 00:42.440
when we stay in control and guide the AI and not the other way around.

00:42.800 --> 00:48.280
In agile software development, we try to move through these steps quickly and repeat them many times

00:48.280 --> 00:52.800
in a short period, and each time we learn something and improve the app.

00:52.920 --> 00:57.600
So let's briefly go over the steps and try to understand why they are important.

00:58.880 --> 01:00.520
So we're going to start here with a plan.

01:00.560 --> 01:03.120
So we need to understand what we're trying to build.

01:03.120 --> 01:09.390
And we typically are going from just one idea to understanding who could use this particular software.

01:09.470 --> 01:10.870
We're gathering requirements.

01:10.870 --> 01:14.110
We're trying to break things down into smaller, more manageable work.

01:14.150 --> 01:16.190
You can call them user stories if you want.

01:16.390 --> 01:19.470
You're also trying to figure out like how much it's going to cost us.

01:19.790 --> 01:21.270
What's our timeline?

01:21.310 --> 01:23.350
What does the team is available for this?

01:23.390 --> 01:26.830
Of course, if you're relying more on AI, then we don't really need a team.

01:26.830 --> 01:31.310
But still, don't underestimate the effort that goes into planning something.

01:31.350 --> 01:36.190
And this planning also extends a bit into the second part of the design.

01:36.430 --> 01:38.510
And we need to think about architecture.

01:38.550 --> 01:42.110
Like how do you want to structure this entire application.

01:42.150 --> 01:43.790
What kind of technology do you want to use.

01:43.830 --> 01:46.030
Or the technology stack is super important.

01:46.270 --> 01:48.110
How we want the interface to look like.

01:48.310 --> 01:51.710
What are the different navigation flows that we can imagine?

01:51.950 --> 01:57.070
Those are technical things like where are we going to store the data and we need to rely on external

01:57.070 --> 01:58.430
APIs and so on.

01:58.470 --> 02:05.070
So there's a lot of thought that goes into this initial part before a single line of code has been written.

02:05.350 --> 02:11.990
I or not I The problem that we're trying to solve is pretty much the same, and it is a problem regarding

02:12.030 --> 02:12.870
to the product.

02:12.870 --> 02:17.150
So we need to be product engineers before we can begin.

02:17.950 --> 02:23.790
Now of course, when we're trying to implement this, of course we can heavily rely on the AI, but

02:23.790 --> 02:25.310
still we have the code.

02:25.590 --> 02:31.870
If we have human people reviewing the code, that's even better because you can increase the code quality.

02:31.870 --> 02:36.590
And of course, you want to make sure that in this process, we are also documenting everything so that

02:36.590 --> 02:40.550
we can reference back to it after the code has been written.

02:40.750 --> 02:45.950
We want to ensure quality and this is done by various levels of testing.

02:45.950 --> 02:48.270
So this is what's known as a testing pyramid.

02:48.590 --> 02:53.910
Right at the bottom we have unit tests because they're super fast to be executed right at the top.

02:53.950 --> 02:55.150
Kind of like expensive.

02:55.190 --> 03:01.590
We have user acceptance tests, and those ensure that the entire application over various components

03:01.590 --> 03:03.430
is working as expected.

03:04.710 --> 03:08.550
And last but not least, of course we want to deploy one to launch our application.

03:08.550 --> 03:13.940
Typically we have various environments that we're using, like for example, staging environment or

03:13.980 --> 03:17.420
test environment before we actually go to production.

03:17.420 --> 03:20.940
And even there there are a lot of things that we need to consider in the process.

03:20.940 --> 03:25.460
We want to use version control to keep track of all the changes that we have.

03:26.020 --> 03:26.420
Now.

03:26.780 --> 03:34.140
Once the application is running, we still need to iterate over this entire life cycle as fast as possible.

03:34.380 --> 03:39.460
So, for example, there can be bugs that occur and that we're trying to fix just as well.

03:39.460 --> 03:44.780
We may want to add additional features, or maybe there are some dependencies that we want to keep up

03:44.820 --> 03:45.300
to date.

03:45.700 --> 03:51.580
And overall, we want to try to have like an overview of what the users are doing.

03:51.780 --> 03:56.060
How is the application doing like to track different performance metrics, make sure that everything

03:56.060 --> 03:58.060
is running smoothly.

03:58.860 --> 04:01.820
So in a nutshell, this is the software development life cycle.

04:02.100 --> 04:05.780
And we're going to implement various parts of it throughout the course.

04:05.780 --> 04:09.300
So this is why it's important for you to be familiar with the concepts here.

04:09.340 --> 04:13.700
But of course I'm going to go deeper as we progress through this course.
