“What did you learn at the conference?”

This past weekend, I spoke at St. Louis Days of .NET. It was my second time attending and also my second time speaking there. It’s a great conference. I enjoy the location and the people.  The drive isn’t always fun, but this year my wife & kids came along, so that was nice.

As we were leaving the conference and heading home yesterday, my wife & I started talking about how I hate when people ask me what I learned at a conference. I dislike it because it’s rarely something I learned in a particular session. For example, I watched a session on Ember. It was good, the presenter was engaging & energetic. He knew is information, but by-and-large, I didn’t really learn anything I didn’t already know about EmberJS. And that’s ok.

did learn about the audit tab in Chrome dev tools. I also learned how Hadoop got it’s name.  I learned a couple other bits of trivia, we’ll say, at the conference. But to me, it’s not about the sessions necessarily.

I spent 2 days with people that love technology. I hung out with people that are passionate, not only about coding, but about helping other people get better at coding. I was able to “network” with a lot of people. And that was great. I now have connections to more people which lets me see more of what is going on in the industry.

The best part about the networking is that you don’t have to be a speaker to do it. I spent about 30 minutes in the speaker room this time. During that time, I was IMing my team back home asking them how their PRs were going and looking at some things in code.  Once that was done, I left (and that was in part due to the political discussion going on in the speakers room.)  The night before, when I hung out with the speakers at the speaker party, I stayed pretty much with people I already knew.

My point is, speakers are just like everyone else. Even the guys that have a full room or standing room only are more than eager to talk to you. It’s why we do this, we love talking about technology.

So what did I learn? I don’t quite know yet, ask me again in 8-10 months once I get a better feel for how my network grew & changed this weekend.

Why am I not using Yeoman or another generator?

I’ve got a little side project that I’m working on. I have an app at track.couchjitsu.com. It tracks how much time I spend training Brazilian Jiu Jitsu. It tracks when I go to conditioning, technique, sparring or judo. It actually will track anything. I wrote it about a year ago. It’s fairly simple in its current form. It’s a .Net backend with one Angular page, and then a couple Razor pages. It was an app I wanted, and also a reason to use Angular.

I’m currently rewriting it using a MEAN stack (Mongo, ExpressJS, NodeJS, Angular.) I’m planning on adding some features to it, and also making it a true SPA.

There are quite a few generators out there. I can use Yeoman and have a template up and running by typing yo angular  in my terminal. I could also use something like mean.js or mean.io. Both of those are really great. You can have a MEAN app up and running in a matter of minutes (seconds?) They have a nice project structure set up, hooks in place for Passport, a social-sign-on library.

I’ve created sample projects with all 3 methods. Sure enough from installing to having a decent looking UI on my screen was only a minute or two. They have some really nice architecture as well. Patterns I probably wouldn’t have thought of myself. So why am I not using any of these on my side project?

The short answer is “I want to know what I’m doing.” There are a lot of things that I didn’t have to do with those projects, they just magically worked. It made me realize that I wasn’t really developing with node an angular, I was filling out a template. I wasn’t being forced to make decisions for myself, so I didn’t necessarily know what was a good decision or a bad one.

I don’t anticipate doing this every time. For me, it’s more of a one-time-only kind of event. Understand how to set up cookies, or how to handle basic routing, etc. Once that’s established, then I can go back to one of those templates, find the one that fits best with  me and focus on writing the application.  But this time, I need to focus on the mechanics of node and Angular.

Let’s Iterate Fast

We’re 3 weeks in to a new project at work, or in sprint time, we’re half-way through our second sprint. We’ve had a rough go, to get started. Probably not anything worse than most projects. But since this is the first time on a project in this role, I really wanted to get out of the gate strong and impress our clients (and our boss.)  Even though I knew there would be some initial churn as we get servers set up, and the project established, I still didn’t want to deal with it.

It’s been a learning experience, to be sure. One thing I’ve already noticed in the 3 weeks on the project, is that I’m saying a couple phrases a lot. The first one is “Done is better than perfect.” And the corollary to that is “Let’s iterate fast.”  What I don’t mean by the second one is “Hurry up! Just push it out there.” Instead, what I mean is “We know we’re going to iterate on this. That’s ok. We know we’re not going to nail the design the first time. That’s ok as well. We know there are going to be parts of our code we don’t like. That’s ok. Let’s just plan on that, get our code in and when we realize our mistakes, iterate on it.”

Too many times in my career, I’ve tried to get the perfect design, or really, just the right design. I’m too much of a realist to know that we’ll never have a perfect design. What happens, though, is that I spend a lot of time trying to nail down a design that I like, and by the time the project is over, I realize that it’s not very good, or at least I know the pitfalls of that design.

I don’t want to do that anymore. One way we’re trying to help us iterate fast is small stories. So, for example, we had a story that there roles should exist in the API. That’s it, they don’t have to do anything, just exist. Then we had another role that said we should be able to assign features to those roles. Again, assigning features doesn’t have to do anything other than say “Role Admin has the ability to create users.” We don’t need to wire up the ability to create it, just know that it has that ability. We don’t have to know all the roles, or even any of the roles, up front, we just have to know that there are roles and there are features and they need to be assigned to each other.

Another way that we’re trying to iterate fast is by having tests. I have found over and over again, if I have tests covering my code to the point I’m comfortable know that if I make a breaking change they’ll tell me, then I won’t be afraid to refactor.  How does this help? Imagine we have one big data context, it knows about every table in the database. As the project grows, we realize this is too cumbersome. If we don’t have tests we’ll likely say “What are you going to do about it?” But if we have tests, we can start refactoring and breaking out smaller contexts, re-run the tests and make sure everything passes.

But how does that help us iterate faster? It helps because I no longer have to worry that some day we’ll figure out a better way to do this. In fact, I’m almost positive we will find a better way. So rather than worrying about doing things the absolutely best way right now for all eternity, I just have to worry about doing things the best way for the problem at hand. As soon as I realize the data context is too big, it’s time to refactor.

I believe the ability to iterate fast is what’s going to help us not wind up in the “that code is horrible” trap.

Pluralsight Results

Yesterday I was sitting in a meeting. I pulled my phone out to see what time it was, and I saw I had an email. As I pulled down the notification drawer, I noticed it was from Spencer, my contact at Pluralsight. As I opened the email, I wasn’t nervous. I knew I had done my best. I had put close to 30 hours into my first submission, and easily another 10-20 on my second submission. All told, I spent around 40 hours to make 20 minutes of video. I didn’t just slap together a video. When my first video received the review of “We’d like to see another video,” I tried my best to take their criticism and apply it.

So as the email open, and the first word I saw was “Congratulations” I was pretty excited.

I have been accepted to be a Pluralsight Author. It’s something that even 6 months ago, I never imagined was a possibility. But thanks to some very kind conference attendees, other speakers, and friends, I’m there now. It all started when a man named Darin emailed me after my last time talking (KCDC14) and suggested I try to become one. Cory House, who I’ve met and talked to at a couple conferences, is a Pluralsight author and he was more than helpful in reviewing my videos and providing good feedback. Coworkers and friends also watched my videos. They provided actual feedback and didn’t just say “Looks good to me!”

So tonight, I electronically signed my agreements with Pluralsight. I’ve also submitted 3 possible class topics. I know there is some review/vetting process for the courses, so I don’t know if they’ll select any of these 3, or which one. I also don’t know exactly how long this part of the process will take. But hopefully in a few months I’ll be able to write a blog post telling you to go watch my Pluralsight course.

Is the software industry a shaky building?

I was reading a biography written by a former professor about one of my favorite Baptist preachers, Charles Spurgeon.  In this biography is a quote from Spurgeon talking about preaching and a conversation he had with a fellow preacher. In this conversation, the other preacher said

That is not my case, I revise my creed from week to week. It is with me constant change and progress

Spurgeon says he did not respond, but rather thought, and realized “If the foundation is constantly being altered, the building will be rather shaky.”

Now, to be fair, the context here is preaching and sermons and doctrine and theology. But as I read it, I thought about programming. I thought about there is so much constant change in the programming field. Before nodejs has really taken off, it’s already lost a big contributor.

A few years ago, all the “cool kids” were ditching traditional RDBMS systems for NoSQL, specifically MongoDB. Then, it wasn’t long before Hacker News was starting to fill up with “Why I’ll never use Mongo Again!” posts.

There are changes happening all the time, from server rendered HTML pages (e.g. RazorViews in ASP.NET MVC land) to client side templates (e.g. Handlebars) and client side frameworks (Backbone/Marionette, Ember, Angular.)

The point is, software development is constantly changing. What is trendy and cool today, is not what will be trendy and cool next year. There’s a lot of focus on SIngle Page Apps, which is really not much more than reimagining the traditional client-server approach to software.

All of this made me think. Is software as an industry falling prey to what Spurgeon referred to as a rather shaky building? I think the answer, as it often is, is both yes and no.

For some people, maybe even a majority of developers, it is hard to shift focus and approach problems in new ways. How many times have you seen JavaScript written as if it was C# or Java? In fact, how many times have you seen a C# or Java developer switch to the other platform and write code the same way? Sure, they’re similar, but not identical. And writing C# with Java syntax is ineffective at best, and buggy at worst.

Or have you ever talked to do a developer who has made the switch from one language to another and is now thoroughly convinced that the old language is horrible and the new language is the only way to go. In fact, in some cases, they often wonder how they were ever able to write code in the original language with all its short-comings.

I would say people that fall into this category have a shaky building. They are rooted in nothing else than what the most recent language is, what’s the newest approach, or how some big named company (e.g. Facebook) does things.

However, I think there is also a group in software, and this might be a minority, that aren’t that way. They don’t have a shaky building. Instead of changing their creed week after week as the man in Spurgeon’s dialogue did, they have a set of principles they follow.

This doesn’t mean they don’t try new things. In fact, they might have even been on the forefront of the NoSQL database movement. They can often be early adopters. They have probably used several languages in their career. But they recognize that different languages have different strengths. Their foundation is not the .NET framework, nor is it Ruby on Rails. Instead, the focus on things like writing clean code, testing their code, separating concerns, modularity etc.

They recognize that the language they use is nothing more than a tool. To those people, their buildings are not shaky but strong and secure.

We need to strive to be the type of developers that have secure buildings. Develop a set of foundational principles that you can apply whether you’re writing SQL, Ruby or JavaScript. It’s actually a lot easier than it sounds.

Weighty Responsibility

Tomorrow morning we’re kicking off the first real sprint on a new project. I’ve been working on this project full time for about 3 weeks now. It’s a project that, for me, started back in January with an RFP. Another coworker and I spent 2 weeks combing through the RFP and coming up with an estimate. We handed that over to the more business minded people of the company and they wrote a really good proposal. Good enough that we finally got the contract. It was a long process. In reality, it was probably a normal amount of time for a project this scope, but for me, I was anxious to hear back. Did the work that we did on the proposal land us the job. Did we succeed?

Anyway, tomorrow as we kick off, I’ll be the team lead on the project. It will not be the first time I’ve been called a lead. It will however, be the first time that I’m actually officially leading something. The previous time, when my title was changed to Lead Developer, it was more of an effort to get me to stay with the company (it didn’t work.) Not much really changed as we didn’t need more people leading that project.

But over the past few months I’ve gotten to pick the team to work on this project. I have personally interviewed every person that will be a regular on this project. That’s new to me. In the past, I’ve only worked with existing teams.  That has already made me feel the weight of my responsibility. If the project struggles because of personel issues, I can’t say “Well, I didn’t have anything to do with it.”

As I’ve thought about this over the past few weeks, I’ve feel a lot of weight coming from my new responsibilities.  Some of them are things like I just mentioned. But I realized another one recently. When I’ve been on teams in the past, I’ve been a little more light hearted, possibly crass or sarcastic. I have strong opinions about code, but at the same time, the last few pull requests I reviewed included large amounts of animated gifs just to liven them up.  Because that made work a little more fun for me.  At one previous employer, I was the guy that stole the wheels off his boss’ chair and hid them throughout the building. Then created an API for him to use to find them.

Some of that is part of who I am. It takes all kinds of people to be software developers. And I find I work best when I’m a bit more relaxed and laid back. I don’t plan on changing that aspect. But one thing dawned on me. I need to be a bit more careful about what I say. If people are looking to me to run a project and I make a sarcastic comment, it can carry a little more weight than just some coworker making the same comment.

I guess what I’m trying to say is that I always pictured running a project having more responsibility, but I was always focused on the fact of talking to customers, staying on top of the schedule etc. It never dawned on me that the people that run projects have a big responsibility to the people who are on the project as well.  That’s something I want to make sure I do right. I want the people I’m working with to enjoy the project, both from a technical challenge stand point and also from a work-culture standpoint.

I can already tell that choosing technology will not be the biggest decision I make.

Pluralsight Followup

I heard back from Pluralsight this week. I wasn’t immediately accepted, they want to see a second video from me. I was told there were 3 possible outcomes when auditioning:

  1. Immediate acceptance
  2. Second video
  3. Immediate rejection

Obviously,  I was hoping for the first one. Who doesn’t want immediate acceptance?  But I am glad that it wasn’t an immediate rejection.  The nice part about asking for a second video was they provided very specific feedback. Some of it was things I did good (knowledgable, lots of energy.) Some things were items I needed to work on. For example, a couple portions of the video were unclear. Both from an explanation standpoint, and from a “Your slide looks blurry” standpoint.

It seemed like a lot of the feedback revolved around the quality of my video, and provided specific ways to make it better. For example, they suggest using a larger font when recording, rather than zooming in on the video after the fact.

For my second video, I had two choices. Either take their comments and re-cut my video addressing those issues, or create a brand new video. I chose the latter. My main reason was, I felt like a couple areas they pointed out as being unclear would be hard to clean up and still keep it to 10 minutes. That is, I thought perhaps my first topic was just a bit too large. It’s probably a 15 minute talk instead of a 10 minute talk.

So I’m working on my second video. It’s related to the first, in that it deals with TDD & JavaScript, but it doesn’t try to cover as much.  I’ve already learned some lessons from the first go round. For example, so far, all I’ve done is record video. I didn’t even turn the mic on when recording. I still talked through it as I went, to get a rough approximation of how long I would spend on that slide.

I’ve watched the video a couple times to make sure I had all the video I need before recording audio. What I learned last time was recording audio multiple times is obvious on the output. You have to play games to make it sound similar. So this time, I’m recording my video, making it have everything I want, and THEN recording the audio.

Also, this time, I’ll use Audacity to record the audio because it seems to have better normalization filters and noise canceling filters than Camtasia.

Once I hear back on my second video, I’ll let you guys know.

Applying to Pluralsight

May 22, 2014

Last week I spoke at KCDC and had a pretty good time. I really enjoy speaking at conferences. It’s weird for developers and technical people to enjoy it, but it has been something I’ve enjoyed doing ever since I found out that conference speakers are just “regular folks.” For a long time I assumed the people speaking at conferences were Microsoft employees, or people that had written frameworks and cool libraries. Truth is, while there are a lot of those groups, there are also a lot of people who are just “desk jockeys” who want to talk.  That discovery came to me in 2011 when I talked to a coworker who was speaking at local conference.  Since then I’ve spoken at three or four different conferences around the mid-west.

After talking at KCDC I had an email exchange with someone who came to one of my talks. I’m not joking when I say that email exchange was probably the highlight of my conference speaking career. It wasn’t from anyone famous, and I can guarantee almost none of you would know who it was. So it wasn’t a celebrity status type of thing. Instead, it was someone that my talk affected. My talks might have impacted other people in the past, but nobody has really reached out to me to start a conversation. It was quite special, and something I am humbled by.

During the course of that conversation, my pen-pal asked if I had ever thought about doing Pluralsight. He had watched a lot of videos and felt that I could fit in there. Again, very humbling. We exchanged some emails back and forth on that topic. He mentioned Cory House who is a Pluralsight author, and who I’ve had a few conversations with at various conferences. So I reached out to Cory to ask him what all it took to be an author and ask if he had any tips etc. Cory gave me some feedback and offered to introduce me to someone there if I was interested.  I thought about it for a day or two and talked it over with my wife. She made the very good point that I’d be stupid to not even try (she can be very blunt at times :) )

I followed back up with Cory, and true to his word he introduced me to a contact he had there. Long story somewhat shorter, I’m going to work on an application video for Pluralsight. I don’t know how it will play out, I believe they’re pretty selective in who they approve, so it’s anything but a done deal.  But from speaking at a conference 6 days ago, to having a quick phone call with people at Pluralsight was pretty quick, and pretty cool.

I’m typing this up before I’ve even started on the video & presentation, and I’ll probably keep it private at least until I’ve submitted the video. So, if you’re reading this, it means I’ve submitted the video and I’ll let you know how it goes from there.

As of right now, I’m thinking of doing an introduction to graph databases, and showing how the way they structure data can simplify data models.

May 24-25, 2014

I spent about 6 hours over these past two days working on the presentation. I’ve already made a change. Instead of talking about graph databases, I decided to go with testing a Backbone view with TDD. The reason being, I only have 10 minutes and I’m really familiar with TDD, so it should be easier for me to do a concentrated 10 minutes on it. As opposed to graph databases where I might be too vague and broad.

I ended up writing quite a few slides and then trying to trim down what I didn’t want. I wound up with about 5 slides and code. I also wrote a lot of code. I wanted to make sure I was ready to do my demo, so I went way farther than I thought I’d get with it. I then printed out my resulting view and my tests. That way I had them to look at in case I forgot where I was going.

When I finished this step, I felt ready to record.

May 26, 2014

I spent around 2.5 hours today recording and editing my 10 minute video. I think I restarted 4 times because I couldn’t even introduce myself without stumbling over my words. It was weird, limit the time to 10 minutes and start recording and I sound like I don’t even know how to speak. I’ve never had a hard time getting through my first slide while at a conference, but here was a different story.

After I got that slide out of the way, I did the rest of the presentation in one take.  But it wasn’t one clean take. There were a few “ummms” or pauses. More than once I restarted the audio by counting down “3…2…1.”

So it took me about 20 minutes to record 15 minutes of video that in the end had to be cut down to 10 minutes or less. That part took about 2 hours. It was funny, actually. I would find a block of the presentation that clearly needed editing. After I fixed that block, other blocks would “appear.” Obviously they were there all along, but as I slowly started improving the quality, the little things became bigger deals.

I wrapped it up about 10pm and emailed it to a friend, Cory House, to have him review it. I was surprised at about 7:30 the next morning when he wrote back with a detailed critique of some areas.  I’ll fix those issues and send him a second copy.

May 29, 2014

I had another set of eyes review all of my changes. He had some really good feedback. I exchanged a couple more emails with Cory and he had some good ideas on recording audio.  Instead of recording me typing and talking at the same time, I decided to just record the screen once the text was there. So I went through and recorded all of my screens.

Then I sat down and noted the bullet points I wanted to say and I recorded the audio all in one steady stream. I did this to keep the volume levels similar. I still flubbed up, but when I did, I would just pause, count “3…2…1″ and pause again and then start talking. It was very obvious just looking at the wave forms where I counted down.

I then stretched out my video to match the length on the audio. This didn’t have display issues because I was largely recording static screens.

I got all of that done and organized and decided my Powerpoint slides weren’t really what I needed. So I re-did all of the except the title. I also re-recorded the audio for them, to make it more concise.

If you’re keeping track at home, that means I have 1 slide, my title slide, that has not changed since I started this process. All other imagery and audio has changed.

I went back through and blurred out sections of the screen when showing code to try and help the user focus on the new parts more. I also made sure I zoomed in some to make it easier to read.

I published it once more and sent it off to two people to review again.

Each time I’ve done this I’ve hoped it would be the last, and it clearly hasn’t. But at the same time, this is my one shot. I wish I would have tracked how much time I put into it. Rough estimate is that I’m probably at about 15 hours right now, for a 10 minute video. But I want to make sure I can do no better before I send it off to get reviewed.

May 31, 2014

It’s amusing to me how much of the work on this is regarding taste. For example, at different times, I’ve had 3 different people review it for me. Two of the three liked seeing me actually typing, and one liked to just see the completed code and explain it. Also, one guy really liked me blurring out/hiding the code that wasn’t the focus, whereas another guy absolutely hated it. He preferred to see all the code, but then highlight specific portions.

Additionally, it’s not exactly easy to go to a Pluralsight video and see how they do things, because they’re all individual classes, and are up to the personality of author. On the one hand, that’s really cool, because then each class has its own personality instead of trying to take that out. On the other hand, when I’m trying to make a perfect audition video, it’s hard to take lessons from them.

That said, I’m pretty pleased with where my video is at now. It’s a far cry from where it was even a week ago.  I’ve sent it out one more time to be reviewed, and if there is nothing major there, I will (hopefully) be submitting it to Pluralsight shortly.

All of that said, I need to devote a little bit of this blog post to Cory House. I met him a couple years ago at HDC when he talked about Clean Code. Since then, we’ve presented at a couple conferences together, and I think when it comes to code, he’s a kindred spirit. One of the best things I’ve gotten out of speaking at conferences was meeting other developers. Cory has been more than helpful introducing me to people at Pluralsight and taking time out of his busy schedule to help review my submission. Regardless how it goes, it was a great help to have a published Pluralsight author give me feedback.

Update 1

I just sent my video to Pluralsight at 7:45pm on Saturday, just over a week after I started creating a presentation. It was a long week, and regardless of the outcome, it was worth it. I learned a lot this week.

The only thing I can do now is wait.  If and when I hear back, I’ll let you guys know.

The 1st time should be like the 100th time and vice versa

This past week I spoke at KCDC which is a wonderful conference in Kansas City, MO. Yes, there are actually developers in the midwest doing amazing things. Last year was the first year I was there, and it added between 300 and 400 people from last year to this year.

I had the joy of doing 2 brand new presentations. The first was on professionalism, called “Can Professionals Wear Shorts?” The second was more on focusing on your career growth called “How to land your next job: you don’t want to be the COBOL guy in the corner do you?” I really enjoyed doing both of them, they’re both on subjects that near and dear to my heart.

In between talks I hung out some in the speakers room. Sometimes this is the best part of a conference, as you get to meet other speakers talk about what they’re passionate about etc. It’s the ultimate “hallway conversation.” At these conferences there are quite a few people who have the job of traveling to conferences and speaking. They might give the same talk on “How to do TDD” or “What is MongoDB?” 20 times in a single year. If pressed, they could probably give you their talk in their sleep.  Then there are folks who are giving their first talk ever, not the first time they’ve given THIS talk, the first time they’ve given ANY talk. There’s also everything in between these two extremes.

As I attended a few sessions a thought struck me. I was super excited about my talks. I was eager to talk about my subjects. I wanted to make sure I did a good job as well. I didn’t want anyone to think “I bet this is the first time he’s ever given this talk.” I wanted to be a seasoned vet in this subject.  For the most part, I don’t worry too much about speaking in general. After years of debate and preaching, talking at a conference is no big deal.

But then the thought hit me, what about the other extreme? What if I had given this talk 50 or 100 other times? Obviously it would be polished. I would know the content forward and backwards, I would probably know most of the questions and comments people would make. But would it be boring to my audience? While it might be the 100th time I’ve given a talk, it’s most likely the 1st time these people are seeing it (unless you have some weird groupies that follow you around and listen to the same talk over and over.)

Speakers owe it to their listeners to make sure the first time they give a talk is as polished as the 100th time, and the 100th time they give a talk is as entertaining and exciting as the 1st time.

When all you know are objects…

A few years ago, I read a blog from Uncle Bob that advocated delaying the decision of your database as long as possible. The main motivation is that the database should not be the central hub of your application. Instead, your application should do things. That logic should be the focus of your application and the database should exist to support that. It is something that has resonated with me, but that I’ve never implemented. Whether using SQL Server or MongoDB, the decision always seems to come up early.

This past week I attended a talk at KCDC on graph databases. I had looked (very briefly) at graph databases in the past but didn’t give them much thought. On the drive home today, I realized that an app I had worked on in the past would have benefited from a graph database.

Without going into too many details (for the sake of brevity, not because I’m afraid you’ll steal my idea) the application was going to have horses that were being fostered & adopted, and people who would be rescuing, fostering, and adopting the horses. The horses would have lots of states (like different vet visits, shots, etc) as well as their current status (rescued, fostered, in training, adopted, deceased etc.)

At one point, I tried doing it in SQL with tables that mapped one person to multiple horses. One horse to multiple vaccination records etc.  That seemed to get messy really quick.  Then I tried MongoDB and had a single Horse document with all of its relevant information and a separate Person document with all their relevant information, including an array of horses that they owned.

Looking at it from a purely data standpoint, it seems like graph databases might fit the niche here. A horse (vertex) is owned (edge) by a person (vertex).  Vertex and edge are central aspects of graph databases.

So today I created a real simple OrientDB database and threw a couple records in there and played around. It was actually fairly simple and seemed to confirm my initial feelings that maybe this would be a good match.

As I thought about this more and more I realized something. My mind tends to think primarily in an RDBMS way. What I mean by that is, I think “This entity connects to this entity” and I almost visually picture a DB diagram of SQL joins etc. Even if that’s not the best model.  I think that is true of a lot of developers, certainly most developers who work with a database in a corporate environment.

I’m slowly starting to think of database records as documents, but that’s not the right answer.

Instead, I think the right answer is to look at how the data in your application interacts with other data in your system and then ask the question “What is the best way to represent this?” The danger is, a lot of times that question gets asked with the silent assumption being “What is the best relational way to represent this?”

It’s a lot more work, but what if we looked at the data and then spent a little bit of time searching to see if there was any existing technology that matched what we were trying to do.  It’s hard, because sometimes we don’t even know what question to ask. However, the more I’m exposed to different options (RDBMS, document store, graph database) the more it helps to break me out of the mindset of a database table that knows about another database table.