1. 4

    Yeah. Agreed.

    At Khan Academy we’ve been trying to brand ours as “Healthy Hackathons” — people can stay late optionally, but we kick them out at 11:45pm to get sleep, bring in healthy food, snacks, and activities, and always commit our real working hours / work week as part of the schedule (not just weekends/after hours).

    We actually just held our Monday-Friday Healthy Hack Week last week (http://healthyhackathon.khanacademy.org). One of my favorite weeks ever, particularly because we encourage “hacks” of all kinds that don’t have to include coding, and the entire company dives in, which is my favorite part.

    They’ve been internal only so far. Maybe some day we’ll open it up.

    1. 1

      I think internal hackathons are really great. Then it isn’t about getting free labor or marketing your API, it’s about letting employees worm across department lines on projects they would never see in the normal course of their day.

      I actually ran a few hackathons for a former employer and it was great fun. (It was a small company with about 10 people participating.)

    1. 4

      The advice in here is not bad. But, IMO, a mistake I see fellow developers do often is that they think every thing they write has to tak this entire approach. So rather than seeing their ability to write code grow, such that they can write a meaningful library the first time rather than not, they reset at each new peice of code to the “copy and paste”. That makes it really hard for them to reach escape velocity and write good code. The outline in here should be for an entire career. At this point, unless it’s something wildly new, I can write a good, reusable, library off the top of my head the first time around.

      1. 5

        Hi

        think every thing they write has to tak this entire approach.

        I tried to capture this dissonance. Each step contradicts the next. I tried to repeat the point “you won’t know what you need until you already need it” throughout the steps.

        The outline in here should be for an entire career.

        That was also my intent. Along with each step contradicting the next, each step was further along the lifecycle of a project. I admit I didn’t try to make this too clear.

        1. 2

          I must admit, to really have a good escape velocity you have to really take your time and think through your data structures. If your data structures suck, the code will come to a standstill sooner or later (or explode in bloat). In these cases, it even makes sense to rewrite the program (and copy-paste the useful utility functions), so it allows deleting code portions again that were introduced in the first place to circumvent weaknesses in the data structure. These hacks I often find to be the reason for bugs in the first place as well.

          1. 1

            Can you elaborate on what you mean exactly? The way I approach a problem is to write a clear, pure (not in the functional sense), API tha solves the problem. It hides all underlying data structures. For most things in a program, one can use the most inefficient data structure ever and it doesn’t really matter, so when it comes to really hot things I can generally refactor the inside of the API without effecting the API, to be more efficient. And in those worst cases, I have to tear down a few walls for efficiency. In otherwords, I find the actual choice of data structure mostly a non-question until some performance isuse has demonstrated it needs to be an issue.

            I’ve found the above very effective in every project I’ve worked on. Are you suggesting a different approach or does that align with what you’re saying as well?

            1. 1

              I’m mostly a C developer, so it all boils down to giving the user of a library easy and simple structs to work with and which are also interfaced via functions. The API is thus also part of the data structure, and both approaches (hiding or opening) the data structure to the user are good approaches in my view. Do what suits you best and most importantly: What suits the problem.

          2. 1

            At this point, unless it’s something wildly new, I can write a good, reusable, library off the top of my head the first time around.

            But should you do so for that script to load the barfoo data into the baz database one time before we build an interface to manually edit the data?

            I would say that cut and paste would work just fine for that use case and that a good reusable library is overkill.

            1. 2

              Cut and paste what? With th reusable components I have, I can generally just combine some existing components together pretty trivially to get the new behaviour. The case that I think you are referring to is much rarer, IME, than many people like to claim. Not never, but rare enough it’s not a reasonable default, IMO.

          1. 6

            I’d argue we’re already at the point of being dependent on algorithms for many decisions. Just shut down Google for a day and see what happens.

            Behind every computer algorithm is a programmer. And behind that programmer is a strategy set by people with business and political motives.

            It’s upsetting how some people deny even the existence of non-commercial programming.

            The danger this author is talking about is that of an oracle. Computers were oracles before AI got big. Even newspapers are in a way because you can’t see how they operate, how they rate incoming news and aggregate it, and of course there is potential for abuse there too as many people trust their newspapers.

            Also, damn click-bait headlines.

            1. 4

              Nice point about oracles. Systems that drove our decisions that we don’t fully understand have been around for a long time. I think the difference now is both the effectiveness and immediacy of these oracles.

            1. 2

              My team, despite being mostly local, uses a tool called iDoneThis. We have an in-person/virtual standup Monday morning to sync on work for the week and then use iDoneThis to stay in sync for the rest of the week. This is really helpful for when people are out and want to stay caught up on what everyone is working on. It also really helps look back and reflect on what you’ve worked on.

              1. 3

                We played with iDoneThis at FreeAgent many years ago, and someone also pointed me at: StandUpMail which from the look of things is fairly similar. I can definitely see those being useful for us, so we might have another explore of those tools.

                1. 1

                  I looked at iDoneThis a few years back for a very small team I led. I loved the idea and was shocked there was no open source clone. Ended up not using it because of size, but if I ran a team that was either bigger or distributed, a similar tool would be very helpful.

                  The question then becomes, when do you have the face to face between team members (managers will get their one to ones, of course). The options I see are:

                  • adhoc, just through the course of working together
                  • scheduled (I have heard of peer one to ones, which is an interesting idea)
                  • weekly group video calls, as other comments have mentioned
                1. 1

                  I can see why you’d want to push tweets to slack–a permanent searchable record, easy to keep track of mentions. But it seems overly complex to respond to tweets from slack. Once you are alerted to a tweet, how hard is it to open your twitter client and respond?

                  1. 5

                    It means everyone has to have Twitter credentials, which isn’t even tbe main problem. The main problem is that it’s a) impossible to have a real discussion on Twitter, and b) multiple people are guaranteed to reply to same tweet (this used to happen a lot). This is why there are so many products that solve this problem with another dashboard.

                    Because we already respond to Intercom from Slack, it made so much sense to add Twitter. It’s amazing to watch people respond to questions without even realizing that the response goes out to Twitter.

                    We also added FB and Skype, since many companies deal with those for support, too.

                  1. 1

                    Wonderful article. I shared the bit about “every push goes to production” with my current team. We’re not there, but would love to be.

                    1. 3

                      I think the one strategy that this article missed was: “approach the conversation with an open mind”. If you are really all responsible, then finding out why Bob did what he did is just as important as correcting it. Of course there are obvious issues like method length, but often the code discrepancy is going to be subtle and worth discussing.

                      Code reviews can help at the strategic level too. If you have time and management buy in, they are fantastic ways to both disseminate knowledge and make code corrections in a relatively unloaded arena.

                      1. 1

                        Hi @apy,

                        I am new to lobste.rs, so any guidance you can provide about what is appropriate wod be welcome. What kind of finance articles would be a better fit?

                        1. 3

                          What a great way to convey technical issues to non technical folks in a fun and whimsical manner, yet one grounded in technical reality.

                          1. 2

                            To start with, I think it is great that CircleCI appears to be transparent and genuine in what is going on. On top of that, I think it’s unlikely that this will have a significant affect on their buttom line at the end of the year. Many people will decide it’s too expensive to move away from them, is my guess.

                            That being said, I think this really crap. I believe using CircleCI would be a bad idea. They appear to not have any capacity awareness. Their product is a hosted service, if you have no capacity awareness then what are you doing running a hosted service? Shit happens, maybe it’s easy to be Monday night quarterback, but, from the outside, it seems like they have focused on growing more than delivering a quality product.

                            1. 1

                              As you said, once you choose CircleCI, it will take a lot to move away from them. Therefore it makes sense to “[focus] on growing more than delivering a quality product” because it is a land grab type of market.

                            1. 1

                              Question about HTTP status codes in general: should they be represented as int or as string? It’s prolly inconsequential, though I’ve seen both choices floating around.

                              1. 1

                                That’s curious. What are the benefits of string representation? I have only seen ints.

                                1. 1

                                  IIS will pass fractional sub-codes so I suppose it might be too support handling those?

                                  1. 1

                                    Oh wow, hadn’t encountered that. Yes, strings would be helpful there. Thanks for passing that along.

                                2. 1

                                  I’d answer “no”. They should be represented as strongly typed instances, though probably with the option of giving a custom one - possibly enums with the correct ints would be adequate. Look at spray.io (or its spiritual successor http4s) for a library that I think handles status codes really well.

                                  1. 1

                                    It’s appropriate that an HTTP library would define some response code types for the programmer. Yet it’s interesting to note that both of the libraries listed choose to represent the “raw” response code as int. Again, inconsequential, but curious…

                                  2. 1

                                    I would use int only. Because range of the number also matters and int are easier to compare. Check these lines. For example, any code between 200 and 299, including those, is considered success.

                                    1. 2

                                      Equivalently, for a string type, you could check the first character to determine which class the response falls in.

                                  1. 2

                                    What is the difference between and automates code review and a lint tool?

                                    1. 8

                                      Nice to see such a nuanced discussion of languages, as well as a recognition that inertia and “getting things done” have a large effect on language choice.