After many years of delivering software as a developer and a tech lead, it feels like I should be able to lay claim to some knowledge about how software can be delivered successfully. This post will attempt to cover some of the key actions I think you need to take to deliver software successfully. Decide … Continue reading Delivering
tl;dr Codifying your process is useful as it guides others who come after you, but it may give them the impression that they're using your process and therefore have no permission to change it. It may even leave them arguing over the detail of what you really meant rather than thinking for themselves. I was … Continue reading Codifying or Ossifying?
We have a problem in a Spring Boot app where some files are created during a database transaction and they need to be deleted if the transaction rolls back. This was my solution... When a file is created, we publish an event containing the filename: We have another component which listens for the event: As … Continue reading Attaching actions to rollbacks in Spring
Here are some surprising things I've learned about Spring Data JPA lately. 1) When a @Transactional method calls another @Transactional method, an uncaught RuntimeException in the second method rolls back the entire transaction Method A is annotated with @Transactional. It calls Method B (in a different class) several times. Method B is also annotated with … Continue reading @Transactional gotchas
Git tells me that I put my first Oracle database inside a docker container in early 2016. The issue was simple - we were working with a large, old, legacy database and we wanted to be able to run our integration tests against the database. Our solution was to use a Docker image based on … Continue reading Ephemeral Oracle Databases inside docker containers
I went to Go Ape last week with my kids. While I was there, I watched the staff moving around in the trees, helping children and keeping everyone safe. If you've never been to Go Ape, it involves traversing around one of several courses in the trees while attached to a steel cable running around … Continue reading Safety (and HTTPS)
I argue in this post that there is always going to be a compromise between explicitly handling error cases close to where they occur and making the main execution path easy to read. In my view, neither is always right or wrong, but rather it should be possible to choose one based on the problem … Continue reading Error handling
I spoke to the CEO of a small service company recently about the shortcomings of her CRM and booking system (large, internet-based ones). Her problems were all similarly themed. Essentially, online business software of this kind doesn't offer services that fit well enough with how she wants to interact with her customers. She would like … Continue reading Reinventing the wheel, again
Last year, I attended a training course for my company's chosen brand of agile framework: DSDM. I had some misgivings, having seen some bad projects using this methodology, but I was prepared to give it the benefit of the doubt. Long story short, I was persuaded of its usefulness*. To briefly summarise, if Scrum is … Continue reading Who needs DSDM?
I was recently tech lead on a 4-5 month project with some familiar team members and some new ones. The customers were internal users who have a fair amount of project experience. Early on, the project manager and I agreed to try and do it without sprints. Our reasons were diverse: Work did not seem … Continue reading To sprint or not to sprint