What a year. If I'm honest, from the day-to-day perspective, 2025 felt like a non-stop stream of uncertainty and struggle and just...ugh. It came from all directions. The general economy was...let's go with "choppy" - with tariffs and shutdowns and budgets cuts, oh my. AI rapidly morphed from a new and exciting efficiency booster to a possible existential disruption to our entire field. And in our…
As Highline Solutions turns six, I just wanted to step back and write a bit about what we've built, our mission, and the values we've formed on our journey. “The point of the organization is to enhance the lives of the people who are part of it.” -- Ari Weinzweig Highline is a bit different from traditional consulting companies in terms of, well, everything - how we’re structured, how we…
In my experience, it's easy for developers (me included) to hang out at either end of the following spectrum: On the left is when we stay in our lane . We're given a requirement, we interpret the requirement, and then we make it so. Easy peasy. But what's that? The requirement didn't mention validation and it's a form submission screen? Must be it's not needed! We just do what we're told. And…
There's an illusion many people have around splitting time across projects. I see it all the time, and I often fall for it myself. Here's a simple example: There are two projects, both deemed important by the business, and both need a UI developer. Unfortunately, only one UI developer is available. The manager has an idea though: why not just let the UI developer split his time across both…
After twenty or so years as a software developer, mostly in consulting, I felt like I could handle myself in even the most tenuous situations. Sure, there were the miscommunications around scope or requirements. Or differences of opinion on technical solutions or philosophy. Or even just general stress around tight deadlines. But in any of these scenarios, I always felt like "I got this". I could…
As a full-time employee, I used to loathe "bullshit". Any time I had to do something that didn't directly help move my project along, it just made me antsy. And unfortunately, as I saw it, bullshit was everywhere. There were the company meetings, and the HR training courses, and the checkpoints with the manager, and the "volunteer" work on corporate initiatives, and on and on and on. ( * ) In a…
As the pendulum has swung from monoliths to micro-everythings - services, front-ends, you name it - we find ourselves with more "things" to build and maintain. And so it begs the question, who is responsible for what? As a simple example, imagine a small team of, say, 6 developers: The team has created and now supports a mobile app, an Alexa skill, three separate web apps, fifteen microservices,…
For all the advantages of microservices , there seem to be just as many new complexities and complications. One scenario I've hit a lot recently (and haven't found a lot of great resources on) is that of deleting data. Consider a simple example: There are three services: a Product service which manages data related to products offered, an Order service which tracks purchases of products, and a…
With all the stresses and demands of development that seem to send many of us to the exits early , how is it that some stick around? What's the secret to longevity in this career? One thing I've noticed over the years is that there is at least one thing that seems to be common to every good, veteran programmer I know. They all follow the same deliberate and dare-I-say selfish rule to how they…
It's 2021 and we have LinkedIn and Indeed and a ton of other apps, services, and algorithms to help us find employers and to help employers find us. But yet we still have resumes. And they still kind of suck. Of course they're not as central to the process as they were years ago, but some companies still use them to help decide who to interview, and some interviewers still use them as a guide for…
This is chapter 1 of a mini-book I recently started on the topic of rewrite or refactor . Progress is slow, but steady. Feedback welcome! We're ready to start our journey. We have an application that's riddled with technical debt, woefully out of date, or just generally underserving its users, and so we need to understand what our best option is going forward - does it make more sense to continue…
In the last chapter we drew some clearer lines around the terms rewrite and refactor , defining both as approaches to improve the quality attributes of an application, but differing in scope. Whereas refactoring is about making incremental changes to an existing system, rewriting is about starting over and building anew. Rewrites, in other words, are BIG. And risky. And yet despite this, there's…
Note: I've been thinking about writing a book on the topic of rewrite or refactor for years now. Over the winter I finally "broke ground" on the project, and started with this chapter. My plan is to release the rest of the book piecemeal and publish when it's done. Feedback welcome! As we saw in the previous chapter , a software rewrite can be a dangerous undertaking - there are a number of very…
For software architects (especially at bigger organizations ), it's not that uncommon to get a request like this from a manager or director: There's this tough problem the developers have been struggling with for weeks (performance, or scalability, or whatever), so can you quickly look at it and show them the best practice, quick fix, etc. that solves it all? Reasonable ask? No, not really. The…
A few years back while working as a programmer at a big company I wrote this random story after an excruciatingly frustrating conference call. I thought better about posting it then, but the other day I stumbled across it and figured why not...maybe it'll resonate for someone out there.. You're an avid marathon runner, and are pretty fast to boot. It's your first race as part of a new running…
There are already a lot of great resources out there on the whys, whens, and hows of REST API versioning, and we seem to be settling (more or less) on some general best practices . Likewise, there abounds a ton of info on the advantages, strategies, etc. for taking an API-first approach with OpenAPI (formerly Swagger ). Surprisingly, however, there's not a lot out there on the intersection of the…
Note: A friend of mine recently co-authored a book, Managing Technical Debt , and if you're a developer or architect wrangling with instability or quality issues, it's a really great read. They kindly asked me to contribute a side bar. In this post, I'm poking at the limits of the standard definition, but I think they've got some great answers/insights in their book. At first, the metaphor of…
As a developer, you often find yourself in a situation where someone is describing some new system to be built, and you're trying to wrap your head around exactly what "it" is. Maybe it's a client with a potential new project, or maybe just a friend with another one of his "can't-miss" ideas for a new app. Regardless, the goal is essentially the same: through a simple conversation, you want to…
"Don't reinvent the wheel", they always say. And at first blush, it all seems so obvious. If you spend the time to build something once, why not reuse it? There's no down side, right? Well, it's not that easy. As a grizzled "old" programmer , I've seen organizations fall victim to this spurious ideal over and over again, paying the dues of up-front design and development, but never reaching the…
Tolstoy once wrote , "all happy development teams are alike; every unhappy development team is unhappy in its own way". And after 20 years as a programmer , I can attest to at least one sure-fire route to unhappiness: It's the beginning of the sprint. Everything's been planned, estimated (if that's how you roll), and assigned. You have a few features on your plate, and are eager to get going.…
As much as we'd prefer to do everything in real time, there's often a need for batch processing . Performance is the most common driver, but sometimes there are also business reasons as well. As an example, maybe your central application is some transactional web app, and there's some data cleanup you need to do at the end of the day - some user transactions, say, that are helpful to keep for a…
Note: I wrote this years ago while working for a company that no longer exists, so I thought I'd post it on my site for whatever it's worth. From the Wikipedia, a code review is defined as "a systematic examination of computer source code intended to find and fix mistakes overlooked in the initial development phase, improving both the overall quality of software and the developers' skills". A…
Note: I recently gave a talk at Pittsburgh Tech Fest on "Building Applications for the Alexa Platform". The slides are on my site here and the sample code is on github.com/throp/mathwhiz . Who knows what the future holds, but at least at this moment, it's safe to say that Amazon is killing it with Alexa . Just 6 months ago, the total number of Echos, Dots, and Taps sold were around 5M and the…
Note: I was invited to speak on the Software Engineering Daily podcast on this topic, and it was a ton of fun. Check it out here . I'm a programmer, a few months shy of his 40th birthday. It's Saturday morning, my kids are home with my wonderful wife (who is pulling my weight on the domestic front), and I'm at a tech conference. It's a session on React Native , and the presenter is convincing us…
I'm not an Agile zealot, but I'm also not a complete hater (of which there seem to be many , many nowadays). With that disclaimer out of the way, there's a part of Agile (specifically, Scrum), that I've always been fuzzy on. The team goes through sprint planning, grooms the work , plays their little poker games , yada yada, and eventually gets to a set of work items that it endeavors to accomplish…
As a developer, there are often situations in which the team discusses big decisions and where there are opinions on each side. Consider this scenario... The team is re-architecting a core service, and is considering whether to go with design A or design B. Both have pros and cons (in terms of scalability, performance, etc.) and the team is uncertain which route to go. From prior experience, you…
For as long as I've been in the industry, it's always been this way. You talk to a fellow programmer, and inevitably the conversation veers toward the same, perfunctory exchange: "So...what are you using?" ...at which point you respond with the newest, flashiest piece from your current stack: "Ohhh...it's just basic Java/Spring on the back-end, but on the UI it's Angular (!)" The purpose of the…
For more than a decade now, cautionary tales have been written about the costs , perils , and complexities of automating UI tests, and yet we, on the business and development sides, still seek the promise land (as depicted by the graph below). It often starts with a familiar story... The application is launched, and it's a big success. Users are happy. Unfortunately, there's little time to…
Ergonomics aside, does a kick-ass work space help us write better code? Or conversely, does working in drab old cubeville sap us of our coding potential? How much does our working environment shape our job performance? Or would we write the same code where-ever we sit? I've always been fascinated with how subtle, unexpected forces like this shape our behavior. This is the world of pyschological…
Developers are a self-reflective lot. On any given day, /r/programming will boast a handful of new posts pontificating on "what makes a 'good' developer" or the "X types of programmers". So I know the topic space is over-tread ...but I don't care. As a virtual rite of passage of a developer-blogger, I feel duty bound to submit my own classification of developers. Here goes... After 15 years in…
At the Summa Summit this year, we tried out a new, hands-on coding activity that we dubbed "Coding Spaces". The general idea was to allow our technical consultants to get down and dirty (geeky!) - dabble in some new technologies, collaborate and program with others, and maybe even build something cool. Topics included Angular , Scala , Clojure , LEAP Motion , Salesforce , and Common Lisp to name a…
Managing the expectations of the customer is one of the trickiest things in software development. Imagine this scenario... You're just a few days into a sprint. Your customer, a reasonable enough guy, identifies a new feature related to something your working on. It's small, maybe just a 3 story pointer in a 60 point sprint, but you have a good amount on your plate as it is. Since you aim to…
We start every project with good intentions, but invariably our code unravels into a big ball of mud . It's disconcerting, and yet unavoidable. We sheepishly explain to the developer who joins the project 2 years in, "well, you see, back when we started, we just didn't anticipate X or Y or Z would change", and "we didn't have time to go back". It can all start with a simple text box... TextBox…
Since the dawn of XP, I've read about the benefits of Pair Programming. Evangelists have told us that it will improve code quality, help knowledge dissemination, and even boost productivity, all while cultivating deep, soulful bonds between developers (see: spooning ). Those who reject pair programming are assumed to be cowboys, slackers, or social recluses. Well, I'm none of these (at least I…
If you're working on a system of enterprise scale, then you're probably "fighting the good fight" against code entropy . Tools like PMD , FindBugs , Sonar , and the like are excellent weapons in this battle. Each of these tools gives a slightly different perspective of code rot; some show instances of dormant bugs, others violations of coding best practices, or others deviations from style…
If you've been a software developer for even a small time, you've undoubtedly lived this frustrating scenario... You've been working feverishly to implement a new feature for your customer. There's some crazy complexity in the business logic, and a very simple UI as well. It's a lot of work. With a herculean effort, you just about meet your deadline. The business logic is bullet-proof, but the UI…
I love Agile's idea of velocity in theory - that after accumulating a few weeks/months of data, a team can derive the average number of story points it can implement per sprint, and then use this as a basis for knowing both how much it can commit to in the next sprint (short term) and also when the project will be finished (long term). In practice , however, I believe any calculation of velocity…
Let’s assume you wanted to display the user’s birth date in your GWT application. Sounds easy, right? You write a few simple lines of code in your GWT view class: DateTimeFormat f = DateTimeFormat.getFormat("MMM dd yyyy"); lblDate.setText(f.format(user.getBirthDate()); After testing this feature locally, everything works as expected, and so you ship it. Voila! A few days later, however, the…
Exception handling best practices in Java are pretty straight-forward by now, and for the most part this carries over into the world of GWT (since GWT is, from the end developer's perspective, just Java!). There are, however, a few tricks and gotchas that are important to be aware of. In this blog post I'll describe a few that I've encountered, but please feel free to share your own. Starting with…
I m not a psychologist, but it seems to me like the science is in, and it doesn t look good for multitasking . The idea that the brain can do two things simultaneously has been myth busted . Instead, we ve learned that we have just a serial processor, and although it may be deft enough to provide the illusion of multitasking, on the inside it s just an executive controller quickly switching back…
In part 1 of this series, I discussed the benefits of usability testing on enterprise software projects and outlined a general approach for integrating the practice of usability testing into a typical Scrum project (see diagram below). In this post, I’ll lay out a 3-step process for performing a usability test on an enterprise project, describe some recognized best practices, and highlight how…
It is not enough that we deliver systems that are merely functional, they must also be usable. Paraphrasing from usability expert Jeff Attwood , to the users of the system, “the interface is the applicationâ€; it is their most visible window into our work. Whether we finish on time, on budget, or in scope can be immaterial if the final deliverable is frustrating or inefficient to use. On most…
As a developer in industry, you're almost never a lone wolf - you work within some team. So when big, architecture-level decisions need to be made, as much as you'd love to call the shots, you've got to get the consensus of the group. For example... Imagine that some for some feature you're working, it could be implemented in a number of different ways, each with some impact to maintainability,…
Imagine this scenario... You and three friends stumble upon a great idea for a tech start-up. Because you're all talented developers and there are no "business" people to constrain you, the only thing that separates you from monumental success is just building the darn application. (seriously, it's a great idea). So you decide to all sit in a room to brainstorm the initial architecture, then…
A couple weeks ago, I came across a good post, lessons for software industry novices , and it inspired me to add a few more just for the heck of it... 1. Don't check in code right before you go home It's 6:00, the [wife|kid|girlfriend|dog] is expecting you home in 30 minutes, and you just finished a really simple change. There's no harm in just checking this code in now before you go, right? DON'T…
In every enterprise application, there exists ">reference data - those simple entities that live on the periphery of your data model, and are used to classify your master data . We often know these entities by other names (depending on our point of view), for instance "lookup tables", "configuration data", etc. - examples being "State", "CustomerType", or "ProductType". Now there are some strong…
Imagine it's the first day of your 2-week sprint (iteration, etc.), and you're eager to get started. Your burndown (or task list, etc.) has just 4 tasks: Task Estimate 1. Implement "Order Status" screen. 35 hours 2. Print username in system logs. 2 hours 3. Investigate clustering in Tomcat. 15 hours 4. Upgrade to newest version of GWT. 20 hours The question is, then, how do you get started? What…
There are days when my brain is literally over-flowing with things I have to do, and around every corner lies something new. For example, in any given hour, I could easily receive one more email from project manager, phone call from business owner, chat request from developer, one-on-one drop-in from architect, build failure notification, and bug submission. And every single one of these would…
When building large applications with GWT, code splitting is a must – otherwise, the entire application (i.e. Javascript bundle) is downloaded in one chunk on the initial load of the application, which is a good recipe for frustrated users! Fortunately, the folks at Google have made the code splitting mechanism extremely simple, and have provided a really handy tool for analyzing and debugging…
When creating large web applications with GWT , it's not always clear how to get started. The most important (but most difficult!) question, I've found, is exactly how to structure the project - i.e. what justifies creating multiple web applications , multiple GWT modules , multiple EntryPoints , or everything all in one. Although there is plenty of discussion out there ( here , here , here , and…