Recently, I contributed to the full-stack development and support of a robust web application in Enterprise, working on both frontend and backend repositories. My tech stack included Python, Django, React, and our old friend HTML. I also gained experience working with Docker, AWS ECS, EC2, and IAM, along with tools and libraries like Postman, MySQL, and Material UI.
I developed the app's initial unprotected URLs and public-facing branded web pages, ensuring seamless integration with the backend and external APIs like Stripe. I utilized manual testing with webhooks and the terminal CLI in both the local and development environments. This crucial step ensured seamless data flow between the frontend and backend systems.
I designed and implemented Django serializers to streamline the data flow and ensure that data was accessible and viewable in the Django admin interface. This facilitated quick and efficient data verification throughout the development process, alongside using debugging tools like print and console statements. Additionally, I added and refactored Django view functions to support enhanced data management and visibility.
Across both frontend and backend, I focused on enhancing code maintainability and scalability by creating shared helper functions. This practice helped adhere to the DRY (Don't Repeat Yourself) principle and the Single Responsibility Principle. By organizing the shared utility functions into a centralized folder, I ensured that other parts of the application could easily access and reuse them without unnecessary redundancy, significantly improving the codebase's consistency and future extensibility.
I implemented data validations as well as error handling techniques. I leveraged Python's Levenshtein module (Levenshtein Distance) and variance threshold algorithms to catch common issues like typos or duplicate entries in both the frontend and backend. This ensured better data accuracy and cleanliness within the relational database. It prevented duplicate entries of multiple different types of items/objects in the database. This also decreased the need for more future maintenance that might be due to duplications of data in the database.
By implementing data validations and error handling, I was able to improve the user experience by passing the messages from the backend to the frontend, showing the user clear, user-friendly messages. Additionally, I removed outdated files and organized the codebase's common folders and files to increase maintainability of the project and the efficiency of the maintainability.
For both the frontend UI and automated HTML emails generated by the backend, I implemented responsive design principles, ensuring full mobile-friendliness alongside optimized views for tablet and desktop screens. I created the web design palette and theme by adapting the graphic design and marketing branding style guide to web design.
I integrated these visual elements into the web application framework with React on the frontend and HTML within the Python backend, ensuring consistency with the overall brand identity. While adapting the design, I also considered WCAG and ADA guidelines to ensure accessibility for all users. To improve the user experience, I alphabetized lists and decluttered the interface. This streamlined the user adoption process, allowing users to use the application more efficiently.
As part of my work, I became familiar with Webpack and how it integrates with React applications. I used the public folder of the React app to store images, allowing the Python backend to reference these images via the public URL and trigger automation to process them on the frontend. This added functionality helped streamline the interaction between the frontend and backend, contributing to the seamless integration of multimedia content in the application.
Throughout this project, I focused on optimizing the codebase for maintainability, improving the user experience, and enhancing performance. By emphasizing reusable code, robust error handling, and efficient data flow, I contributed to the long-term success and scalability of the application.
Read about how I contributed to improving application security and centralizing configuration management:
The content of this blog post reflects my personal experiences and insights based on publicly available technologies and general industry practices. No proprietary information, code, or confidential data from past employers or clients has been shared. The views expressed here are my own and do not reflect the opinions or policies of any past or present employers. All trademarks and registered trademarks are the property of their respective owners.
Over the weekend, I enjoyed a refreshing hike with friends in Southern New Mexico. Trekking 3 miles up 615 feet into the canyon and back reminded me of our shared humanity on Earth, and the activity replenished my spirit.
Thanks to Strava and AllTrails for the metrics and guiding us along the Bureau of Land Management trails.
Learn more about me:
Recently, I had the privilege of working on application security. I made any variables that contain secrets, keys, or information that could be exploited for malicious attacks or configuration hacking into an environment variable. And, streamlining the workflow of accessing data stored in the environment variables is important, too.
Loading environment variables in a single file and importing them where needed is a key best practice that's called Centralized Configuration Management. It ensures consistency, simplifies maintenance, and provides better control over environment variables across the application.
As cyber threats and a deeper understanding of cyber attack strategies increase, I believe security will become more ingrained in the development process. Protecting sensitive information through environment variables and implementing Centralized Configuration Management helps combat against these threats and attacks, leading to enhanced security, scalability, maintainability, and efficiency.
The truth is that isn't not a one-and-done process - it's about maintenance that brings value to the product.
This past month, I attended Okta's dev_day(24) (Developer Day 2024), which is a global event about Okta's current initiatives within the cybersecurity space. Check out my blog post on a couple of my takeways:
Find out how I created this website:
I hadn't encountered the term, or job title, "developer advocate" until my now-friend Semona Igama generously volunteered her time to speak to my software engineering bootcamp cohort at Hackbright Academy about her current developer advocate role at Okta. I'm grateful to Semona for giving back to a community that helped her start her own career in the tech industry, especially since she's been a friend and mentor to me ever since.
As an Okta developer advocate in Okta's Identity Standards department, she recently interviewed Okta Director of Identity Standards Aaron Parecki about OAuth Global Token Revocation specification that's part of the OAuth 2.0 framework at Okta's dev_day(24). It outlines a standard way to revoke access tokens globally across different services or applications, and she did a fantastic job of guiding the conversation with her strategically outlined questions.
They talked about the new protocol and explained how it can effectively solve key enterprise security breach scenarios, which I found to be interesting. As a software developer, I think it's important to be open to new information and all things surrounding software development since security is inevitably part of developing software. So I appreciated Semona sharing with me about the event prior to the event, so I could sit in on that conversation.
Shout out to my friend and mentor, Okta's Identity Standards Developer Advocate, Semona Igama! See the link below to check out the recorded sessions at Okta's Developer Day 2024:
Did you know that by 2025, 70% of enterprises will identify the sustainable and ethical use of AI among their top concerns? (Source: Gartner)
π It was a late night in a global class for me (Hong Kong morningπ ), but I really enjoyed Altaf Rehmani's presentation through O'Reilly titled Generative AI for Everyone.
For two hours, we learned about Generative AI, applications and impact on businesses, prompt engineering, real world use cases, risks and limitations, companies and tool, and trends - and the future.
I am interested in GenAI, AI, and ML, so if you have an open position, or partnership you'd like to collaboration on, please reach out to me.
PSL, or PSQL?
Or, if you're in New Mexico, you can have a pumpkin horchata AND maintain your Postgres databases at the same time. π»
Did you catch my SQL reference? If you did and can tell me which clause this operator is in, message me the answer on LinkedIn and you'll get a (virtual, digital) gold star. (this is not a commercial contest))
Curious about how I work with Postgres? Check out the data model I built for my Postgres relational database of one of my full-stack web apps in the project's README (documentation).
If you need help with your backend development or database, please don't hesitate to reach out to me.
Before my transition to Software Engineering last year, I was an email developer, using Hypertext Markup Language (HTML) to code nonprofit and political fundraising emails for clients across the nation. (Being an email developer was part of my job, which was centered on communications and digital media.) Technologies: I used Notepad++, HTML, AWS S3, an SQL database and email client ActionKit, and also MailChimp, and before that, ConstantContact. The inline styling is not the templates used for the emails - but rather the inline styling was used for the body of the emails.
What does this mean? Well, I coded the emails mostly with inline styling, as opposed to what I use now as an engineer: I now mostly use CSS (95% of the time).
Why is that? It's because the emails were one-off (even if we might send 4 emails for one client in 1 day). By doing inline styling, you're able to customize each email according to the design and style, which reflects the content and needs/purpose of sending the (individual) email.
Why is this different from API, application, websites, etc.? (AKA: Why do I use CSS 95% of the time - as opposed to inline HTML styling - in my projects now as a software engineer?) It's different, because when you have a whole project, you want it to be consistent - in design style, writing style, coding style, and more. So, when you have a stylesheet that indicates how everything on your website should look, you have a centralized place of the styles, and it tells all the same elements on the website to do that same thing. (For instance, I have a certain size and color + CSS animation for my h2 headers on my portfolio website. Because of CSS' centralized stylesheet, all the h2 headers on my portfolio website are the same font size, the same color, and have the same animation on them. This way, the viewer/user of the website knows when they see it that that's a subheader, like the one they saw that looked like it before. This consistency increases readability and usability.)
Learn more about me and my experience and skills on my website that I hand built at https://luccawang.dev.
If you need help with frontend development (styling, or your CSS), please don't hesitate to reach out to me.
My cooking hobby and developer skills collided in the wild the other Friday night when I was searching Google for a chicken cacciatore recipe... The chosen recipe's website was so slowed by ads and bugs, it was unable to load.
As a software developer, I know the obvious place to look for bugs. And there were tons of grubs under that log - as seen in the screenshot attached, which only shows 1/20 (one twentieth) of the total bugs showing in the inspector.
My cooking solution: I found a different recipe on another, working website. It's awesome to monetize, but be careful how you do it.
I love solving problems - that's why I'm an engineer. So if this is you, if you have a website that's slow to load and negatively - or potentially negatively - impacting your site traffic, I am happy to help you resolve the site issues so people can see your amazing work!
I'm digging into Generative AI by listening to O'Reilly's "Generative AI in the Real World" podcast by Ben Lorica - today, with Tim Persons of PricewaterhouseCoopers (PwC).
Listen for yourself on O'Reilly's Learning Platform.
I am interested in GenAI, AI, and ML, so if you have an open position, or partnership you'd like to collaboration on, please reach out to me.