Book Review: So Good They Can't Ignore You

I've always known books can have a profound impact on your life. So Good They Can't Ignore You just may be one of those books for you. I believe it will be for me. Though, it's not one of those books where you gain so much after just reading it. This book gives you a bit of a guide on how you can be so good at your career, that you can make it become the dream job you often hear about people going after.

 
 

Sections of the Book

Ignore the passion

In the first section of the book, the author goes into why you should ignore your passion for your career; why just following your passion isn't good enough for the job we all dream about.

Build career capital

The second section details about being so good that they can't ignore you - or building what the author calls career capital. Career capital is rare and valuable skills within your line of work and getting good at them.

The author quotes a reader from his blog that very accurately details a key aspect of when you're building career capital:

Willing to grind out long hours with little recongition

This section heavily reminded me of the episode of The Tim Ferriss show with Derek Sivers where Derek goes into, early in your career, say "yes" to everything. But when you get "so good they can't ignore you", you're free to say "no" to whatever comes up that you think doesn't allow you to gain any more career capital or that doesn't interest you.

The best thing to gain from this section is the aspect of deliberate practice. Merely doing the practice of skills you enjoy will result in a plateau of skills. Doing practice and projects that result in being uncomfortable is a way to break away from the plateau and to continue building skills.

Gaining control

The fourth section details that having control in your job will help make it a dream job and loving the work that you do. However, there are two dangers in pursuing more control in your career.

  1. Don't have enough career capital to back up the extra control
  2. Have enough career capital, but employeers will fight back against you having more control.

Derek Sivers comes in and gives advice that the book takes about knowing which of the two dangers you fall into so you can act accordingly:

Do what people are willing to pay you for

Having a mission

Having a mission for your career helps create work that you love. To help find a mission, use the area just beyond the cutting edge of your career field, or the adjacent possible.

Once found, use small steps to get critical feedback in order to imporove quickly, or little bets.

Book Conclusion

An even more interesting part of the book is the conclusion. The conclusion details how the author used each of the sections from the book in his own life as a computer science professor. A very practical example of how these ideas can be used in your own life.


Is this book a must read? If you want to get so good they can't ignore you, then I recommend it. I personally plan on making a plan myself to build up more career capital for myself.

Getting Up and Running with FsLab for Data Science

FSAdvent time is back this year! I'm going to use this post to start a new work in progress series on using F# for Dara science. This series will mainly consist of using FsLab to manipulate and visualize data.

Setting Up Your Environment

The easiest way to get setup in the IDE of you choosing is to just download the basic template of FsLab. This just references FsLab with Paket and gives a small script example. That's perfect for all that we need to do.

We're going to go through the script that it provides (with a bit of changes) in this post. Don't worry though, we'll go through a good bit of different aspects of the script in future posts. We're just getting up and running here as sometimes that can be the biggest hurdle to get started in something new.

Generating Data

FsLab comes with the FSharp.Data package which includes a few very useful type providers which help provide a safe and easy way to get data from external sources.

World Bank Type Provider

As previously mentioned, FSharp.Data comes with a few very useful type providers. One that we'll use here to help give us some real world data is the World Bank type provider. You could spend all day looking at what data it provides. For this post, though, we'll look at the US and EU percent added to their GDP from industry.

Setting Up Script

Before we can access the World Bank type provider, though, we need to set up our script to access it. If you used the basic template it will already have FsLab setup with Paket so you would just need to run paket.exe install or build the project.

Now we can reference FsLab so first thing to do is to load the script to access everything we need from it:

#load "packages/FsLab/FsLab.fsx"

Now that we have the FsLab script loaded we can access all sorts of libraries from it by using the 'open' keyword in F#.

open Deedle
open FSharp.Data
open XPlot.GoogleCharts
open XPlot.GoogleCharts.Deedle

We have a few external libraries we're using throughout our script:

  • Using Deedle to explore our data.
  • The FSharp.Data library for our World Bank type provider.
  • GoogleCharts and GoogleCharts.Deedle to visualize our data.

Getting Our Data

Next we instantiate the World Bank type provider and from there we get a reference to the Indicators object for the US and for the EU.

let wb = WorldBankData.GetDataContext()

let us = wb.Countries.``United States``.Indicators
let eu = wb.Countries.``European Union``.Indicators

From there we get the industry percent value added to the country's GDP and create a data series.

let usSeries = series us.``Industry, value added (% of GDP)``
let euSeries = series eu.``Industry, value added (% of GDP)``

Now here is where some work on the data happens.

abs (usSeries - euSeries)
|> Series.sort
|> Series.rev
|> Series.take 5

From here we get the absolute value of the difference of the two series, sort it, get the reverse of it, then take only the first five items. Looks like a bit, but we'll go into details of certain statistics for data science in future posts.

Charting Our Data

Now that we have the data we want, let's chart it. The charting library in FsLabs will allow us to customize the chart as we see fit for visualizing. For this there is an Options type that we can create. We'll just give a title and tell the legend to appear at the bottom.

let options = Options ( title = "% of GDP value added", legend = Legend(position="bottom") )

Now we just need to tell the charting library to chart our data.

[ usSeries.[2000 .. 2010]; euSeries.[2000 .. 2010] ]
|> Chart.Line
|> Chart.WithOptions options
|> Chart.WithLabels ["US"; "EU"]

We give it our data as an F# list, tell it to create a line chart, give it our options, and then tell what our labels are for our legend.

Executing

Just run it all in F# Interactive. :)

New Wintellect Blog Posts

For this Thanksgiving, I thought sharing a lot of my recent Wintellect blog posts. If I may say, there's a lot of good stuff for you to go through while digesting a Thanksgiving meal. Hope you all enjoy!

Spectron

I've been doing a bit of Spectron lately for a client and have been posting some insights I've gained from it.

Xamarin

I've been into Xamarin for quite a while now and have quite a few links that go through different aspects of it, mainly with F#. This includes my very first screencast and using FAKE with your Xamarin projects.

Using GIFs on Bug Reports

If you've been developing software for any length of time you've fixed a bug or two that someone has reported. Whether for a customer or a user within your organization, sometime's words of how something is fixed or how to duplicate an issue may not be enough.

Using screenshots is great to show if something is working, especially if it is something easily to show like a UI element working. However, to show that a series of steps is working with the end showing that the fix is there, I believe GIFs are a great way to include in your bug reports after a fix has been implemented.

But How Do I Make A GIF?

I primarily run a Mac, so I really love how easy Screenflow is for this. Sure it's primarily for screencasting, and I use it for that, too, but it's really easy to make GIFs with this.

Of course, there are free alternatives (before Screenflow I was using Recordit with good results) and they all are good to use in their own right. One thing I really like with Screenflow is that it is really easy to edit after recording your GIF.

Why Does Editing GIFs Matter?

The primary reason why I'd want to edit a GIF is to remove unneeded parts of what I was recording. The same thing you'd do with any video, remove any dead or time consuming parts. If you're recording a GIF to show that something is working after a fix is put in, you may have times where you're waiting for a process to execute in order to show the fix is working. Editing your GIF to remove the time it takes for the process to launch and load will reduce the length of the GIF as well as to make it smaller for uploading or viewing.

Another awesome reason I like using Screenflow for GIFs is that you can use all the advanced screencasting features Screenflow provides for you inside of your GIFs. For instance, I can zoom in on places I want to show in the GIF or highlight specific areas of the screen so the viewer can know what I want them to see.

Let's take a look at an example. I did a very quick recording of some F# using VS Code and running a selection in the FSI. Here's the GIF of that using Screenflow's editing tools.

Not the best edited example, but I hope it helps illustrate some of the things Screenflow can do to make GIFs that much better to include in bug reports.

There are a couple of things of note, though.

  • Screenflow allowed me to specifiy what area I wanted to be recorded. I just adjusted the preview window right before recording to the size I needed.
  • I did a small zoom to better show the FSI output.
  • I did a callout to show to viewers the specific output in FSI of the input I gave it.

I got Screenflow to start doing some screencasting, but since they've introduced GIF support I've been using it much more for caputuring GIFs for projects at work and uploading them to whatever bug tracker we're using (Jira, Visual Studio Team Services, GitHub) and, to me, it's been quite helpful. Often I've recorded a GIF and found something else I needed to work on for that issue before it should have been sent back as fixed.

Are Daily Status Meetings Still Needed?

I'm sure you're used to this scenario in your career by now: you start a new project and the manager instantly schedules daily standup meetings for everyone on the project to give their status. However, how many times has that meeting gone longer than the supposed no longer than 15 minutes? How many times has the discussion gone very off-topic taking even more of everyone's time? Quite a few times I'm sure.

I'm going to propose right now that I believe these mandatory daily meeting slots are no longer required for developing software using Agile.

It has long been said that meetings are usually a waste of everyone's time that has to be in them. If you look at the origins of these daily meetings, you will note that it was first brought up in the late 80s and into the 90s. It was then further developed in the early 2000s. At that point I can understand the use of them. Everybody was in the same office and there weren't any tools at that time that they can use to reduce or eliminate thier time in these meetings.

A lot of my thoughts in this post are going to resonate with a post Zach Holman did a long while ago about asynchronous communication. A good reason to use this type of communication is that people aren't commiting a specific block of their time. They can be in the best state of their entire career for programming thoughts to flow, but then they get a notification from their calendar that they have a status meeting in 15 minutes. This will definitely take them out of their flow state, take a few minutes to figure out what they need/want to say in the status meeting, then go to it.

From my experience these meetings always last longer than their intented length. It is said that they should only take 5 to 15 minutes total, but of course they usually go longer than that. And they usually go longer due to random, off-topic discussions. Whether it's about something with the project that came up and can be totally done over email or something about what the local college football team did the night before.

If the team is entirely remote then things get a bit more complicated. I agree with most things Jason Fried and David Heinemeier Hansson suggest in their book, Remote: Office Not Required. Being remote should allow the employee the freedom to handle things at home at the time it happens. One example was that if you need to get groceries at 10am then you should be allowed to do that. Then you come back home and continue to work. Personally, if I need to take someone I care about to the doctor at that exact time, I shouldn't have to worry about whether or not I need to make it to a status meeting.

Communication Tools

I explained the reasons why it isn't the best reason to continue holding daily status meetings, but what can be done as an alternative? Communication tools are getting much better as time goes back. The company I currently work for has adopted Slack. While we can make a channel for each project that we have and say our status there, there are also bots that can be integrated to do this for us.

Email is still used widely for communication. However, in these times of instant gratification, folks tend to think that we should instantly get a response after sending an email. That's definitely not the case as email is still a tool of asynchronous communication. People will respond when they can to email. In fact, if people are following the advice from the The 4-Hour Workweek book, then they will only check email two or three times a day.

Again, communication tools, especially for remote workers, are getting much better as time goes by. Slack may get beat by another tool or company that comes alone in the future. Join.me, Zoom, or Screenhero are great tools for screensharing or pairing. There are even sites that can help you find coding help instantly if you don't mind paying for it.


With the current state of tools these days and the growth of remote workers, having daily status meetings should be going as a thing of the past. Hindering employees flow state and taking their precious, and often expensive, time are too high of a price to pay for software projects. When daily statuses can be just a few minutes of typing at the leisure of the person giving the status, I really believe that having mandatory meeting times are a thing of the past.

Using Draw.IO for Mockups

I'm definitely not a designer. However, there are times a developer has to do their best to get a new website out for a client and that means doing the initial design for it.

As I was thinking through this I figured doing wireframe mockups would be best. But what tool to use for it? There are some tools for this, of course. Since I didn't need anything real fancy I decided to give Draw.io a try. Believe it or not, you can do some pretty decent wireframes with it. Here's a quick way to get started with it.

Enabling Mockups

You could use Draw.io's default shapes to create mockups, but they do include a lot of very helpful shapes and elements as well. These aren't on by default, however, so they must be enabled in order to use them.

First go to the More Shapes section below the elements section.

In this popup you can then select to add the Markup section.

Using Mockups

After the mockups are enabled, we can begin using them. I'll create a simple web page in this post to demonstrate a few items that may be helpful.

One of the mockup sections is the Mockup Containers. This has a mockup of a web page that we will use. Either drag and drop it to the canvas or single click on it to add it.

Within here we can create our page elements. How about we add a nav bar to the top?

Here we did a drag and drop on the Menu bar element inside the Mockup Forms section. It comes with default text values but they can be changed by double-clicking inside of each of the single section elements to change the text.

Next we'll just add a simple Welcome text to the middle of the page. Draw.io is really good at giving you feedback on where you're positioning your elements. Here's a GIF to help illustrate.

The examples above are only just a small couple of things you can do with Draw.io. It is very good at quickly getting something going with simple mockups. While it's not a replacement for tools such as Sketch it serves as a good tool to get ideas out for others to see in a visual way.

It was my first try at doing mockups and a design for a website. While designing the site wasn't as hard as I thought it would be I would need a lot of practice to imagine something really creative. The design I did was for a simple administration application that only a few people will be using. I may eventually step into the world of Sketch and learn how to use it for future mockups and wireframes. If you're like me an very new to this world, Draw.io is a good alternative to get something going quick, easy, and free.