Building Something From Scratch Phase at Encora Apprenticeship — Week 5
This post is part of a weekly assignment at Encora Apprentice and in this series, I’ll share my journey as a Software Engineer Apprentice. I hope these stories help and motivate others on their tech journey.
This week at Encora
As the last week of this phase is coming to an end, there are new learnings and some thoughts about this experience. Let’s take a look at the final week of this phase!
Highly Improbable
Nassim Nicholas Taleb talks about the highly improbable events, and how they share some characteristics, like being unpredictable, having a massive impact, and how we try to come up with an explanation to make them appear less improbable.
Nassim also talks about making a society robust to these events, and I believe we can apply this concept to projects, not only the final product but also to the team organization since we have to be prepared to handle any kind of events in order to adjust to change and delivering what the user/client needs.
Controllers, Services, and Data Access Objects
This week I got to work a little bit more with backend tasks, in particular how to structure applications that follow an MVC pattern.
I got to know about services and data access objects (DAOs), that can be part of the MVC design pattern. I stumbled across these terms and got to read about the differences between each other:
- Controllers are an interface for the View layer.
- Services include business logic.
- Data access objects are objects that interact with the data storage.
In a visual way, we can think of their interactions as the following:
View -> Controller -> Services -> DAO
Jenkins
In previous weeks, I’ve learned and talked about DevOps practices, one being the use of CI/CD pipelines to ensure the quality of the software, make the release process easier for developers while also making it faster. One of the tools used in the automatization of these practices and pipelines is Jenkins.
Jenkins is an Open Source automation server, which counts with a huge community and many useful plugins for developing these pipelines. We can define a Jenkins job, which is a set of tasks that usually consists of retrieving the latest code from a version control system, compiling it, running unit tests, building it, and deploying it if necessary.
In particular, I got to read about two plugins:
- Blue Ocean, which is a plugin that allows us to have a visual pipeline editor, an easier visualization, and many more benefits.
- Docker Pipeline, a plugin that allows us to access many Docker functionalities from our pipeline script.
Final thoughts
As some final thoughts, not only of this week but also from this phase, I can affirm there were many takeaways and learning from this past month. Working with a team to achieve a goal can be complex, but with good organization and communication, it can become a more attainable goal.
Another takeaway is the importance of knowing when (and how) to ask for help; if a task is taking too long and becoming a blocker, it is time to ask for help and work as a team, instead of trying to achieve everything on our own and not knowing about the progress of other team members.
And finally, I want to mention the importance of working as an agile team, delivering code faster, and getting feedback from the client. It is of vital importance to understand the problem and work together with the client to achieve a solution!
Before I go, I want to give big kudos to the team, the staff, and my mentors! I’m eager to keep on this journey and keep learning!