Dave Fancher

Dave Fancher

Developer and trainer

Indianapolis, Indiana, United States

Dave Fancher is a Lead Software Engineer at Vibenomics, A Mood Media Company in Fishers, Indiana, where he leads API development to deliver a reliable in-store digital advertising experience to customers across the United States. With a career spanning more than two decades, He has a passion for technology and has built software across a variety of industries and technologies.

Dave has spent much of his career working primarily with Microsoft technologies, .NET and SQL Server, in particular. His recent work has been heavily focused on Node.js and MongoDB. Along the way, Dave stumbled upon functional programming, first through LINQ, then F#. Functional programming changed the way he develops software and although he seldom works in purely functional environments these days, the lessons and techniques continue remain a distinguishing characteristic of how he thinks about and builds solutions for his customers.

Not content with merely developing software, Dave enjoys sharing his experiences and knowledge through user groups, conferences, and more formal training. He is a former Microsoft MVP for Visual Studio and Development Technologies, author of The Book of F# (No Starch Press), and author of Functional Programming with C# and Building F# Type Providers on Pluralsight, and has spoken a numerous events across the United States and Europe.

Area of Expertise

  • Information & Communications Technology


  • JavaScript
  • NodeJS
  • MongoDB

Getting Started with Node.js

I’ve spent the vast majority of my career building software for the .NET Platform but when my team chose to build a project on Node.js I felt like I was starting over. Gone were the libraries, techniques, and tools I’ve relied on for so long. In their place were an entirely new ecosystem which I had to quickly learn to navigate. If you find yourself in a similar situation let me give you a head start by sharing many of the things I’ve learned to continue being a productive member of my team.

Node.js Multithreading

Node.js's sweet spot has traditionally been with I/O-intensive processes. It's event-driven architecture allows I/O operations to run concurrently while their associated callbacks are executed synchronously in the event loop. This, however, comes with a dark side in that CPU-bound operations are likely to block the event loop thus delaying when those callbacks are invoked. Fortunately, Node.js ships with several modules that allow us to offload those blocking CPU-bound operations from the main event loop so it's free to handle other tasks while the CPU-bound operations go about their business. Most notably we'll explore some ways in which the child_process and worker_threads modules can keep your Node.js application performant while still handling those CPU-intensive operations.

Intro to MongoDB

Relational databases have long been the defacto standard for data management. In recent years, a number of competing technologies have started gaining favor. Among these technologies lies MongoDB, a robust document database designed to naturally fit into a variety of development environments. By storing data as documents that reflect the structures as they exist within our applications, MongoDB changes how we approach data storage and retrieval.

Let's explore data management with MongoDB. We'll discuss how collections and the document model require different thought processes than more traditional relational structures. We'll then discuss managing data through CRUD operations and the aggregation pipeline. We'll also look at some performance tuning considerations and even some common schema patterns. At the end of our discussion you should have a solid understanding of some core MongoDB concepts, how MongoDB could fit into your environment, and a foundation for further study.

Node.js Streams

Streams play a central role in many aspects of Node.js development particularly when it comes to working efficiently with external data sources. In this session we'll dive into the different types of Node.js streams, how to manage them, and how you can leverage them to naturally add another degree of composability to your own code.

Functional-Flavored JavaScript

I've spent nearly half of my 20 year software development career enamored with functional programming and embracing its principles. Imagine my horror then when my career took an unexpected turn and I suddenly found myself working on a greenfield project, building a brand new API...in node.js. JavaScript. The wild west. Surely there was no way a functional programmer like me could ever thrive in this world. Or was there?

Learn how I've applied functional principles via modern JavaScript features such as scoped declarations, array methods, arrow functions, and the reflection APIs to build the flexible, scalable, and responsive system that powers my company's business.

Cleaner Code: How Functional Code is Clean Code

Since 2008 Bob Martin's seminal work "Clean Code" has been teaching developers a series of guidelines for writing maintainable code and improving software quality. While several of the guidelines such as naming conventions and comment style are highly subjective, the astute reader will notice that the remaining guidelines are actually quite objective. All too often, following the Clean Code guidelines is mostly a matter of developer discipline. Let's discuss how those objective guidelines improve code quality, how they often naturally arise when programming in a functional style, and how many functional languages actively enforce them thus eliminating the need to rely on discipline and naturally eliminate the complexities they address.

JavaScript Metaprogramming

Metadata, data about data, is everywhere. We seem to intrinsically understand that using data to further describe the data within our systems brings numerous benefits to taming complexity. It follows then that metaprogramming, programming that interacts with the program itself by inspecting or even manipulating its own code can bring similar benefits to our software.

ES6 greatly expands upon JavaScript's existing metaprogramming capabilities with the Symbol, Reflect, and Proxy types. Through some practical examples we'll discuss the role each of these types play within JavaScript metaprogramming and see how they not only affect your code but even drive several modern language features.

JavaScript & Friends 2023 Sessionize Event

August 2023 Columbus, Ohio, United States

KCDC 2023 Sessionize Event

June 2023 Kansas City, Missouri, United States

Seattle CodeCamp 2018 Sessionize Event

September 2018 Seattle, Washington, United States

KCDC 2018 Sessionize Event

July 2018

Dave Fancher

Developer and trainer

Indianapolis, Indiana, United States

Please note that Sessionize is not responsible for the accuracy or validity of the data provided by speakers. If you suspect this profile to be fake or spam, please let us know.

Jump to top