Iowa Code Camp - Sessions

Registration is closed. See you Saturday!

  • "So, who's gonna tell 'em?"

    The talk about "the talk" that nobody wants to talk about. The growing emphasis on "Individuals and Interactions" yields tremendous rewards, but not without risk. Teams who work together more increasingly find themselves in situations where they NEED to have sensitive and high risk conversations, but don't always know how to approach it. Everyone knows about some of the biggest challenges that face a team. They are also aware of the many ways the corrective conversation that can go awry. These conversations are often indefinitely delayed. Opportunities for growth are missed and resentment grows. Learn how to be the agent of change your team needs with techniques and practices to help you master the crucial conversations.

    9:00 AM - 10:15 AM : Room 107 (QCI) : "So, who's gonna tell 'em?" (Level: 100)
    Speaker: Dustin Thostenson

  • "We'll do it live!": Monitoring and Debugging in Production

    That big "P" word: Production. That new piece of shiny code you just wrote with a hundred percent test coverage goes ka-put once it's deployed once deployed there. What broken, and why? Sometimes the errors are a little more subtle, lying and growing there until you reach the right conditions. Either way, when users experience problems, it's not good. Maybe we need to check our assumptions a bit and figure out how to lower the risk if things go sideways. We'll go over my experience in a highly regulated industry to apply the OODA loop, continuous delivery, ownership, and observability to embrace failure to lower risk of production incidents.

    3:45 PM - 5:00 PM : Room 114 : "We'll do it live!": Monitoring and Debugging in Production (Level: 200)
    Speaker: Luke Amdor

  • A DSL for Your API

    Have you ever wanted to allow your users to be able to write scripts to execute actions within your application? Have you ever wondered how applications that do this accomplish it? Have you ever been sitting around with too much time on your hands and needed something interesting to think about? If so, then this talk is for you. During this talk we'll look at an app with a simple, easy to Grok API, and build up our own scripting language using the ANTLR4 Parser/Lexer generator, with which to drive it. All this, faster than you can say "The Dragon Book".

    2:15 PM - 3:30 PM : Room 108 (Scooter Software) : A DSL for Your API (Level: 200)
    Speaker: Greg Sohl
    Session Materials: Slides

  • An Advocates Guide: You Just Got Hired. Now What?

    Great! You landed a new job and are now on a team of developers. Who is bringing you up to speed? What are you doing in your down time? What questions do you ask? This talk aims to demystify those questions, decrease imposter syndrome and give less experienced developers a fair chance at becoming leaders. Juniors to tech leads will find this talk valuable.

    2:15 PM - 3:30 PM : Room 112 : An Advocates Guide: You Just Got Hired. Now What? (Level: 100)
    Speaker: Michael Liendo

  • API Design from the consumer's persepective

    This session is to explain and show examples of how to design your APIs to make consuming them as easy and intuitive to the consumer as possible while also providing the functionality of a solid API.

    12:45 PM - 2:00 PM : Room 114 : API Design from the consumer's persepective (Level: 200)
    Speaker: Bobby Dineen

  • Are you ready for production and the barbarian horde? Scaling, Scalability Techniques and Best Pract

    Talk on how and why to scale. Go over the 12-Factor app principles and discuss personal experience in utilizing these patterns to scale large systems at Workiva. Overview of scale evaluations and techniques to understand how well your system scales.

    12:45 PM - 2:00 PM : Room 115 : Are you ready for production and the barbarian horde? Scaling, Scalability Techniques and Best Pract (Level: 100)
    Speaker: Ross Hendrickson

  • ASP.NET Core 2 Fundamentals

    In this talk we'll go over the fundamentals of ASP.NET Core 2 and what you need to know to get started and be productive. We'll discuss the latest changes and improvements made in ASP.NET Core 2 over the 1.x versions including the brand new Razor Pages.

    10:30 AM - 11:45 AM : Room 113 : ASP.NET Core 2 Fundamentals (Level: 100)
    Speaker: Scott Sauber
    Session Materials: Slides

  • Basics of the Mobile Market: From Prototyping and Design to Delivery

    Companies like Google and Apple have made it really easy for any developer to create an app. The tools are great, the community support is amazing, and the tutorials are endless. This leads to a lot of amazing apps, but it also means the mobile market is crowded. There are a ton of apps out there and they do almost everything you can think of. How can you design and make something that will get noticed, and once you do, how can you maintain that momentum and build a product or a brand that is truly unique? I will cover the basics of getting started with your idea, including the importance of UI/UX as a base for your app and the tools for developing an Android app. Then I will go into the release process and how to convert views to installs and retain those users for the life of your app.

    10:30 AM - 11:45 AM : Room 106 (Robert Half) : Basics of the Mobile Market: From Prototyping and Design to Delivery (Level: 100)
    Speaker: Luke Klinker

  • Beginner's Guide to Refactoring Code

    Imagine that you have just started working on a large established legacy code base with little test support. Documentation doesn't exist and the development culture has been of a ‘git er done' mentality, so there are reams of bugs, unused code, copy pasta, and so on. When you are tasked to make enhancements to this code, it seems like anything you do will likely cause it to break. In this session we will take a codebase of questionable quality and walk through a series of refactorings. I will lay out a consistent approach that you can apply to such code, and we will cover the common refactorings that are available in Eclipse, Intellij, and Visual Studio. If you bring your laptop along, I will be using Eclipse and code I find on Github, so you should be able to follow the presentation as we go through it.

    9:00 AM - 10:15 AM : Room 113 : Beginner's Guide to Refactoring Code (Level: 100)
    Speaker: Daniel Juliano

  • Break

    Break and refreshments

    10:15 AM - 10:30 AM : Atrium : Break (Level: 100)
    Speaker: Iowa Code Camp

  • Break

    Break and refreshments

    2:00 PM - 2:15 PM : Atrium : Break (Level: 100)
    Speaker: Iowa Code Camp

  • Break

    Break and refreshments

    3:30 PM - 3:45 PM : Atrium : Break (Level: 100)
    Speaker: Iowa Code Camp

  • Building a Distributed Message Log from Scratch

    Apache Kafka has shown that the log is a powerful abstraction for data-intensive applications. It can play a key role in managing data and distributing it across the enterprise efficiently. Vital to any data plane is not just performance, but availability and scalability. In this session, we examine what a distributed log is, how it works, and how it can achieve these goals. Specifically, we'll discuss lessons learned while building NATS Streaming, a reliable messaging layer built on NATS that provides similar semantics. We'll cover core components like leader election, data replication, log persistence, and message delivery. Come learn about distributed systems!

    9:00 AM - 10:15 AM : Room 114 : Building a Distributed Message Log from Scratch (Level: 200)
    Speaker: Tyler Treat

  • Building Large, Yet Maintainable, ASP.NET Applications

    As an application adds more and more features, if you're not careful, it can quickly spiral into becoming the application no one on the team enjoys working on. This talk is structured as a series of lightning talks on various topics to help you improve the maintainability of your ASP.NET applications. We'll discuss libraries and best practices to help with folder structure, validation, ORM's, unit testing, code flow, DevOps, and more. By the end, you should be able to take at least one thing away that you can start implementing immediately when you get back to the office.

    3:45 PM - 5:00 PM : Room 113 : Building Large, Yet Maintainable, ASP.NET Applications (Level: 100)
    Speaker: Scott Sauber
    Session Materials: Slides

  • Building your own AI (in a tube): DIY Alexa, Cortana, and Google Home

    Amazon Echo devices are affordable and are now in every home. Every windows machine comes with Cortana and Cortana even lives in entertainment systems. Would you like to build your own Cortana, Alexa, or Google home from scratch? We have built a device for under $100.00. We will show you how to design a 3D printable case. We will discuss our hardware selection for the brain of our very own Ai. We will show what we used for microphone and audio. Finally, we will show the code under the covers on selecting the Ai of choice and bringing the tube to life.

    12:45 PM - 2:00 PM : Room 108 (Scooter Software) : Building your own AI (in a tube): DIY Alexa, Cortana, and Google Home (Level: 100)
    Speaker: Min Maung & Lwin Maung

  • Closing Session

    Wrap it up and go out with a bang.

    5:00 PM - 5:30 PM : Room 106 (Robert Half) : Closing Session (Level: 100)
    Speaker: Iowa Code Camp

  • Couch to Code

    Learn about code boot camp experience from two recent graduates of the first graduating Delta V class. Find out what we learned and our experience putting our lives on hold for 20 weeks.

    10:30 AM - 11:45 AM : Room 109 : Couch to Code (Level: 100)
    Speaker: Jason Logan and Benjamin Beeksma

  • Data Visualization with ggplot2

    This session will introduce you to data visualization using ggplot2, an elegant and versatile plotting system for R. ggplot2 is based on a "grammar of graphics" for describing and building plots. Data is mapped to aesthetic attributes (color, shape, size, etc) of geometric objects (points, lines, bars, etc). Statistical transformations may be applied and the plot can be drawn on a specific coordinate system. A plot can be repeated for subsets of the data using facetting. Sophisticated graphics can be built up in layers, combining multiple data sets if desired. Themes can be used to control things like font size and background color. Much of the power of ggplot2 comes from the fact that it is based on coherent set of principles. Although this means there is a bit of a learning curve, ggplot2 is not going to get you 90% of the way to your desired graphic and leave you frustrated that there is no way to achieve what you really want. Basic knowledge of R will be assumed but not absolutely required. You'll come away with a basic understanding of how to create data visualizations using ggplot2.

    3:45 PM - 5:00 PM : Room 108 (Scooter Software) : Data Visualization with ggplot2 (Level: 200)
    Speaker: David W. Body

  • Debate Me

    For about 15 years I have been developing software and in that time have settled on certain opinions and preferences based on my experiences. Confirmation bias and the bubble that I am in reinforce those opinions and preferences. In this talk audience participation is required. I will be presenting a list of my personal opinions and preferences and, for each one, will open up the floor for friendly debate. My hope is that I can learn something and at the same time impart some useful information to all who attend.

    2:15 PM - 3:30 PM : Room 109 : Debate Me (Level: 100)
    Speaker: Matthew Morrison

  • Docker is Helping NFM Better Serve our Customers

    I am planning on presenting the several flavors of Docker we are using at NFM including: 1. Developers running Docker for Windows on VMware virtual machines running Windows Server 2016 highlighting how we use Docker Compose to support local instances of our Microservices during development. 2. Utilizing Docker running on Ubuntu and Centos Linux virtual machine in our CI/CD pipeline to support our integration testing and how this solution is integrated with Microsoft Team Foundation Server 3. Running a private Docker Registry to manage our build Artifacts in or CI/CD pipeline and getting the Registry tied into Microsoft Team Foundation Server Managing our docker containers within our DC/OS clusters which is our chosen  Orchestration solution for our environments I am planning on hitting on some of the technical hurdles we had to overcome to get Docker up and running in each of these scenarios. There were different issues and expertise we had to gain in order to implement each different flavor of Docker. My hope is that by sharing some of the successes and failures we had along the way, others will be able to streamline their efforts of utilizing Docker. If there are are additonal topics of intertest to you, please let me know and I may be able to incorporate them into my presentation

    10:30 AM - 11:45 AM : Room 114 : Docker is Helping NFM Better Serve our Customers (Level: 200)
    Speaker: Michael Nichols

  • Fast UX and Usability Testing for Agile Teams

    One of the benefits of agile development practices is responding quickly to feedback. We tend to focus on how to develop software in a way that gives us those capabilities, but it's time to start talking about how to actually get a useful feedback loop tied into the process. This will be a highly pragmatic discussion with real examples and demonstrations of how to create scripts, find participants, conduct measurable research and present findings.

    3:45 PM - 5:00 PM : Room 107 (QCI) : Fast UX and Usability Testing for Agile Teams (Level: 200)
    Speaker: Matthew Nuzum
    Session Materials: Slides

  • Form Inputs: The UX Issue You Didn't Know You Had

    The lowly form input: it's been a part of HTML for as long as HTML has had a formal specification, but before HTML5, developers were hamstrung by its limited types and attributes. As the use of smartphones and their onscreen keyboards has flourished, however, inputs have taken on a new and incredibly important role - but they're also riddled with browser and device inconsistencies. Learn how input types and patterns can give your users a better onscreen keyboard experience, and how to abuse these features to meet the needs of today (if you must).

    2:15 PM - 3:30 PM : Room 113 : Form Inputs: The UX Issue You Didn't Know You Had (Level: 100)
    Speaker: Aaron Ladage

  • High Performance Websites Revisited

    10 Years ago Steve Souders of Yahoo published the book High Performance Websites that described in depth how browser engines request assets and render html, and how to tune your pages for speed. Around the time the book was released, Yahoo also released YSlow, a tool which leveraged the highlights from the book to give a web page a grade for rendering speed and to help with tuning. Do the principles from 2007 still apply today? For this session a younger, hipper colleague of mine (Ben Kallaus, another developer at Telligen) will debate me as we cover the tuning recommendations made by the book and discuss whether they are still relevant. We will also spend part of this session reviewing developer tools built into Chrome and will describe how we use them as part of everyday development.

    3:45 PM - 5:00 PM : Room 115 : High Performance Websites Revisited (Level: 100)
    Speaker: Daniel Juliano

  • Introduction to AWS Step Functions

    Learn how powerful AWS Step Functions can be to influence your next project. Leveraging several internal tools at Amazon, Steps provides a simple interface for creating very complex state machines, letting you focus on the code and less on its supporting infrastructure.

    3:45 PM - 5:00 PM : Room 106 (Robert Half) : Introduction to AWS Step Functions (Level: 100)
    Speaker: Eric Larssen

  • Introduction to Blockchain

    If you want to know what Blockchain is, how it relates to crypto-currencies like Bitcoin and why people compare it to early days of the Internet then this session is for you. I will give an overview and practical ways to get started based on my own experience and share other resources if you want to dive deeper.

    2:15 PM - 3:30 PM : Room 114 : Introduction to Blockchain (Level: 100)
    Speaker: Eugen Burianov

  • Introduction to the R Language and Ecosystem

    This session will introduce you to R, a popular language and software environment for data analysis and visualization. We will cover some of the basics of the R language, but we will focus on examples of the kinds of things that R excels at, like data manipulation, statistical computing, and data visualization. We'll also introduce the R ecosystem, including R packages and RStudio. We'll see examples of how you can easily create documents containing code and graphics using tools like R Markdown, or create and publish interactive data-driven web applications using Shiny. No prior knowledge of R is required. The emphasis will be on breadth rather than depth. You'll come away with a basic understanding of what R is all about and suggestions for how to learn more.

    12:45 PM - 2:00 PM : Room 107 (QCI) : Introduction to the R Language and Ecosystem (Level: 100)
    Speaker: David W. Body

  • Kotlin: The New Standard for Android

    Earlier this year, Google announced that Jetbrain's Kotlin ( programming language was becoming a first class citizen for Android development. Being a much more modern programming language, Kotlin support marks a turning point for Android development, similar to the introduction of Swift for iOS development. This talk will cover the basics of the language and what makes it unique from Java, then I will get into setting up and using Kotlin in your Android projects as well as converting existing code to the new language. This is an introductory talk on both the basics of Kotlin, as well as Android development and setting up an app.

    2:15 PM - 3:30 PM : Room 106 (Robert Half) : Kotlin: The New Standard for Android (Level: 100)
    Speaker: Luke Klinker

  • Learn React in Isolation

    The React ecosystem can be overwhelming to learn all at once, but React by itself can be much more manageable. In this talk, we will explore ways to learn React and JSX in an isolated way so that learning is not distracted by other tools like Babel, Webpack, Redux, or even how to load data from the back-end.

    12:45 PM - 2:00 PM : Room 113 : Learn React in Isolation (Level: 100)
    Speaker: Matt Travi

  • Lightening Talks

    5-10 minute talks supplied by you! Come prepared or be spontaneous!

    10:30 AM - 11:45 AM : Room 115 : Lightening Talks (Level: 100)
    Speaker: Iowa Code Camp

  • Logging is not for Humans

    Stop logging for the humans, log for computers. When debugging issues or looking for anomalies, finding context and metadata in human readable logs is never easy. In this talk, I will show how logging for computers from your applications and servers will make your life easier and get you quicker to finding the things you are looking for.

    10:30 AM - 11:45 AM : Room 107 (QCI) : Logging is not for Humans (Level: 100)
    Speaker: Spencer Herzberg

  • Lunch


    11:45 AM - 12:45 PM : Atrium : Lunch (Level: 100)
    Speaker: Iowa Code Camp

  • Making the most of MOOCs (Massive Open Online Courses)

    Learn more about how to select and make the most of opportunities to continue your own education. The speaker will share what he has learned through his participation in courses offered by Coursera, Udacity, Duolingo, and other vendors. The presentation will include tips for effective study and a review of the tremendous increase in the quality and quantity of online courses during the last five years.

    2:15 PM - 3:30 PM : Room 107 (QCI) : Making the most of MOOCs (Massive Open Online Courses) (Level: 100)
    Speaker: Leon Tabak

  • Mastering Github

    GitHub is often used as a basic Git host, but its platform has so much more to offer. From simple and powerful issues and pull requests, to advanced features for power users and integrators, it’s a tool worth knowing well in its own right. This session will review everything you need to know to master collaboration with GitHub, from best practices for GitHub Issues and how it represents basic Git concepts, to hidden features and the tools enabling its developer ecosystem.

    9:00 AM - 10:15 AM : Room 108 (Scooter Software) : Mastering Github (Level: 200)
    Speaker: Keith Dahlby

  • Open Space Discussion

    Join us for open discussion based on topics you suggest.

    2:15 PM - 3:30 PM : Room 115 : Open Space Discussion (Level: 100)
    Speaker: Iowa Code Camp

  • Opening Session

    Welcome and announcements

    8:30 AM - 8:45 AM : Room 106 (Robert Half) : Opening Session (Level: 100)
    Speaker: Iowa Code Camp

  • Reinforcement Learning: Welcome to the party!

    In this session I will talk through reinforcement learning. I will start with a solution to an OpenAI gym by using DQN (Deep Q Network) with Keras and Tensorflow.

    10:30 AM - 11:45 AM : Room 108 (Scooter Software) : Reinforcement Learning: Welcome to the party! (Level: 300)
    Speaker: Evan Hennis

  • So you want (someone else) to learn to code

    My first programming classes in college were so bad that I withdrew from school and worked for a couple of years before regaining a love for programming. Since then I've had a number of opportunities to mentor youth wanting to learn programming, teach a class for homeschoolers, give presentations at high schools, and mentor new hires fairly fresh to professional programming. Two years ago I made a radical shift in my professional career and once again had the opportunity to be reminded of what is is like to go back to the beginning and learn afresh. Discussion items: - Inspiring love of programming - Experiences of what has worked and not - Tools, learning materials, teaching - Mentoring others

    9:00 AM - 10:15 AM : Room 109 : So you want (someone else) to learn to code (Level: 100)
    Speaker: Caleb Salt

  • Sponsor Area

    Visit with our sponsors to learn about their services and opportunities.

    8:00 AM - 5:30 PM : Atrium : Sponsor Area (Level: 100)
    Speaker: Iowa Code Camp

  • Successful remote working

    Working remotely can sound great. You have to create the right environment and work effectively with your teammates. Don't think it is just working in your PJs every day. We will discuss how to work remotely and create best practices to ensure things work out for you and your teammates.

    9:00 AM - 10:15 AM : Room 115 : Successful remote working (Level: 100)
    Speaker: Tom Henricksen

  • Tech Survival 101

    Surviving and thriving in a technology career can be quite difficult. First you need to focus on your technical chops. Then you have to figure out how to work with your team members and manage your boss. We will cover the steps it takes to make a tech career successful.

    12:45 PM - 2:00 PM : Room 109 : Tech Survival 101 (Level: 100)
    Speaker: Tom Henricksen & Greg Jensen

  • The Signposts on Your Agile Journey

    When I first saw the infamous Deloitte Agile Landscape diagram, I wondered how did agile get so complicated. The second thought was a question: 'how can I inspect those techniques and practices and choose the right ones for my team?'. In this session, I’ll talk about how empirical data (which I’m calling agile numbers) can serve as signposts on our journey to reach the goal of delivering customer value faster with maximum reliability and minimum issues. I’ll show how agile numbers can help us determine if a practice is worth the investment and whether it will improve our team’s performance. I will also share examples of agile numbers that can assist you in your agile journey. Those numbers are pulled from different sources like scientific studies, research from Google, and the 2017 State of DevOps Report.

    10:30 AM - 11:45 AM : Room 112 : The Signposts on Your Agile Journey (Level: 200)
    Speaker: Akrem Saed

  • The Trials And Tribulations Of Being A Fully Remote Developer

    Imagine working from home full-time. Your job choices are not limited geographically. You have a nice quiet workspace in your comfortable home with limited distractions. Lunch break in your easy chair. What's a dress code? You don't have to go outside in the morning during a frigid Iowa winter. Sounds perfect. Now imagine this actually happening to you and nothing goes to plan. How do you stay motivated? How do you deal with communication breakdowns? The feelings of isolation? Of feeling like a second rate employee of the company? In this presentation, Mike will review the tips and techniques he has learned over the past several years while being a full-time remote developer. This session is geared both towards developers and managers of remote development teams.

    9:00 AM - 10:15 AM : Room 106 (Robert Half) : The Trials And Tribulations Of Being A Fully Remote Developer (Level: 100)
    Speaker: Mike Cole

  • When is the feature done done?

    How does a development team ensure that the feature they are working is done? Development teams throughout time have tackled this task. Organizational dynamics makes this task different per team. Some common techniques emerge though to ensure that a feature gets done as quickly and accurately as possible. I will be facilitating an open discussion on how the above question is answered while also giving insights from my time on development teams. Topics discussed will include Git, CICD, Client Interaction, etc... Be prepared to participate.

    12:45 PM - 2:00 PM : Room 112 : When is the feature done done? (Level: 100)
    Speaker: Matt Winger

  • Why do they not understand and what to do about it

    Discuss what it means to be an Architect and how to work through technical decisions in the context of building out Workiva's microservice architecture. I hope to share my personal experience and have a candid conversation about the challenges of working in technical management and share techniques for helping groups work through conflict to the point it is resolved.

    9:00 AM - 10:15 AM : Room 112 : Why do they not understand and what to do about it (Level: 100)
    Speaker: Ross Hendrickson

  • WPF (and WinForms) isn't dead (Workshop)

    Let's look at two workplace scenarios. You have created amazing business applications (or) you start a new line of business application by creating a new project in Visual Studio. 90% of the time, it will default to WinForms or WPF. Why move your line of business apps and re-write them as universal apps? This is not necessary. We will show you how to bring your app to Windows App Store and add all the new bells and whistles. We will teach your app new tricks. Your app is not dead. You do not need to move over from your old code. Bring your existing apps that you want to see in the App Store and we will roll up our sleeves and have your app shine as new Universal Apps by using the Desktop Bridge. Takeaways: 1. Ability to add UWP features to existing WPF or WinForms applications 2. Understanding Windows Store Deployment process 3. Window Store Listing

    3:45 PM - 5:00 PM : Room 109 : WPF (and WinForms) isn't dead (Workshop) (Level: 100)
    Speaker: Min Maung & Lwin Maung

  • Your brain is broken and you suck at making decisions

    The human brain is really good at lots of things, but living and making decisions in our modern world typically isn't one of them. Learn about some of the ways our brain works less than optimally in decision making scenarios and how to stack the deck in favor of not totally messing things up. After exploring some of these concepts (they're features, not bugs, am I right?) we'll talk about why thinking in increments and iterations, and using empirical decision making can help us be more awesome.

    3:45 PM - 5:00 PM : Room 112 : Your brain is broken and you suck at making decisions (Level: 100)
    Speaker: Nate Adams

Session Levels


Level 100 Description:
Introductory and overview material. Assumes little or no expertise with topic and covers topic concepts, functions, features, and benefits.

Level 200 Description:
Intermediate material. Assumes 100-level knowledge and provides specific details about the topic.

Level 300 Description:
Advanced material. Assumes 200-level knowledge, in-depth understanding of features in a real-world environment, and strong coding skills. Provides a detailed technical overview of a subset of product/technology features, covering architecture, performance, migration, deployment, and development.

Level 400 Description:
Expert material. Assumes a deep level of technical knowledge and experience and a detailed, thorough understanding of topic. Provides expert-to-expert interaction and coverage of specialized topics.