Blog Layout

Week 7 a new module, Domain Driven Design and Building an API Backend

Alexander Clemens • March 24, 2023

Share

Week seven started a new module, which is the start of going deeper into backend buildouts. This week was all completed while living in Medellín, Colombia. The followings are the lessons and topics covered for this week. And a last note is that this has been the program's most rewarding and valuable week so far as we are going more in-depth in the backend buildout and learning new technologies that I have never worked with before. 


Lessons For This Week

One of the major topics that I gained knowledge on was Docker. This platform enables developers to create, deploy, and run applications in containers, isolated environments that can be easily moved from one machine to another. Understanding how to use Docker is crucial for developing scalable and flexible web applications, and it allows developers to focus on building the application without worrying about the underlying infrastructure. Docker simplifies the deployment process, making it more efficient and less error-prone. Of course, this occurs once you have worked with the Language and are familiar with the use of the system. Since I've only been working with it for a few days, I have more time to practice and sharpen the process. 


Another important topic that I learned about was API Request Basics. APIs are the backbone of modern software development, allowing applications to communicate with each other. Understanding how to make API requests is essential for building reliable and robust web applications. I learned about different types of requests, such as GET, POST, PUT, and DELETE, and how to use them to retrieve and manipulate data. This was covered in Module one; however, we interacted with these requests differently in a Django web framework by creating forms.py folders and then relying on our urls.py folders. This week we have introduced a deeper buildout of our functions to incorporate the specific requests from the api_views.py folders. Additionally, I learned how to use tools like Insomnia to test and debug API requests. The image below is from our new Conference GO project incorporating API calls and additionally building into the project microservices and using Docker to allow each microservice to communicate with each other. 

I also delved into the Ubiquitous Language, a shared language used by all software development team members to ensure they understand each other. The Ubiquitous Language is a critical concept in Domain-Driven Design (DDD), a methodology for developing software systems aligned with business goals. DDD emphasizes the importance of understanding the domain and using a common language to build software systems that solve real business problems. The Ubiquitous Language helps avoid confusion and misunderstandings, ensuring everyone is on the same page.


Another fundamental concept that I learned about was Entities vs. Value Objects, which are essential concepts in Domain Driven Design that can help build better software. Entities are objects with a unique identity, while value objects represent a value or concept but do not have a unique identity. Understanding the difference between entities and value objects is crucial for designing effective domain models that accurately reflect the business domain.


I also learned two approaches to building software systems: monolithic architecture and microservices. Monolithic architecture is an approach where all the application components are combined into a single codebase and deployed as a single unit. In contrast, microservices architecture is an approach where the application is divided into small, independent services that communicate with each other through APIs. Both methods have pros and cons; understanding them is essential for making informed decisions when designing software systems.


Additionally, I explored JSON, which is a lightweight data-interchange format. JSON is widely used in web applications to exchange data between the server and the client. Understanding how to work with JSON is essential for building robust and efficient web applications.


Finally, aggregates, data-driven Design, and the python debug console are all crucial topics in software engineering. Aggregates are a concept in DDD that represent a group of related objects. Understanding how to design aggregates is essential for building domain models that accurately reflect the business domain. I also gained knowledge of different types of designs, such as user interface design, database design, and software architecture design. Additionally, I learned about data-driven Design, an approach to designing software systems based on data analysis.


Overall, this week was packed with valuable insights into different aspects of software engineering. I look forward to applying this knowledge in my future projects and continuing to learn more about software development.


Additional learning outside the Hack Reactor course this week was learning more profoundly about the AI and Chat GPT space. I completed two further studies this week; the first was on Linkedin titled Generative AI for Business Leaders by Chief Product Officer at LinkedIn, Tomer Cohen, and the second was on the Zero to Mastery ChatGPT & Large Language Models (LLMs): A Practical Guide. The course Generative AI for Business Leaders provides a comprehensive look at generative models' various applications and valuable insights into their potential impacts on businesses. It examines how these technologies can create new products, enhance customer experiences, automate administrative tasks, personalize marketing campaigns, and improve decision-making processes. The course also explores critical deployment considerations, such as data architectures or ethical guidelines. It is valuable information for business leaders seeking practical advice about responsibly incorporating this technology in their operations. A significant takeaway is the importance of clear, strategic prompting and additional highlighting. 


After completing the ChatGPT and Large Language Models (LLMs): A Practical Guide course, I now have a much deeper understanding of how to use these powerful tools for my purposes. It opened my eyes to concepts like Prompt Design and Fine-Tuning required for training large language models like ChatGPT. It gave me insight into its capabilities and limitations compared with other LLMs. The course also helped me clarify whether we can truly consider this model AGI - Artificial General Intelligence - because it is merely a fancy text generator. The advantages of completing such a comprehensive course are clear: there is already an incredible demand for Conversational AI jobs right now, let alone in the future! In addition to gaining valuable knowledge about building your own ML models from scratch using data scraped from Reddit as the course provides a Github starter file or other sources, understanding better than ever how they function will give you an extra edge over your competition; who's going be equipped enough even make decisions around these technologies initiated by top investors everywhere? You'll undoubtedly find yourself in good stead if you've thoroughly understood what was taught about LLM under the hood throughout this complete practical guide! This course made me realize that I can scrape my website for all the blog posts I have created and use my model so that Chat-GPT can respond to my tone. This is a new development I'm keeping in my head, and I want to expand upon this. Prompt Design is key with AI and GPT generative pre-trained transformers. 


Challenges

This week, I faced some challenges while learning new technologies and concepts. One of the main difficulties I encountered was using the Insomnia REST client. Although it is a popular tool for testing and debugging RESTful APIs, it can be intimidating if you are new to it. However, with practice and further exposure, I am confident I can master this tool and take advantage of its many benefits. Another challenge I faced was gaining an understanding of Docker. Since Docker is a complex platform, getting it involves dedication and an investment of effort; however, many resources are available online that can help me better understand the platform to make full use of it.  Finally, Domain Driven Design was another concept that presented difficulties for me this week. This methodology requires a different way of thinking when comparing traditional software development practices; understanding its Language more fluently and recognizing entities and value objects is critical in developing robust software systems using this approach. While the shift in thinking may be hard at first, the rewards reaped by implementing Domain Driven Design far outweigh any difficulties encountered during its adoption process - thus making it necessary for me to put extra effort into truly mastering this approach entirely. I encountered an error with Insomnia RESt client – "no such table". This was because I had not run the migrations. To do this, I used a command on my docker command line that included 'python manage.py migrate' at the end of it.

Operational Error in my Insomnia RESTful client

The Week Ahead

I had an incredible time living and working in Medellin, Colombia, with my girlfriend and our friend, Andres Ospina, this past week. As a professional speaker, trainer, and consultant specializing in personal growth and leadership development, Andres has worked with various clients, from large corporations to non-profit organizations. He has even given keynote speeches and training sessions all over the world. His Linkedin profile can be viewed here at https://www.linkedin.com/in/andresospina1018/. Now looking toward next week, I have quite the agenda ahead of me; studying the topics assigned to me by the catholic father at Santa Rosa de Cabal on John Rick Miller and Saint Maximiliano Maria Kolbe will require significant focus. On top of that, I am also preparing for a trip with my girlfriend in May to New York for her conference. I must stay committed to my goals to stay caught up on coursework or other responsibilities related to these events. With all these exciting opportunities, I need to prioritize my time effectively! Next week we start on Microservices! 


Ready to work with Xander Clemens?

I'd be happy to discuss your project and how we can work together to create unique, fun and engaging content.

Go ahead and click here to be taken to my business service page and see what I can do for you. Book a call with me now. Looking forward to chatting soon!

Book A Call
Share by: