Behind the App with Dave Kilbey

, 15 May 2020
Behind the App with Dave Kilbey
Common Toad © Dave Kilbey

Dave Kilbey has supplied Sussex Wildlife Trust with many wonderful photos over the years, but more recently, he's helped the Trust out hugely during the lockdown period by building an app for our Back Garden Bird Race. We interviewed him over the phone about apps and why he's no longer involved with wildlife photography...

Tell us a bit about yourself

I was born in Wiltshire, and nature mad for as long as I can remember. As a kid I was out in the countryside all day, and sometimes well into the night (sorry mum and dad). I took a lot of notice of what was around me and at primary school was always rescuing worms from puddles and collecting chrysalises after they'd hatched. I found birds especially interesting and spent every spare minute collecting feathers, looking for egg shells and working out which birds I could hear singing. I still find everything about the natural world engrossing and wonderful (although I might exclude ticks and some other parasites from that).

081231 mute swan 8228 Kilbey

My view that the environment is what really matters has never changed. I studied Ecology and Conservation at Sussex Uni, but struggled to get work in that field. I volunteered for Wiltshire Wildlife Trust and other organisations, but in the end, like many struggling ecologists, fell into IT. I cut my teeth working in IT Support for NERC which, surprisingly, I loved. I went on to teach IT at the LSE and University of Bristol. At Bristol I got the chance to lead a project for researchers in Biological Sciences to use a smartphone app to monitor the spread of the invasive Horse Chestnut Leaf Miner (a small moth). 

090511 redshank 0013 Kilbey

This was a relatively novel idea at the time and captured the public’s interest (aided and abetted by tweets from Stephen Fry and a spot on The One Show). From that first foray into apps, my business, Natural Apptitude, was born. 

We specialise in creating data collection apps especially where these employ ‘citizen science’. We have built over 60 apps now, many helping charities and researchers collect data on species of concern so that populations can be monitored eg Swift Mapper and Whale Track. Our main focus going forwards though will be Coreo – a platform you can use to build your own data collection apps without knowing any code. Our aim is to make data collection apps available to everyone, because data is critical to so much of what we seek to do within the field of conservation.

090514 dunlin 3033 Kilbey Edit

How did you come to get involved in the Back Garden Bird Race?

A university friend of mine knows Michael Blencowe. I got a mysterious text out of the blue asking me if I had a back garden. And then another to ask me to take part in a ‘bird race’. My friend was set on beating Michael’s tally, and I was the backup. So, a birding duel ensued. It was such a fun and lovely thing to do given the lockdown and it has blown up into an extremely popular weekly event. It quickly became clear that it was going to be a tough job for Michael (and Lois from the Sussex Biodiversity Record Centre who started helping him), to juggle the data that was coming in from all directions. So, I created the Back Garden Bird Race app, with an ID guide, and sent it to Michael. He was really pleased, and it’s now in use every week and helping them manage the large quantity of records that get submitted as well as helping people identify the birds they see during the Bird Race.

Michael’s Wildlife Diaries are one of my favourite reads, and the Back Garden Bird Race is a triumph. It's become the highlight of my week, and I daresay for many other people too. It’s generated a real community spirit and involves all levels of interest, from newcomers to more experienced bird watchers. As a seasoned ecologist, I love to see people becoming interested in nature, and I really hope it will lead to a life-long love affair. 

090502 robin 6833 Kilbey

Tell us about your wildlife photography

Sadly, I don't do it anymore, mostly because of time constraints. When I first got into wildlife photography it was before the digital age. It was much more of niche interest back then. I love it as an art form and as a way to connect with nature. But, after the advent of digital, it’s become very popular and I think there’s generally too much pressure put on wildlife. I absolutely see the value of sharing images of wildlife, which help more people become engaged with it and care about it. But I became increasingly disillusioned when I saw the lengths that some people are prepared to go to capture 'the perfect shot'. Even if that means disturbing or having a negative impact on the wildlife itself. I feel I can now do more for conservation by concentrating on engaging people with nature in other ways.

090321 common hare 9428 Kilbey

Dave Kilbey


Leave a comment
Time Δ Debug Message - Perch Runway 3.2
1783198494.3340 [906] SELECT p.pagePath, pr.routePattern, pr.routeRegExp, p.pageTemplate, pr.routeOrder, s.settingValue AS siteOffline FROM swt_pages_staging p LEFT JOIN swt_page_routes pr ON p.pageID=pr.pageID LEFT JOIN swt_settings s ON s.settingID='siteOffline' UNION SELECT NULL AS pagePath, pr2.routePattern, pr2.routeRegExp, pr2.templatePath AS pageTemplate, pr2.routeOrder, NULL AS siteOffline FROM swt_page_routes pr2 WHERE templateID!=0 ORDER BY routeOrder ASC, pagePath ASC
1783198494.360.026Matched route: news/[slug:s]
1783198494.36030.0002Server address: 216.73.217.177
1783198494.36030Using master page: /templates/pages/blog/post.php
1783198494.36030Page arguments:
Array
(
    [0] => /news/behind-the-app-with-dave-kilbey
    [s] => behind-the-app-with-dave-kilbey
    [1] => behind-the-app-with-dave-kilbey
)
1783198494.36060.0003 [1] SELECT * FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783198494.36160.001 [86] SELECT DISTINCT settingID, settingValue FROM swt_settings WHERE userID=0
1783198494.36350.0019 [1] SELECT locationID FROM swt_shop_tax_locations WHERE locationIsHome=1 LIMIT 1
1783198494.36420.0007INSERT INTO swt_shop_cart(memberID,locationID,currencyID,cartPricing,cartProperties) VALUES(NULL,'1',47,'standard','[]')
1783198494.36630.0021 [1] SELECT * FROM swt_shop_cart WHERE cartID=22627342
1783198494.36680.0005 [1] SELECT * FROM swt_shop_cart WHERE cartID=22627342
1783198494.36750.0006 [nil] SELECT * FROM swt_shop_sales WHERE saleFrom<='2026-07-04 20:54:00' AND saleTo>'2026-07-04 20:54:00' AND saleActive=1 AND saleDeleted IS NULL ORDER BY saleOrder ASC
1783198494.36870.0013 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='behind-the-app-with-dave-kilbey')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-07-04 20:54:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 10
1783198494.37110.0024 [1] SELECT FOUND_ROWS() AS `count`
1783198494.37160.0005 [1] SELECT * FROM swt_blog_posts WHERE postID=2144 AND postStatus='Published' AND postDateTime<='2026-07-04 20:54:00'
1783198494.37240.0008 [13] SELECT * FROM swt_blog_sections ORDER BY sectionTitle ASC
1783198494.37310.0007 [1] SELECT * FROM swt_blogs ORDER BY blogTitle ASC
1783198494.37370.0006 [1] SELECT * FROM swt_categories WHERE catID=195 LIMIT 1
1783198494.37420.0005 [1] SELECT * FROM swt_categories WHERE catID=69 LIMIT 1
1783198494.37480.0006Using template: /templates/blog/post.html
1783198494.37510.0002 [162] SELECT catID, catPath FROM swt_categories
1783198494.3760.0009 [1] SELECT * FROM swt_blog_posts WHERE postStatus='Published' AND postDateTime<='2026-07-04 20:54:00' AND postSlug='behind-the-app-with-dave-kilbey'
1783198494.39750.0215Using template: /templates/blog/post.html
1783198494.39810.0007 [250] SELECT country, countryID FROM swt_shop_countries WHERE countryActive=1 ORDER BY country ASC
1783198494.39960.0015Using template: /templates/pages/attributes/seo.html
1783198494.39990.0002 [1] SELECT regionID, regionTemplate, regionPage, regionRev AS rev FROM swt_content_regions WHERE regionKey='Banner image' AND (regionPage='/news/post' OR regionPage='*')
1783198494.40070.0008 [nil] SELECT * FROM ( SELECT idx.itemID, c.regionID, idx.pageID, c.itemJSON, idx2.indexValue as sortval FROM swt_content_index idx JOIN swt_content_items c ON idx.itemID=c.itemID AND idx.itemRev=c.itemRev AND idx.regionID=c.regionID JOIN swt_content_index idx2 ON idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev AND idx2.indexKey='_order' WHERE ((idx.regionID=104 AND idx.itemRev=0)) AND idx.itemID=idx2.itemID AND idx.itemRev=idx2.itemRev ) as tbl GROUP BY itemID, pageID, itemJSON, sortval, regionID ORDER BY sortval ASC
1783198494.4020.0014 [82] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageDepth >=0 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783198494.40480.0028 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783198494.40530.0005 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783198494.40720.0019Using template: /templates/navigation/ps_nav_template.html
1783198494.40720 [6] Using template: /templates/navigation/ps_nav_template_children.html
1783198494.4080.0008 [4] Using template: /templates/navigation/ps_nav_template_children.html
1783198494.40860.0005 [29] Using template: /templates/navigation/ps_nav_template_children.html
1783198494.41130.0028 [10] Using template: /templates/navigation/ps_nav_template_children.html
1783198494.41240.0011 [7] Using template: /templates/navigation/ps_nav_template_children.html
1783198494.41320.0008 [9] Using template: /templates/navigation/ps_nav_template_children.html
1783198494.41620.003 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' OR pageSortPath='/news/post' LIMIT 1
1783198494.4170.0009 [1] SELECT * FROM swt_pages_staging WHERE pageHidden=0 AND pageNew=0 AND pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition
1783198494.41920.0022 [1] Using template: /templates/navigation/breadcrumbs.html
1783198494.41970.0004Using template: /templates/blog/post.html
1783198494.41990.0002 [1] SELECT * FROM swt_blog_authors WHERE authorID='20' LIMIT 1
1783198494.42050.0007Using template: /templates/blog/author.html
1783198494.42090.0004 [1] SELECT SQL_CALC_FOUND_ROWS DISTINCT tbl.* FROM ( SELECT idx.itemID, main.*, idx2.indexValue as sortval FROM swt_blog_index idx JOIN swt_blog_posts main ON idx.itemID=main.postID AND idx.itemKey='postID' JOIN swt_blog_index idx2 ON idx.itemID=idx2.itemID AND idx.itemKey='postID' AND idx2.indexKey='_id' WHERE 1=1 AND ((idx.indexKey='postSlug' AND idx.indexValue='behind-the-app-with-dave-kilbey')) AND idx.itemID=idx2.itemID AND idx.itemKey=idx2.itemKey GROUP BY idx.itemID, idx2.indexValue, postID ) as tbl WHERE (postStatus='Published' AND postDateTime<='2026-07-04 20:54:00' ) GROUP BY itemID, sortval ORDER BY sortval ASC LIMIT 0, 1
1783198494.4230.0021 [1] SELECT FOUND_ROWS() AS `count`
1783198494.42340.0004 [1] Using template: /templates/blog/post.html
1783198494.42640.003Using template: /templates/blog/comment_form.html
1783198494.42740.001 [nil] SELECT * FROM swt_blog_comments WHERE 1=1 AND postID=2144 AND commentStatus='LIVE' ORDER BY FIELD(webmentionType, 'like', 'repost', 'comment', NULL) ASC, commentDateTime ASC
1783198494.47830.0509 [0] Using template: /templates/blog/comment.html
1783198494.47850.0003Using template: /templates/blog/post.html
1783198494.47880.0003 [1] SELECT * FROM swt_blog_authors WHERE authorID='20' LIMIT 1
1783198494.47950.0008 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/what-we-do' OR pageSortPath='/what-we-do' LIMIT 1
1783198494.48030.0008 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-002' LIMIT 1
1783198494.48090.0005 [7] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-002%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783198494.48290.002 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783198494.48340.0005 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783198494.48530.0019 [6] Using template: /templates/navigation/footer-nav.html
1783198494.48620.0009 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1783198494.48670.0005 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1783198494.48730.0005 [38] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' ORDER BY pageTreePosition ASC
1783198494.48990.0026 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783198494.49050.0006 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783198494.49250.002 [10] Using template: /templates/navigation/footer-nav.html
1783198494.49560.0031 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/visit' OR pageSortPath='/visit' LIMIT 1
1783198494.49620.0006 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-004' LIMIT 1
1783198494.49660.0004 [30] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-004%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783198494.49890.0023 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783198494.49940.0005 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783198494.50140.002 [29] Using template: /templates/navigation/footer-nav.html
1783198494.50390.0026 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pagePath='/make-a-difference' OR pageSortPath='/make-a-difference' LIMIT 1
1783198494.50450.0006 [1] SELECT pageID, pageParentID, pageDepth, pageTreePosition FROM swt_pages_staging WHERE pageTreePosition='000-005' LIMIT 1
1783198494.5050.0004 [11] SELECT * FROM swt_pages_staging WHERE pageNew=0 AND pageHidden=0 AND pageTreePosition LIKE '000-005%' AND pageDepth >=1 AND pageDepth<=2 ORDER BY pageTreePosition ASC
1783198494.50690.002 [1] SELECT pageTreePosition FROM swt_pages_staging WHERE pagePath='/news/post' LIMIT 1
1783198494.50740.0005 [2] SELECT pageID FROM swt_pages_staging WHERE pageTreePosition IN ('000-006-001', '000-006', '000') ORDER BY pageTreePosition DESC
1783198494.50930.0019 [10] Using template: /templates/navigation/footer-nav.html
1783198494.51080.0015Request time: 0.179
1783198494.51080Process time: 0.1789
1783198494.51080Memory: 1.6525