1. 9

    I have been doing remote work for 5 years and I think the “work room for work” and “don’t work in your pyjamas” rules are overrated. I am doing just fine typing this from my couch while waiting for a build to finish.

    1. 8

      For my first two years working remotely I had a dedicated office in my house. I think that helped me to build the discipline and boundaries necessary.

      6 years in, I can work effectively and with balance in about any situation.

      1. 5

        Same here; I think the rules for “transitioning from office-based work to remote work” are very different from “effective remote work for someone who’s used to it”.

        1. 1

          I found out that when my home office became my work office my new home office was the coffee shop after working hours.

        2. 1

          I work from home about 2 days a week (at my last job it was 3 to 4). I often didn’t shower until the end of my work day and I’ve never been in a place large enough to have a separate work room.

          I do run multiple X servers. Ctrl+Alt+F8 is my work X11 instance and I have a different username for it. My git repos have my work/home laptops as each others remotes so I can push branches back and fourth without touching origin. (I often squash some of those intermediate commits before creating a real origin pull request).

          I often find my time at home is way more productive. Open work spaces such and even my fancy noise cancelling headphones can’t drown out some of the chatter around me.

        1. 5

          Everyone here seems like a morning person…

          1. 8

            I typically get up around 10am, if it makes you feel better. :-)

            1. 1

              Hey, same as me! I kept trying to shift to an earlier schedule since bosses tend to prefer it. Brain just doesn’t agree with it. They and I are happier if they schedule me in a bit later to leave a bit later.

            2. 2

              6am isn’t early in my world. I usually get up at 4am for exercise. Have done most days for the past 18 years.

              Been starting work most days around 6am for the past 6 or 7.

              Experimenting with injecting some leisure time into my morning by starting work at 7:30-8am.

              1. 2

                By “world” you mean you live in a Nordic country?

              2. 2

                It was this comment that inspired me to write mine. ;)

                1. 1

                  Frankly, I’m surprised no one posted a night schedule.

                  1. 1

                    if it were up to me I’d work in fits and starts from about 10am to midnight. Unfortunately an office job comes with an expectation of visibility, and an attempt to travel at the same time as other road users.

                  1. 5

                    The theme is nice, but with all the effort put into this, all the logos and all the branding does make it appear somewhat too commercial, imo.

                    1. 4

                      Given I don’t have to pay for it and haven’t seen any ads, it seems more professional to me than commercial.

                      It does seem like an awful lot of effort to put into an editor theme. Better than the other end of the spectrum where someone builds a theme for their editor and then implementations for other editors get released with varying, often poor, quality.

                    1. 11

                      This article has a very low quality: it reports on two not interesting facts (retrieving code via http and loading a DLL from current directory). Why is it upvoted so much?

                      1. 14

                        Two relevant points at least: (1) an unverified binary is downloaded and installed and (2) on Windows outdated and likely exploitable versions of OpenVPN and OpenSSL are installed.

                        Then there’s the other more trivial stuff in the article that may or may not be interesting.

                        Despite the abrupt nature of the article, it seems worth talking about.

                        1. 4

                          Yeah, I’m kind of appalled that the author completely glanced over the setup step where you download the script asking you to send your password over an unsecured connection. Forget about a man in the middle attack that switches the script, all you need is to log the HTTP requests and you get the user’s password.

                          1. 4

                            They seem to stop because “they couldn’t be bothered” right where things could be about to get interesting. Which is fine ofc, that’s their prerogative, but it leads to a largely uninformative article.

                            1. 1

                              Yeah, something has got to be wrong here. How can an article have 49 upvotes but not a single comment in its first 13 hours?

                              1. 8

                                It’s an interesting find but not super engaging. It’s gross incompetence with very much not industry best practices. There isn’t much to learn from this other than “don’t write sketchy code”.

                            1. 3

                              I think it’s great that you posted this. More people should speak up about it. I also liked that you called out the potential for ableism. It’s ironic that an industry that professes to value diversity goes and shoots itself in the foot with exclusionary tactics like this.

                              I just found out the company I’m working for is setting up a 4month engagement to build an app with Pivotal, which is all XP. Im excited about the project but dreading having to do pairing 8 hours a day… funny thing is I’ve actually introduced a lot of pair programming into the company and am certainly a proponent of it but only for 1-2hrs a day and in certain situations (onboarding, difficult problems, etc).

                              1. 3

                                I’m super curious to hear your thoughts after you do it for several months.

                              1. 3

                                I kind of feel like Elixir is a fad which adds complexity - if you want to use erlang, just write erlang.

                                1. 6

                                  It’s certainly a fad, just like Ruby and JS. Which is to say something that is going to deliver a ton of business value over the next decade and foster its own pop culture in a feedback loop we’re all accustomed to.

                                  As someone who learned a good bit of Erlang 10+ years ago, I was initially worried about added complexity. Especially after being burned by the CoffeeScript nightmare.

                                  I started writing Elixir daily at work about 10 months ago. A couple weeks of using Elixir disabused me of that. Elixir is a really seamless implementation and provides valuable support for everyday programming. The only reason I might end up reading Erlang code is if I have a problem with a dependency.

                                  If you’re a glutton for punishment you can call Elixir code from Erlang.

                                  1. 3

                                    Saša Jurić wrote up some excellent points about why elixir. Not saying we all should do it, but there are some advantages, helpful features and superb Erlang interoperability.

                                    Another thing that I enjoy about Elixir is the community. Not just the people, but the community is a “melting pot” different communities - Erlang and Ruby mainly but there’s also a good amount of people from Haskell, JavaScript and others. Together ideas meet and new concepts and ideas emerge.

                                    1. 3

                                      But Erlang is not the same as OTP and BEAM, and Elixir is “just” another language the uses OTP and BEAM. Sure, it’s close to Erlang in some (many even) respects, but it’s not simply a “prettier Erlang”. If anything, it’s a better engineered and much faster Ruby.

                                    1. 5

                                      For user login they suggestion going from:

                                      User u = UserService.login(username, password);
                                      

                                      to

                                      User u = UserService.getUser();
                                      

                                      And claim the latter is better. But what happened to the username and password? Where is the user that is returned from getUser stored? They also make this vague claim that in the first version it’s unclear what you should do with the User when done, “should you log it out?” etc. Ok, but how does the second version solve that problem? How is it clearer that I should or should not log the user out? I don’t see how this is better. It doesn’t even make sense to me.

                                      Maybe login() returned the User so it could return null when it failed? We are tempted to return error codes from a command if it fails to change state. But it’s better to throw an exception, maintaining the convention that commands return void.

                                      Why? If you’re language is good and has a result type why wouldn’t I use that instead of exceptions? Comparing exceptions to null is a pretty poor comparison.

                                      This post is pretty crappy. How do I do anything that requires giving me a proof of my success? For example, logging in often returns a token that you can use in future requests as proof you logged in. What about atomic operations? There might be good reasons to use Command Query Separation (I haven’t seen one) but this article does not make a compelling case.

                                      1. 2

                                        I agree. This article fails at a basic level. I don’t see how it really introduces or advocates the topic.

                                        Just by the name alone (and the “rules” listed late in the post) I would expect you to login a user with one call and retrieve a logged in user with another.

                                        In the error handling discussion. Why not use the NullObject pattern?

                                        1. 2

                                          The point is to separate it into two steps. One that gets the user and one that actually does the login:

                                          User u = UserService.getUser();
                                          u.login(username, password);
                                          

                                          A clear delineation of usage. If you want the token, you ask for it. No reason to return it here.

                                          Token t = u.getLoginToken();
                                          

                                          No side effect, no confusion, no (possibly) unnecessary value returned.

                                          1. 2

                                            That API is not any better as you’ve created a new way to make uninitialized variables, which are fairly universally considered a source of bugs. What happens if I call .getLoginToken, or any other method, on a user that has not had .login called on it or failed to login?

                                            If I were confronted with that API the first thing I’d do is wrap it in a function called something like doLogin which wraps getting a user, logging it in, and returning it. I never want to see a user that hasn’t logged in.

                                            If you want to go CQS on this, you probably need a LoginRequest object which has .login and .getUser methods, that way I can only get a User value after it’s logged in. But, again, I’d wrap this up in a doLogin function because the LoginRequest object just exists to live up to CQS and isn’t really providing any value.

                                        1. 5

                                          I find it especially difficult to distinguish between personal and company time being full-time remote. I might sleep in an hour or two one day, and work until 9pm. It isn’t until I realize I’ve sent a work-related email, timestamped at that hour, that I pause to think “does this set the expectation that I or my peers ought to be working this late?”

                                          I wonder if it would be appropriate to say something like, “hey, I worked pretty late last night, so I’m going to knock off early today” in order to help set the expectation that while I may sometimes choose to work extra/different hours, I am still keeping an accounting of my time spent.

                                          1. 4

                                            I’ve worked on a remote team for a long time, and no matter how mature the team, people still do pay attention to the timestamps in emails, unfortunately. I wish it weren’t the case but I haven’t come up with a good solution, short of scheduling my emails to be sent out the next day, instead.

                                            1. 1

                                              The only time I pay attention to the timestamp on an email is when it’s a meeting cancellation after the scheduled start time.

                                            2. 3

                                              Yes. Working late one day to leave early another seems perfectly acceptable and normal at every place i’ve worked.

                                            1. 9

                                              My office is in an orchard – one hundred yards from anyone. No one bugs me. If I roll down the outer (metal) door, I don’t get cell phone service, which can be handy.

                                              http://logonpro.com/office.jpg

                                              The walk to the soda machine kinda sucks.

                                              I’d show you a picture of my big monitors inside, but which part of “Private Property” don’t you understand? :)

                                              1. 3

                                                Oh, but even though the soda machine is not nearby, the hen house is.

                                                http://logonpro.com/office-desktop.jpg

                                                How’s that for glossy architectural marketing photos?

                                                1. 3

                                                  I’m curious about the structure. Is it some form of shipping container? Can you tell us a little bit about how it’s constructed?

                                                  1. 4

                                                    Thanks for asking.

                                                    Office is one end of a 40ft x 8ft cargo container. Here are outside photos. The remainder is used for storage.

                                                    Construction was basically framing-in the inside of container. The floor is made partly of wood, so that helps. Then adding electrical, insulation, window, door, and drywall. The container came with a light “rollup” door on the office end. The framing is a little over-engineered since it’s not structural.

                                                    I am a slob, so I have no nice inside pictures. Here is an early one, although, now I’ve added a few bookshelves on the walls above the table.

                                                    1. 1

                                                      I’d love to do something like this, but have no idea about the cost. Do you mind sharing how much the container and retrofitting ran you?

                                                      1. 5
                                                        • Grade spot for container, gravel base: $300
                                                        • Slightly used container, painted, 2 rollup doors, vents, delivered: $4125.
                                                        • Framing: $600 incl labor.
                                                        • Electrical: $200 (not including labor)
                                                        • Insulation: $100
                                                        • Door, Window: $200, used
                                                        • Drywall: $200
                                                        • Air-conditioner: Had one lying around
                                                        • Ceiling fan: $40
                                                        • Permit for installing container: Depends on location.
                                                        • Other permits: Depends on location.

                                                        NOTE: You may not be able to obtain building permits for this type of project, depending on location.

                                                  2. 2

                                                    Looks like your disabled access is a bit ad-hoc. ;-)

                                                    1. 1

                                                      Good point. In my defense, I have that little ramp. And I can drive up in a golf cart.

                                                      1. 2

                                                        Heh. Seriously, this is cool. I want something like this. I resigned from a job I love earlier this week to move out of the big smoke and spend more time with family and less time commuting.

                                                        1. 1

                                                          Too bad they wouldn’t let you work from home :(

                                                          1. 1

                                                            Yeah, I was initially disappointed at that but I’m really looking forward to the sabbatical now :-)

                                                  1. 13

                                                    We tried this where I work and didn’t get much value from it. We were either doing speculative refactoring that wasn’t necessarily as high value as we initially thought or we just didn’t do it at all because of other time pressures.

                                                    We even had some refactorings that we didn’t end up merging because the scope of change was so huge we weren’t comfortable they were correct. We did eventually get those changes made, but in smaller steps over the course of a number of releases. You could say “write more/betters tests” and “be more confident” but the reality is smaller steps was a better way for us to maintain our comfort level and production stability.

                                                    What we found did work was to take the time to refactoring as we did our usual tasks. This resulted in changes that addressed pain points as they were encountered and in a scope proportional to that pain.

                                                    In the end I guess it’s our fault the dedicated refactoring time didn’t work out. However, I do think we converged on a practice that gives us more or less the same benefits.

                                                    1. 4

                                                      That was actually one of my concerns with the idea (the post is not mine, I just found it). It seems that this is a practice you might make temporary. Perhaps when it is apparent that you have a piece of code that your team is working on that has a lot of cruft to it.

                                                      With regard to your mention of comfort with large-scale refactoring, I never feel comfortable with it unless there’s a pretty robust test suite or at least you have validation rings (I work on a service and we can test that sort of thing on <1% of machines).