Prologue: CTRL+ALT+Beginnings I am a proud, card-carrying member of the Oregon Trail generation, aka the “Xennials.” Navigating the freshly forged trails from the analog world into the digital, my formative years were a heady mix of floppy disks, batch files, and wide-eyed wonder. I was fortunate to grow up in a school system that was embracing the advent of the personal computer. When the elementary school got a batch of Commodore PET PCs I begged to go play with them at each opportunity. They were way more interesting to me than crayons or clay.
Ah, the age-old question that looms large for every developer staring down a legacy codebase: to rewrite or to refactor? It's a choice that can lead to triumph, or a lot of extra coffee and regret. Let's unpack the nuances of this into this critical crossroads of software development.
In a previous article, I wrote about how separating Flutter views into distinct layers helps us create more robust and joyful mobile apps. If you missed that post, you can read it here: A Clever Way to Structure Flutter Apps. Today, I’ll build on that by walking through how I handle forms.
What is Software Discovery? Product discovery is a challenging but vital first step in the software lifecycle. You can compare a discovery study to surveying land and drawing a blueprint before a building project. While it’s possible to dig a hole and pour a foundation without a plan, the building isn’t likely to go very well.
Laravel provides some helpful documentation for testing that your file uploads and downloads work as expected. But their examples test at a shallow level, in the name of test performance and simplicity. The documented upload tests upload no real content; the download tests only check headers or check for the presence of strings. Thorough testing often requires testing at a deeper level - ensuring the file is parsed properly by your backend, or that you are generating a valid file at all. This guide covers most of those common use cases. Note that Pest is used for the examples here, but the approaches should work just as well for PHPUnit.
When clients choose to host their applications with Clevyr, they have several choices. The most cost-effective is to utilize our multi-tenant Kubernetes hosting. This is a highly-available and scalable solution, and instead of paying for dedicated compute resources and overhead, clients only pay for what their apps need.
Integrations and Interoperability In today's business environment, growth isn't just about scaling operations—it’s about creating seamless integrations. Medium to large enterprises often face barriers like disconnected systems, redundant processes, and manual data transfers. True efficiency comes from interoperability—the ability of systems and integrations to work together without friction.
In a previous career, I was a software lead who wanted to build a highly performant group of devs. Doing so usually requires either a) hire several all-star developers, or b) develop a team from scratch for high cohesion, and then grow them into all-star developers. Due to budget constraints the latter strategy was chosen. Since the team was going to be primarily junior- and mid-level developers, I wanted to evaluate their skill in a code-agnostic way.
Let's take a quick trip back to the early ‘90s. No cloud software. No instant messaging. No fancy dashboards pulling data from half a dozen sources in real time. If you needed something from another department, you picked up the phone, walked over to someone’s desk, or waited for someone to drop a printed report in your inbox - your physical inbox - on your desk.
I’m a people pleaser. I came right out of the womb wondering if my cry was too loud for the doctor. From the playground to job interviews, I’ve always found a way to say “yes,” even when it meant absorbing the consequences—anything to make someone else’s life easier.
In the late 1990s, search engines like AltaVista and Infoseek were marvels of the early internet, providing users with the power to navigate a vast digital ocean of information. Despite their innovation, they still weren't quite perfect. They relied on simple keyword matching, often returning a flood of results that left users drowning in irrelevant links. Then?
During my time building apps in flutter, I have found that online examples of implementations really boil down to two things. The two implementations I see most often rely on a Stateful Widget or a Provider to handle everything: updating the view, performing business logic, calling APIs, etc.
IPv6 will turn 30 in December of this year. The realization that while some companies are removing IPv6 support, the federal government is requiring its agencies to to move 80% of their IP-enabled assets to it this year made us ponder the mysterious ways of digital trends. Some move at light-speed, while others linger for decades without much change. We asked our engineers to give us a few of their predictions for digital trends in 2025.