In January this year I started working at 7Digital, the leading global open music platform, in the Search & Content Discovery Team.
My role as a developer was quite a change from my previous jobs and I have relished the challenge of something new.
I’ve learnt not only new technologies but also better methodologies. Here are the 7:
Real time application monitoring with New Relic. Install the New Relic agent upon the server you wish to monitor, and with a little configuring, your web app will now start logging a wealth of metrics such as web request and response times, database query time and error rates. The visualisation of this data is very slick too.
StatsD & Graphite, which allow monitoring of any custom metric and presenting it in easy to read graphs. 7digital take a similar philosophy to Etsy, and favour monitoring production applications over trawling through log files. StatsD has a C# client library which we make extensive use of. Written by fellow 7digital developer, Goncalo Pereira it allows us to monitor any metric by sending UDP packets to a StatsD server. Unlike New Relic, metrics must be explicitly defined within the application by writing code that calls the library. This lets us monitor the areas that New Relic doesn’t, along with monitoring very specific events. Being able to see Zabbix stats is often a benefit too.
2. Continuous Delivery
TeamCity and continuous delivery, which makes deploying to production a simple case of clicking on a few buttons on the Team City project page, which allows 7digital to deploy to live dozens of times a day. Coupled with the extensive monitoring that we have, live deploys are low drama affairs.
Use of Raspberry Pis for displaying the Graphite monitoring graphs encouraged me to have a tinker with a Pi at home too. 7digital now use Pis for monitoring of all their production statistics, which are affixed to monitors hanging from the ceiling around the office.
I now work with Linux servers in production. I’d played with Linux in my own time at home, but now that our team is responsible for ensuring performance of the Solr infrastructure, I’ve learnt an awful lot.
Solr is an HTTP accessible search platform powered by Lucene. The 7digital’s search and catalogue API endpoints are powered by Solr servers. A large part of my day to day activities relate to improving the search performance in the 7digital API, understanding how best to insert documents into the Lucene index and understanding what makes a good schema. My colleague James Atherton has given a presentation to the SolrLucene Revolution conference in San Diego earlier this year, discussing what has been learnt in the process of migrating from a SQL Server text search system to a scalable Solr infrastructure system. As part of managing the infrastructure, I’ve just begun to learn about configuration management using CFEngine to manage server configuration in an automated fashion.
5. RESTful APIs
7digital’s API a RESTful one. Each endpoint on the public API routes to an internal API which is owned by a development team. OpenRasta is the web framework used in my team, which was quite different from working with ASP.Net MVC powered websites.
6. Methodologies inspired by The Goal, and The Phoenix Project
The Goal: A Process of Ongoing Improvement and The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win
are books which everyone at 7digital has been encouraged to read. Both of which are novels concerning organisations that are struggling to improve their engineering processes, and succeed once they focus on finding the bottlenecks in the processes that are slowing them down. The Goal was originally written in the 1980′s and focussed on a manufacturing plant’s processes, which correlate surprisingly well with software delivery processes. The Phoenix Project is essentially a modern rewrite of The Goal, but focussed on an IT department within a larger organisation. Both books vividly describe the problems many developers, Sys Admins and managers have experienced first-hand. I liken it to Clean Code but for organisations.
Working with a smart team who can deliver results is a great experience. Compared my previous workplaces there’s a more collaborative approach to problem solving across the teams. The levels of expertise within the company is inspiring and I always learn something new each time I informally chat with a member of another team.
I’ve been impressed so far and I look forward to what the future projects will bring!
The best software book that I’ve read is undoubtedly Clean Code: A Handbook of Agile Software Craftsmanship (Robert C. Martin), which changed my approach to programming entirely. Bob Martin’s highly readable examples really push home the strength’s of SOLID design principles, without being too abstract or dry unlike the original Gang of four Design patterns book
His follow up book The Clean Coder is worth a read, covering important “soft skills” that a good programmer should have in order to work with all stakeholders in a software project.
Effective C#: 50 Specific Ways to Improve Your C# provides a plethora of C# idioms and techniques, and importantly it shows the reader when to use them correctly and when their use is *not* appropriate. I discovered many efficient ways of writing code and I felt obliged to revisit some recently written code to apply my newly found knowledge.
Head First Design Patterns makes for a great way to become familiar with design patterns and understand the correct circumstances to use them. All the code examples in this book are in Java. Given that I started learning Java at university I’ve had little trouble applying the patterns in C#, as they are quite similar languages. I find that I revisit the book to refresh my memory, so it will serve you well as a reference book.
I was lucky to be recommended The Career Programmer: Guerilla Tactics for an Imperfect World by a software professional before I actually started working in the commercial world of programming, so it has influenced my working practises from day one. Focussing on how to deliver software projects in environments that are hostile to efficient work, this book will guide you how to become a productive and valued developer and make your boss love you (or at least appreciate you!)
Growing Object-Oriented Software, Guided by Tests is required reading if you intend to understand, appreciate, and get the best out of Test Driven Development.
I have been fortunate to attend a training course by the author of Specification by Example: How Successful Teams Deliver the Right Software, Gojko Adzic, when he came to my workplace. Although I’ve not yet read this book in its entirety (there is a copy on my desk) I can see it covers most of the topics I learnt in Gojko’s course. The implementation we chose as a result from the course was to use Specflow to write out our scenarios, as described on Steve Sanderson’s post
Speaking of Steve Sanderson, anyone who wants to write MVC.net web applications should read his book on the subject. Pro ASP.NET MVC 3 Framework 3rd Edition. If it is like the MVC 2 edition that I’ve read, he’ll bring you up to speed with MVC and show the benefits over ASP.Net web forms.
Code Complete: A Practical Handbook of Software Construction while I haven’t read it cover to cover unlike most of the books I’ve described above, it does have some useful knowledge tucked away, yet it lacks the succinctness of Clean Code
Finally, I’m currently reading and enjoying Dependency Injection in .NET which is a pattern that can be extensively using in the MVC framework. The code examples in the book model accurately what I’ve used in production sites, so the book gets my seal of approval.
Do you have any suggestions? What do you think is should be essential in a web developer’s reading list? Leave a comment and let me know your thoughts
I’ve wanted to get a better handle on the Dependency Injection for a while, and discover what the optimal approaches are.
Dependency Injection In .Net by Mark Seemann is a great book on the subject, with good examples and clear writing. When new concepts are introduced, the author includes concise definitions and copious references for further reading. I recommended it, and I was particularly pleased to see the epub version on the book available in addition to pdf and .mobi formats!