After graduating from software engineering bootcamp Hackbright Academy, which was originally out of San Francisco, in February 2023, I expected to work primarily with Python, JavaScript, and React — technologies I used heavily in my last full-stack role and in personal projects. But for the past seven months, my day-to-day has looked very different: I’ve been deeply focused on writing SQL queries within an Oracle financial database, using regex for data normalization and creating reports in a professional accounting environment.
One of the biggest learning curves has been learning Oracle's various modules that are programmed differently. I have also adapted to Oracle’s implementation of Standard SQL. So while SQL as a language is standardized, each database engine has its own dialect — and Oracle comes with plenty of nuances. Things like how it handles row limiting, string parsing, and date formatting required me to unlearn some habits and develop new ones. In VSCode, I write SQL, but adapt it to Oracle so that the SQL is then Standard SQL, which Oracle will intake. (Oracle won't intake SQL.) I pay close attention to data types, function behavior, and how Oracle structures date- and datetime-related information.
Regex has also become an unexpected centerpiece of my workflow. At Hackbright, it was a useful tool to learn — but in this role, it's indispensable. I use it regularly to clean up and reformat strings, validate data patterns, and extract usable content from semi-structured fields. Combining regex with SQL has allowed me to make sense of complex data before it’s ever surfaced in a report.
The reporting work itself has sharpened my attention to detail and reinforced the importance of clarity and accuracy in backend data work. My SQL queries feed into outputs that are used by the team I’m situated on, as well as by other accounting teams external to my direct team. Because of that, I see making sure that values are clean, aligned, and easy to read as equally important as writing the logic behind them. I’ve also had to explain the logic behind a query to the internal “client” requesting the report, fostering a partnership to ensure the output matches what they need and expect. This collaboration has become an invaluable part of the process.
Along the way, I’ve found myself contributing to data quality by catching inconsistencies, spotting potential errors, and cleaning up data when needed — especially when comparing multiple data points or validating values that don’t align. And beyond the logic itself, I’ve learned how much impact clear labeling and accessible language can have on a report. When both the data and the wording are accurate and easy to understand, the result is a report that helps the client actually use their data — and make more informed decisions with it.
This role has also shown me how technical skills like SQL and regex are valuable far beyond engineering roles. Working within an accounting department, I’ve seen firsthand how database knowledge can support business operations, audits, and planning. It’s given me a more holistic view of how software and data intersect with organizational processes - and how backend work plays a central role in those systems.
I came into the role with some SQL experience, but I’ve learned so much more on the job — about Oracle, Standard SQL, Regex, and using databases to support real business operations. The last several months have sharpened my thinking, improved my problem-solving, and deepened my confidence working in a complex enterprise data environment.
This experience has added a valuable new layer to my development skill set, and I’m proud of the work I’ve done so far.
Recently, I contributed to the full-stack development and support of a robust web on 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.