A falling knife has no handle - the chef's guide to software development
There are times when I've caught myself working on a problem only to find that I'm repeating myself, circling back round and attempting things I've already tried. Without taking a methodical approach to my work, my focus can become blinkered. To avoid this, I use a combo attack:
- Source control - to track what I've changed
- Automated testing - to track what works and what breaks
- Pomodoro-style techniques - to break out of the loop and take a breath
To put it another way, I try to take a more mindful approach to development.
The phrase "a falling knife has no handle" is appropriate in situations where you are not mindful and instinct takes over. In the case of a falling knife, trying to grab the handle is just as likely to result in you grabbing the blade, with painful results.

The only way to have a good outcome after dropping a knife is to step back, get your limbs well out of the way, and let the knife hit the floor. It's more robust than you are.
Let's apply the spirit of this saying to software development: a bug has entered production and is causing a critical issue with customers. Both data and money could be lost. What do you do?
In these situations, it can be tempting to go old school: connect to the server and hack around until everything starts working.
A good devops setup shouldn't even allow this. But that's a tale for another time.
Or, you might put together a pull request and push it directly to production, bypassing your automated test suite. People are emailing and calling, piling on the pressure for a fix.
While understandable, the hacky fix is rarely the right thing to do, primarily because it might have side effects that aren't apparent in the rush for a resolution. You run the risk of catching the blade, making the original problem worse.
Again, the correct approach is to be mindful of both the urgency and the ramifications of your actions.
At Go Tripod, we provide managed hosting which uses industry-standard tooling, including CI/CD to catch errors before they affect your customers, and to enforce quality checks on any production code. Get in touch if you'd like to know more!
Mise en place - a chef's guide to software development, part 1
There is almost always one other common feature of these videos and recipes: you need to get your ingredients and equipment ready to go before you start cooking. Everything comes together so quickly that if you're whisking up your egg as your first ingredients are cooking, you run the risk of ruining the dish.
Gathering your ingredients like this is often called mise en place—French for "putting in place"—and is a superpower in cooking.
I think it should be a fundamental part of software development, too.
Ass of you, ass of me
I imagine I'm not the only person who enjoys the first part of a new project. There's a strong temptation to trivialise small-sounding features when storming ahead with the bigger ones.
That approach can rapidly come unstuck, since it implicitly involves making assumptions about a project. So you know what's even more enjoyable than the first part of a new project?
Finishing it successfully.
Mise en place can help you with this.
Everything in its right place
Let's say you start work on a feature for a mobile app which needs drag and drop. Quick and tasty done-in-a-morning feature.
But no, it leaves a bitter flavour in the mouth, because the drag and drop library you assumed you could use hasn't been updated in two years and has security issues. You found another which is more regularly updated, but it works in a slightly different way and you need to tweak your implementation to match.
This could have been resolved by doing a small amount of work upfront. Get your ducks in a row; do your due diligence; mise en place.
At Go Tripod, we make sure that we use workshops, wireframes, and conversations to get as much as possible out in the open. That means we're doing lots of prep work before we even think about writing our first bit of code.
Be prepared

For the home cook, making a meal is a straightforward affair. Making software is more like Michelin Star fine dining. You need to care about the source and quality of your components, the team you have around you, the specialised equipment you need, and the assembly of all of these in a time-critical fashion.
Do more work up front, and the final product will be better for it.
To learn more about how our experience in custom software development can benefit your organisation, simply email hello@gotripod.com, call us on 0845 475 2487 or complete the form below.
The fractional cto: a cost-effective way to get the technology expertise you need
What is a Fractional CTO?
In today's digital landscape, nearly every business is, in some way, a software business. Regardless of whether you're in property management, manufacturing, healthcare, or trading, software solutions have become integral to staying competitive and efficient. While most companies have an "IT person" to handle networking, email, and general PC maintenance, there's a growing reliance on both off-the-shelf and bespoke software to gain a competitive edge.

However, many businesses lack a dedicated staff member to own and guide their software strategy. This gap often exists because business owners might not fully recognise that their operations are heavily reliant on software, or they may be constrained by limited funding or time.
This is where Go Tripod's innovative offering, Chief Technology Officer as a Service comes into play. You may also see this referred to as a Fractional CTO. Either way, we have the experience to help you create and execute the best technology strategy for your business.
The role of the Chief Technology Officer
A Chief Technology Officer (CTO) is a senior executive responsible for managing an organisation's technological needs and initiatives. They act as advisors to the business owners, crafting technology roadmaps that align with both the current industry standards and the specific needs of the business.
Traditionally, hiring a full-time CTO can be a significant investment, which might not be feasible for smaller companies or those in early growth stages. The Go Tripod service provides a flexible, cost-effective solution by offering the expertise of a CTO on an as-needed basis.

Imagine having an expert available to sit in on crucial meetings with potential software partners. Our founders, who bring years of experience from a wide range of industries, can step in as your CTO for such occasions. This could range from a single meeting to ongoing consultations aimed at developing comprehensive software strategies. By leveraging our Fractional CTO Service, you can gain insights into industry best practices and the latest trends and developments, ensuring your business makes informed decisions that foster growth and innovation.
More than just attending IT meetings
But our service extends beyond just attending meetings. We can assist in developing long-term technology roadmaps that will position your business to outperform your competitors. Whether you're considering integrating new technologies, optimising existing systems, or exploring innovative solutions to improve operational efficiency and UX, our CTO experts can provide the strategic guidance you need. We offer a sounding board for your ideas, from the most straightforward to the most ambitious, helping you to understand their feasibility and potential impact within the context of your industry.
For businesses experiencing growing pains, our CTO as a service is particularly beneficial. As organisations expand, so do their technological needs and challenges. Without the right expertise, it's easy to make missteps that can hinder progress. Our seasoned professionals bring a wealth of knowledge and a strategic perspective, helping to navigate these growing pains smoothly and effectively.

In conclusion, our CTO as a Service offering is designed to bridge the technology leadership gap that many businesses face. By providing on-demand access to top-tier CTO expertise, we enable businesses to make smarter, more strategic technology decisions. Whether you need a one-time consultation or ongoing support, our team is ready to help you harness the power of technology to drive your business forward.
To learn more about how our CTO as a Service can benefit your organisation, simply email hello@gotripod.com, call us on 0845 475 2487 or complete the form below.
Let Go Tripod help you turn your technological vision into reality and elevate your business to new heights.
Seven top tips to digitise your paper trail
Still working with a paper-based system? You're doing your customers and your business a disservice! The transition from paper to digital is not just a trend, but a necessity. Often referred to as Paperless Migration, digitising your paper trail can lead to increased efficiency, reduced clutter, and enhanced security.
As well as the obvious internal advantages of not having filing cabinets full of paper sat around and all the headaches that go with it, moving online offers a plethora of advantages for you and your customers - an enhanced user experience, immediate feedback and the opportunity to integrate with other online systems to name but a few.
So, if your business is still reliant on paper, it’s time to consider moving to a digital system.
Here are our top tips to help you successfully digitise your paper trail:

1. Assess Your Current Situation
Before you start along the road to paperless migration, it’s important to assess your current paper usage and storage. Take an inventory of all the documents you have and categorise them based on importance and usage frequency. This will help you determine which documents need to be digitised first and which can be archived or disposed of. Identifying the types of documents and their relevance will guide you in setting priorities for digitisation.
2. Choose the Right Tools and Software
Selecting the appropriate tools and software is crucial for successful digital transformation. There are various document management systems (DMS) available that can help you scan, store, and organise your digital files. Look for software that offers optical character recognition (OCR) capabilities, which allows scanned documents to be searchable by text. Some popular options include Adobe Acrobat, Evernote, and Google Drive. Ensure the software you choose is compatible with your existing systems and meets your business needs.
3. Develop a Digitisation Strategy
Having a clear digitisation strategy in place is essential. Decide on the scope of your project, whether you plan to digitise all documents or just specific types. Set clear goals and timelines for the process. It’s also important to establish a consistent naming convention and file organisation system to ensure easy retrieval of documents. Develop a workflow for scanning and uploading documents, and assign responsibilities to team members to maintain consistency.
These first three steps are vital in the overall success of any potential project to move away from the reliance on paper-based processes. At Go Tripod we have the experience and expertise from similar projects to help you at every step of the way - an early conversation with us even before step one will help you ensure you're on the right path.
4. Prioritise Security
Digital documents need to be secure from unauthorised access and potential data breaches. Implement robust security measures such as encryption, password protection, and secure backup solutions. Regularly update your software to protect against vulnerabilities and ensure that access to sensitive documents is restricted to authorised personnel only. Additionally, consider using cloud-based storage solutions that offer advanced security features and regular backups to safeguard your data.
5. Train Your Team
For a smooth transition to a paperless system, it’s important to train your team on the new processes and tools. Provide comprehensive training sessions on how to use the document management system (DMS), the importance of following the established protocols, and the benefits of digitisation. Encourage your team to embrace the change and provide ongoing support to address any challenges they may face. A well-informed and cooperative team is key to the success of your company's digital transformation as a whole.
6. Start Small and Scale Up
Digitising all your documents at once can be overwhelming. Start with a small pilot project to test your processes and tools. Choose a specific department or type of document to begin with, and gradually expand the scope of your digitisation efforts. This approach allows you to identify and resolve any issues early on and refine your strategy before scaling up.
7. Monitor and Evaluate

So, in conclusion, once your paperless migration project is underway, continuously monitor its progress and effectiveness. Gather feedback from your team and make necessary adjustments to improve efficiency. Regularly evaluate the system to ensure it meets your business needs and goals. Keep track of any issues that arise and address them promptly to maintain a smooth workflow.
Digitising your paper trail can transform the way your business operates, leading to greater efficiency, better user experiences for both your staff and customers, and enhanced security. By following our top tips, you can successfully transition to a paperless system and enjoy the many benefits it offers.
Start today and take the first step towards a more efficient and sustainable future for your business.
To discuss your needs simply email hello@gotripod.com, call us on 0845 475 2487 or complete the form below.
We'd love to help you with your paperless migration project.
Getting an ai to promote a software consultancy
Everyone's talking about ChatGPT, a language model optimised for conversations. In a shameless attempt to ride the gravy train, I asked ChatGPT for some help in writing a blog post.
Me: I need to write a blog post ASAP. Can you help?
ChatGPT: Sure, I'd be happy to help! What would you like the blog post to be about?
Me: Software. Software consulting, engineering, that kind of thing. And it needs to be stuffed with great keywords. Could you give me a sample and keep it under 50 words?
ChatGPT: Here's a sample blog post about software consulting and engineering:
Are you looking for a software consulting and engineering firm that can help you achieve your business goals? Look no further! Our team of experienced software experts can help you design, develop, and deploy custom software solutions that are tailored to your specific needs. With a focus on agile methodologies and cutting-edge technologies, we can help you stay ahead of the competition and drive your business forward. Contact us today to learn more!
In this post, some key words and phrases that could help improve search engine optimization (SEO) include "software consulting," "software engineering," "custom software solutions," "agile methodologies," and "cutting-edge technologies." Of course, the specific keywords that will be most effective will depend on your audience and your goals.
Me: That's more than 50 words! Never mind, what hot new tech do you think we should talk about?
ChatGPT: I'm sorry, I didn't realize that you wanted me to keep the post under 50 words. Here's a revised version that is within the word limit:
Looking for a software consulting firm? Our team of experienced experts can help you design, develop, and deploy custom solutions. Contact us today!
As a large language model trained by OpenAI, I don't have the ability to browse the internet or keep up with the latest trends in technology. However, some hot topics in the software industry currently include cloud computing, artificial intelligence, and machine learning. These technologies are being used to develop new software solutions that can improve efficiency, automate tasks, and provide insights that were previously impossible to obtain.
This comes across as a perfectly serviceable bunch of advice from someone familiar with software, SEO and copywriting. It might be lacking in spark, but let's be honest, people that grind out SEO content aren't going to win awards for creativity. I have a feeling we'll see a lot more auto-generated content in the very near future. Want to see if you can use models like this in your project? Give us a shout.
On software development in Cornwall in 2022
Back in 2018 we talked about how we make software development work remotely, and about our tentative efforts to embrace Cornwall's software development community. Four years ago is a long time ago by any stretch, but in these difficult times it seems like an eternity. How have we at Go Tripod been affected and how have we changed?
Us
The biggest (non-software!) development has been our shift to a four day week. For the past year we've trimmed the normal working week down by adding Friday on to the weekend, a 50% increase in free time. And there are no compromises - salary remains the same and the increased leisure time hasn't come at a price.
Our clients have always had support requirements that mean we need cover outside of our own business hours, and this change hasn't affected that. Someone is always on call to deal with urgent requests.
We continue to work remotely, investing in equipment and people rather than office space. Slack is our main point of contact, and we use Whereby for conference calling.
You
We've recently been working with Unlocking Potential, an organisation based in the new Fibre Hub down in Pool, to try and see how our services can better... well, serve, companies in Cornwall who are looking to undergo digital transformations. The use of software in this process is key, and we're engaging with a number of small businesses who are developing cloud-based software to power the next phase of their business.
Us & You
The past few years have shown many people what's important in their lives, and we're no different. We're refocusing on our strengths, and remembering why we started working in Cornwall in the first place. If you're looking for a partner to develop web-based software for your Cornish SME, you're in the right place. We'll help you develop your idea, explore funding options, and bring your software project to fruition. And if you just need some advice, we can act as your CTO on an ad-hoc basis, so you have expert advice on-tap. Sound good? Get in touch!
Web crawling and scraping made super simple
We recently built a tool to visit every page in a website and collect the resulting data into a JSON file, a process known as web crawling and scraping. The JSON file was then used to create a search feature on the site, no amendments were needed to the code that powered the site itself. Here's how we did it, and why we've open sourced the code to do it.
The decision making process
There are a lot of solutions for crawling/spidering/scraping websites. A lot. And so obviously we decided to write our own so that it may become the universal standard! Actually, no. We built what we needed to get the job done well using an open source scraping framework called Colly. But why couldn't we just use something that already existed, one of the many tools designed for this purpose?
Firstly, there is no one-size-fits-all solution for crawling. Every website is different. No matter which tool is used, you will have to specify what information you need, from which pages, and how you'd like it presented. Secondly, while we're not adverse to using SAAS solutions, in this case we wanted to be able to control our costs and run the crawler on our schedule without worrying about spiraling costs. These two issues mean that we need an easily configurable tool that we can run without jumping through too many hoops.
We'd already had experience with scraping tools that could be configured with a GUI and so strongly favoured something which would let us capture our configuration as code - therefore allowing us to store it under source control.
Colly - Web Crawling and Scraping in Go
After much research, Colly ticked our boxes: we could run it ourselves, we could configure it with code, and it was simple to set up and understand. Let's take a look at an example, which is written in Go as you might expect:
c := colly.NewCollector(
colly.AllowedDomains("gotripod.com"),
)
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL.String())
})
c.Visit("https://gotripod.com/")
This has three distinct parts:
- We create a "collector". It is only allowed to visit gotripod.com
- On each request, it should print the current URL
- Visit the Go Tripod homepage, starting the site crawling process
All this will do is hit the GT homepage and stop, because we haven't told it what to do afterwards. And since we're writing a crawler and not a visitor, we need to tell it where to crawl to next. After creating the collector, we can add the following code:
c.OnHTML("html", func(e *colly.HTMLElement) {
e.ForEach("a[href]", func(_ int, el *colly.HTMLElement) {
e.Request.Visit(el.Attr("href"))
})
}
When Colly's collector detects that the requested URL is an HTML page, it'll trigger this callback and loop through every <a> element with an href attribute. It'll then visit the URL in the href. That's really all we need to crawl through a website with Colly! This example code doesn't do much, so let's have a look at how we can scrape information from the page.
The OnHTML method takes two parameters, a selector and a callback. That selector is anything supported by goquery and if you're comfortable with CSS selectors then you'll be good. This selector specifies the element(s) that will be passed as the second argument to OnHTML, which has a type of colly.HTMLElement. With the methods on that type you can further focus down your selection:
c.OnHTML("article", func(e *colly.HTMLElement) {
exportArticle(
e.ChildText("news__meta"), e.ChildText("news__title")
)
}
Every time Colly sees an article element on the current page it'll pass it to the callback, where we use the ChildText method to select metadata and title for export. Colly has loads of examples which go into further depth, so we'll leave our quick overview here.
All aboard!
Having been suitably impressed by Colly's simplicity, we completed our project without fuss. It's not the first time we've written a crawler and so we wanted to see if we could easily use Colly in future projects without rewriting the same code. We wondered if we could extend Colly's use of selectors so that we could just reconfigure the crawler to run on a completely different project. It turned out we could!
Super Simple Scraper takes a JSON configuration file and pushes it into Colly's crawl engine. Out pops a JSONL file. Let's take a look at a configuration snippet. Web crawling and scraping ahoy!
"html": {
"selectors": {
"title": "title",
"h1": "h1",
"url": "{{ .Request.URL }}"
}
}
This is the configuration used when scraping HTML pages. We specify that there should be a selector called "title" which grabs the contents of the title tag. Likewise a selector called "h1" that grabs the combined contents of all the h1 tags on the page. The last selector is a templated selector which grabs the URL of the page.
We've provided a Docker image to run SSScraper, which means that you can run it with a single command:
docker run -it -v pwd:/go/src/app -e "CONFIG=$(cat ./path/to/your/config.json | jq -r tostring)" gotripod/ssscraper:main
SS Scraper provides results
And that'll produce a JSONL file, where the selector names are used as the JSON keys:
{"h1":"Want the internet to work for you? Got an idea for a project?","title":"Contact Go Tripod | website \u0026 web application development in Falmouth, Cornwall","url":"https://gotripod.com/contact/"}
{"h1":"Topic: Git Got an idea for a project?","title":"Git Archives - Go Tripod","url":"https://gotripod.com/topics/git/"}
That's some Super Simple Scraping! The "title" and "h1" selectors are straightforward, but there's some interesting stuff happening in the "url" selector. Let's break that down to understand it a bit more.
We're using Go's text/templates package, and passing in the current request as a value. The selector {{ .Request.URL }} therefore becomes: "give me the value of the URL field on the Request variable".
Templates also have access to sprig helpers, which means you can get fancy with something like:
{{ .Request.URL.Path | regexFind \"\/(insights|work)\/\" | replace \"/\" \"\" }}
That would return either "insights", "work", or an empty string, depending on which appeared in the URL of the current page.
Why JSONL? Because we can then import it straight into Typesense to search it!
Custom software for custom requirements
SS Scraper doesn't do anything that someone familiar with Go couldn't do, but it does mean that we can quickly deploy a crawler/scraper on a completely new project without having to write code. We can have different config files for different projects rather than having to start afresh each time. SS Scraper is open source on GitHub, and if you'd like us to help you deploy a crawler or scraper for your site, please get in touch.
Custom WordPress data import - solving business problems with plugins
Automotive industry manufacturer Sanden recently asked us to import a new set of data into their site, which we built on WordPress several years ago. While we knew this was going to be a one-off custom WordPress data import, there were a few things to consider when deciding how to implement it.
- The import would take a while to run, and we needed to see some kind of progress indicator
- Because the import time will exceed the allowed request timeout, we'll need to process the import in the background
- If anything went wrong during the import we'd need a log
- It'd be good to do a "dry run" to check for problems without writing to the database
This was one of those situations where WordPress is a little bit more of a hindrance than another system might be. Because the structure of the WordPress database is one-size-fits-all, it can be a bit tricky to do the kind of SQL INSERT you might do with other systems, and so we needed to jump through a few hoops. With the requirements asking for a dry run toggle, a progress indicator and a log display, it made sense to build a custom WordPress data import plugin which would show up in the WP admin and let us build a user interface. It could also use the WordPress authentication mechanism to restrict access to authorised users.
Rather than reinvent the wheel, we used Action Scheduler as the backbone for our import processing. It also provided hooks to allow us to generate log files. It comes with its own dashboard to allow you to diagnose any issues, which we used during development of our plugin. Once that had been selected, the core of the import process was very simple - checking that records didn't already exist and using the ACF API to create them where missing.
As well as these benefits, building a custom WordPress plugin gave us a means to logically separate our code. We could package it up in a zip file for easy installation and updates, making testing a breeze.