Weaving code like a boss - part I

It's already over 3 months since I've swapped my primary code-crafting devmachine with Dell XPS 13 (2015) - sounds like the high time for first conclusions & bold statements ^_^


Before that, a brief clarification - I knew exactly what I was looking for. No more stout, heavy, highest-specced ~2.5 kg "suitcases":

  • mobility over capacity
  • comfort over features
  • agility over raw power

Lightweight is the new black

During last 2 years I've drifted quite far from my previous .NET-only (or at least "mainly .NET") silo: I did plenty of front-end web development, Scala, Erlang, Elixir + various experiments using some even weirder stuff (Clojure, R, Go). What is more, while some of stuff I did required Windows, some wouldn't run on Windows at all. Versatility became my 2nd name ;P

Few of the long list of notable consequences:

  • I couldn't have all of that installed on my machine all the time, but still ...
  • ... I had to swap my tooling quite often & ...
  • ... different tooling = different requirements / dependencies / keybindings, etc.

That has caused a shift in my priorities:

  1. Speed is the key. But not the speed of code itself, the speed of delivering.
  2. As little locally as possible. Especially of heavy server-side components.
  3. Put all I can in the cloud. If cloud is not feasible, virtualize dev environment.
  4. Use lightweight tooling. No more all-in-one leviathan IDEs.

Let's go through these points quickly:

1. Speed is the key

Or rather - developer's agility is (as its crucial for speeding up the delivery). I need to be able to take my machine anywhere with me. I need its battery to last for few solid hours (7+). I need it relatively small, so I can open it & start coding in train, cafeteria, park. I need minimum inertia -> my work environment has to be ready in seconds after opening the cover, so I can immerse immediately, instead of thinking how painful & cumbersome my job is.

"Stationary workstation that can eventually & occasionally be moved" paradigm is not my game.

In short words: my laptop HAS TO make coding a pleasant experience & CONVINCE me that if I have spare 15 minutes, coding is the best way to spend them, because "the tax" (time needed to dive in + time needed to conclude work) is a meaningless fraction of this quarter.

I am dead serious here -> it's the most crucial factor for me. Efficient time management is absolutely critical & I want to make sure that as stupid factor as hardware doesn't impede my efforts.

2. As little locally as possible

RDBMS?

Very reluctantly. If pushed into a corner - a minimum, truncated version.

Message Broker?

No, thank you.

Secure Token Service?

Gods, no.

Business Intelligence Server?

No-no-no-no-no.

Anything with "Server" suffix?

Next question, please.

I don't want to install any of these locally. But OTOH, I still have some very clear requirements for such components:

  • my access to them should be isolated - developers can't unintentionally interfere with each others work
  • I need a stable access to them in all situations (in terms of place & time) when I fiddle with code (unless I can stub / mock them in a way that doesn't impair my work)

Same applies for developed components - modularity is the key: if I'm about to make a change in module A, I don't want to deploy whole IT landscape on my machine, because it wouldn't work without all that crap at all. Modularity not just on the code level, but also on build & deployment level as well: for now I want only these few particular components I've indicated myself. And in an hour it may be other few components.

Needless to say, getting rid of all bloated, corporate crap (like DLP software or other blunt spyware) that treats you like a hopeless moron is the first thing to do.

3. Put all I can in the cloud.

Cloud is a blessing, use it.

Source code in the cloud (GitHub), CI in the cloud (Travis), API spec in the cloud (Swagger), Monitoring in the cloud (Raygun), Full Test Environments in the cloud (EC2, Azure, Heroku, DigitalOcean), Data in the cloud (S3, Redshift), Collaboration in the cloud (Slack, Trello), ...

Cheap, flexible, scalable, standardized, well documented, free of maintenance concerns & available regardless of where you are. There's barely any excuse for not using cloud services these days. And slapping on your laptop what is already available in the cloud seems like a total waste of computing power, time & energy (unless your point is to learning something new that way).

4. Use lightweight tooling

Do you know who's an "Alt-Enter programmer"? It's a software developer whose 50% of skills lies within ReSharper's code inspections ;P Some of us really should rely a bit less on smartish coding aids & start thinking more on their own. Code completion is great, same goes for aided navigation, but when I think about all other capabilities of ReSharper & Visual Studio itself, I just can't believe how complex & 'heavy' it has got. Do we really need all of that?! For me personally I think it was CodeLens that has tipped the scale (yes, I know it can be disabled :>) & now:

  • I barely use Visual Studio at all nowadays -> usually Visual Studio Code is more than enough
  • same applies for IntelliJ IDEA Ultimate, with one notable exception -> I'm still addicted to WebStorm
  • my preferred IDE of choice is ... Atom + ... console, it may still lack some of Sublime's swiftness, but it's customizability & adoption in community (fruitful in terms of numbers of plugins created ...) is something that sweetens the pain :)

Don't downsize the role of console - in era of DevOps & omnipresent automation being able to do everything straight from the command-line is an absolute must.

Part II can be found here