81 karma · joined February 3, 2010
Product and Engineering manager.
A company grows into its funding, not what it needs to do (and they raised more than $300M over the years).
I work pretty hard to maintain some normal interests, enough that I can chat with pretty much anyone. I do find deeper relationships difficult though, as there are fewer people who share my real interests in my area (or even in my cohort of long term friends). Finding those people is difficult.
What I find more common is for the business to be unprepared to make lateral changes to a product. Even rational unit tests are a medium term investment. You need to spend time developing features customers don't see, and apply those tools for some time, to see quality differences. That can be difficult to justify in a number fairly normal business scenarios (low cashflow/reserves, high tech debt/regret, etc.).
To help offset the cost (and delayed benefits), I've always suggested phasing in unit test strategically. Pick a module or cross-section of the product that is suffering from bugs that customers see (i.e., affecting revenue) and add the minimum viable tests to that. Repeat as needed, and within months/years, you'll have coverage that fits the business needs well.
* Less commute time and cost (I save 8-10 hours a week, plus a few hundred a month in parking, fuel, and insurance)
* More freedom and flexibility (not every gig offers this, but many do)
* A bunch of focus time
* Communications (oddly) are greatly normalized as everyone has the same handicap. I find a fully remote team easier to manage than a mixed one, as no one has an advantage over another (as happens when part of a team shares the same office).
On the other hand, you're maintaining your office space and much of your setup (internet, wifi, heating, desk, chairs). Again, some jobs offer some compensation here, but some of it will be on the employee to maintain.
You're also more isolated, and team culture takes a bit more work to create and maintain.
Personally, I value the option to work remote as a net gain. I love my home office, I save time and money on the commute, and I have more time to focus than in the office. I understand the company benefits too, as they pay less rent, own fewer fixtures, and get more of my time. But I still see it as a net win for me.
Example:
> Unhelpful behavior: overwhelming with an avalanche of comments
Code that isn't consistent to standards absolutely needs to be fixed. And while it's a lot of work to keep code up to standard, the author is correct that the nitpicking approach is unproductive.
A better approach is to review code like this, see that it falls short, and suggest realistic (and in turn kind) ways to improve things. Picking at each missed space is clearly counter productive, and there are more standard and helpful solutions.
Why not suggest adding:
- lint tools - requiring code meets standards - auto formatting tools
I don't think things like minutia fit in code reviews either, but the small stuff does matter.
I feel the same about the other suggestions, they can be boiled down to: don't be an ass; be kind; be constructive. Just imagine that you're reviewing your own code from 5 years ago.
I have heard reports of some shared servers being worse than others, but generally I've only seen reasonable performance at a low price.
That said, I also use Digital Ocean, AWS, and Rackspace still for various projects. Really, they're all pretty great.
One example that stuck with me early was the Quake (and Doom) shader files, as well as the other game resource constructs from those old WAD-based games. The shader syntax wasn't much more than a rough wrapper on the program's `struct`s, but it allowed the graphic artists to twiddle with the resources manually (and later made a great program interface for the level editors).
Quake map files were [pretty neat too](https://quakewiki.org/wiki/Quake_Map_Format), compiling down to playable levels as BSPs (binary space partitioning files).
XML (specific to document interchange), HTML (specific to hypertext interchange), and CSS (specific to DOM settings) were all DSLs that came about over the course of browser evolution. They offered ways to define content and configuration in a way that was both easy to understand and somewhat isolated from the underlying source code.
I've developed several DSLs in various systems I've worked in. Mostly you're pushing stuff out of the source code that doesn't belong there: configuration, repeated definitions, and things that may change from installation to installation. One of the abstractions we built was a series of custom state machine scripting languages that mapped to serial and TCP/IP protocols in a way that reduced boilerplate, and made the guts of implementing specific communications scenarios easier. The amount of time spent in developing a DSL was generally many times smaller than the gain in flexibility, transparency, and exposure to who could interact with customizing the system.
Stop feeling guilty for not finishing side projects (only finish the good ones).
Adapt not just your skills, but your learning techniques (you're not in college any more, and the learning landscape is evolving quickly).
Don't be overly loyal to your company, at least more than is rational (their loyalty to you is limited to shareholder return and their basic humanity). This isn't to say you should bail early (as you won't learn or ship anything real), but value your own career over the number of years you stay with one company.
Look ahead regularly: where do you want to be in 5 years? It takes 5 years to get somewhere (like front-end, back-end, kernel dev, UI designer, etc.). As this question EVERY WEEK, and do something about it.
Make good habits: your habits are your learning and productivity, this includes the wetware (i.e., you).
Pushing that hate for legacy code to your own self is important, as it as a good motivation to improve (for us narcissists at least).
This is position is open to remote team members living within Canada, or for Vancouver folks to work (mostly) in our lovely downtown office.
We're looking for a skilled Full Stack Developer to join and lead our front end dev team. At LemonStand we help web designers and developers create some of the best online stores for fast growing brands. We've released many exciting new features and tech, and want you to help us build more.
You will be working with the founder and CEO to understand how our customers use LemonStand to build great online retail businesses, translating that into product features and priorities. You'll also be working with the CTO to develop these user stories into productive experiences and technical principles, applying them to the product on a weekly basis.
At LemonStand we get excited about our customer's success, we obsess over the stories of the people who use our software, we know their business challenges and workflow and we want you to help us build software that'll make them hugely successful.
You would be working using a number of standard tools and driving direction for the front end stacks.
Tell us about yourself at [jobs] at [lemonstand.com], or learn more by visiting: https://lemonstand.com/careers
I had always thought that the multi setup was better, but have found over the years that it's only better at certain things (for me). I've found the single monitor setup better for tasks that need focus. Full screen apps (or nicely tiled sets of apps) for single task work well on one larger monitor. This fits writing, initial coding of modules, visual design, and reading dense material.
The multi monitor setup is great for tasks that require many views, especially collaboration, research, and projects with many reference materials.
I would love a desk that let me switch between the two, or windowing software that made it trivial to get to a focus mode that disabled the extra monitors when I needed extra attention. Those times where focus is important, I find the extra monitors, light, and visual noise distracting more than seems logical.