|
TooMuchAbstraction posted:Helpful questions Thanks. Lots of good stuff there. Some of them I already have answered at a basic level, but probably need to probe a bit more. The next stage is interesting because I’ll just be talking with a couple of the developers and the product manager.
|
# ? Apr 24, 2019 20:58 |
|
|
# ? May 27, 2024 21:39 |
|
Rocko Bonaparte posted:I'm looking for some reading for something I suspect exists out there already. I'm assuming there's some rough idea of software complexity that is similar to Big O notation and it goes something like: nobody in particular bit on this, perhaps because this is less "oldie career advice" and more "the kind of technical topic that perhaps only oldies will appreciate". (e: or "the kind of topic that only leads to bloviating nonsense, or old folks yelling at clouds") my few thoughts: library or module dependence structure is one way to think of this at a particular moment. if your components (be they functions, modules, classes, whatever) are vertexes in a graph and "X uses Y" is a directed edge, you really want to see that the built system with N components has way, way fewer than N^2 edges. good designs lean hard into assumptions. some implementations designed around a set of assumptions can be updated as assumptions are invalidated, some can't. good assumptions remain true over many feature requests. over a long enough timeline of feature requests, the chance that no feature request violates an earlier assumption drops to zero. I think the most common thing to focus on in this context (sustainable development despite complex software) is how you accomplish different kinds of change. Basic questions for this include: 1. How do you know that the software does what it is supposed to currently? 2. What options do you have for achieving the desired change and what are their risks and payoffs? 3. How will you know that the software does what it is supposed to after the change? My perspective on this is informed by a project where I completed a long-planned systemic change (too many things get called "refactorings" that aren't refactorings) where the test coverage came entirely from scenario tests that themselves did not have any pass or fail indication, merely baseline outputs with the status of "we considered this output good or at least acceptable as of (last release where this changed)". what I came up with succeeded and was later used for at least two other, larger systemic changes of the product. the product probably still doesn't have much if any coverage by unit tests. prisoner of waffles fucked around with this message at 22:26 on Apr 24, 2019 |
# ? Apr 24, 2019 22:12 |
|
prisoner of waffles posted:my few thoughts: This relates to the software design notions of coupling and cohesion.
|
# ? Apr 24, 2019 22:42 |
|
prisoner of waffles posted:library or module dependence structure is one way to think of this at a particular moment. if your components (be they functions, modules, classes, whatever) are vertexes in a graph and "X uses Y" is a directed edge, you really want to see that the built system with N components has way, way fewer than N^2 edges. And you really want to make sure there are no cycles. Down that road bad things lie.
|
# ? Apr 25, 2019 00:14 |
|
prisoner of waffles posted:nobody in particular bit on this, perhaps because this is less "oldie career advice" and more "the kind of technical topic that perhaps only oldies will appreciate". (e: or "the kind of topic that only leads to bloviating nonsense, or old folks yelling at clouds") Structured programming and its various descendants are all based on staving off that combinatorial complexity growth that you so neatly describe. 1) This depends on what you mean by supposed to. Dijkstra cleverly treated correctness separately from pleasantness. Correctness is when a program satisfies its specification. If, like most software, there is no specification, then correctness isn't well defined. Mostly though nobody cares about correctness; they care about pleasantness. That's a lot harder to pin down. A computer game can please its players despite the occasional crash. A service can please a company's management and shareholders, by making money, without being correct. 2) And do your deadlines even allow you to investigate properly? 3) Proper separation of concerns is the key to keeping this intellectually manageable. And of course unit tests. While tests can only show the presence of bugs, not their absence (that requires a formal proof), a comprehensive test suite sure makes the kind of daring refactoring an assumption destroying feature request requires much more pleasant. As an aside, some kind of rigorously applied test-first method is the only way I've found that allows me to convince myself that the tests really are useful and comprehensive. Code coverage tools are just too easy to game. I like to use unit tests as a kind of semi-formal specification. It's also very nice to comment the intent of the test, because that may not remain clear in the face of assumption destroying changes. On a tangential note, proper use of invariants when constructing code is practically a superpower. Edit: Theory aside, a very useful career skill is recognizing that a project is going to collapse under the weight of its own internal contradictions and transferring or getting a job elsewhere before things go to poo poo and you get stuck with the lovely review. User fucked around with this message at 02:13 on Apr 25, 2019 |
# ? Apr 25, 2019 02:07 |
|
User posted:proper use of invariants when constructing code is practically a superpower. Any further reading on this concept? I want to have superpowers
|
# ? Apr 25, 2019 02:12 |
|
rt4 posted:Any further reading on this concept? I want to have superpowers As an example if you know your data ca n not have nulls, you then don’t need to null check. If I know my data is sorted as a precondition, finding the min and max values is very fast. Etc. https://en.m.wikipedia.org/wiki/Design_by_contract
|
# ? Apr 25, 2019 02:25 |
|
rt4 posted:Any further reading on this concept? I want to have superpowers https://yourbasic.org/algorithms/loop-invariants-explained/ Edit: Smoothsort* is basically impossible to understand without a good grasp on what an invariant is and how to use it. * https://en.wikipedia.org/wiki/Smoothsort, https://www.cs.utexas.edu/~EWD/transcriptions/EWD07xx/EWD796a.html Edit edit: Sadly it's very rare to actually get to apply techniques like this professionally, because for some reason employers just want me to churn out buggy but pleasant code. Edit edit edit: Another nice paper: http://se.ethz.ch/~meyer/publications/methodology/invariants.pdf. It describes why loop invariants are useful even for informally developed code. https://en.wikipedia.org/wiki/Hoare_logic is a nice overview of the notation. User fucked around with this message at 02:40 on Apr 25, 2019 |
# ? Apr 25, 2019 02:25 |
|
In general you're talking about overhead. The more complicated your code is, and the harder it is to verify correctness, the harder it is to maintain and the slower your development pace becomes. The usual way to handle this is to recursively chop up your program into as-small-as-possible, well-defined and thoroughly-tested components that have simple potential interactions with anything that is not inside the component. They publish an API with rigorous requirements, and their dependencies are other components with other rigorous APIs. Since each component has well-defined requirements, you can write tests against those requirements, which greatly simplifies development within the component. You don't care so much about the network of dependencies (which components depend on which) because everyone upholds that standard of quality. When a component gets too big or unwieldy within itself, it fissions into two or more sub-components -- but this is a non-event for external viewers, because the API of the original component is maintained by a facade or similar abstraction layer. When you do need to make a change to a component that breaks its API, it'll be intrusive. You have to track down all the consumers of the API and update them, after all. But most work isn't API-breaking. And of course your guarantees are only as good as your code coverage. If you're starting with a steaming pile of spaghetti code, then it's hard to get to a point that looks like this. It also takes discipline to keep your code at this level of organization, because the temptation is always there to save writing tests for later. But so long as you maintain discipline, this does massively reduce your organizational complexity / development overhead. I won't claim it scales indefinitely, but for most software houses I feel it's good enough.
|
# ? Apr 25, 2019 03:10 |
|
Anybody here carrying the torch for "Data Visualization" as a job title? I'm in NYC and had luck finding good positions, but I wonder if moving to SF is inevitable (provided DV can stay separate from Data Science at all). More generally, do you work in a specialized programming job and find it going well / ok / terrible? It's a topic I'd love to hear more about.
|
# ? Apr 25, 2019 13:24 |
|
Analytic Engine posted:Anybody here carrying the torch for "Data Visualization" as a job title? I'm in NYC and had luck finding good positions, but I wonder if moving to SF is inevitable (provided DV can stay separate from Data Science at all). TimWinter posted in the jobs thread up in SH/SC looking for (potentially remote) data visualization people
|
# ? Apr 25, 2019 16:14 |
|
Does anyone do some freelance dev work on the side? I'd love to do 10 hours a week and make a bit of cash on the side.
|
# ? Apr 30, 2019 22:00 |
|
Annual reviews are coming up. I'm confident that I'm doing well, even though my boss provides me with no actual expectations. Instead, I'm trying to list every possible unsaid expectation under my accomplishments. One key item is the volume of files added to a config repo, which means I'm setting up new customers at a very high rate. In fact, I have the highest volume of files added there by a wide margin. Would writing this as "3x the volume of files added to this particular repo compared to the second highest contributor" make me sound like an rear end in a top hat? I want to emphasize not only that I happen to be doing the most of this particular task, but that I'm doing a volume of this type of work nobody else has even attempted.
|
# ? May 1, 2019 22:15 |
|
It sounds like "responsible for onboarding the majority of customers in [time period]" is your accomplishment and files added to that config repo is a supporting metric you can cite. Be sure that it's an accurate measurement and don't word it as you vs. the rest of the team.
|
# ? May 1, 2019 23:35 |
|
Doghouse posted:Does anyone do some freelance dev work on the side? I'd love to do 10 hours a week and make a bit of cash on the side. I would also be interested in any experiences with this, as I've been trying to do this for about half a year now and I just finished my third contract. So far my own experience has been pretty good. I made a company with a friend who handles all the paperwork and stuff (which is great because I don't want to worry about any of that) and I got all three contracts through my network. Finding more work seems to be a problem though. At this point it seems like I've run out of people wanting stuff developed for a reasonable price in my own network and I don't really know where to go from here. I can find a bunch of people looking for developers to work for almost nothing, and I can also find a bunch of huge projects which are clearly meant for big companies, but what I want are some reasonable sized projects for a 1-2 man team at something like 50€/hr rate or better (which is definitely not unreasonable in my country or in Europe as a whole as far as I know) and I'm not finding anything. I think it might help if I used social media or something to advertise my services, but advertising is not the type of work I want to be doing out of my free time.
|
# ? May 2, 2019 13:41 |
|
It's that time of the year all around, I guess. However, let this be a lesson to all you managers-to-be: at an engineering all hands meeting, delivering the news of 'money is tight due to a rough 2018, so raises are going to be minimal this year' at the START of the meeting is a great way to ensure people tune out the rest of it. I'm excited to see the result of combining that news with a Highly Exceeded Expectations annual review.
|
# ? May 2, 2019 15:04 |
|
Cuntpunch posted:I'm excited to see the result of combining that news with a Highly Exceeded Expectations annual review.
|
# ? May 2, 2019 16:10 |
|
Mine did it in February. My sideways crab walk of a career has obviously continued.
|
# ? May 2, 2019 17:04 |
|
The one thing I regret with my current job as of one year is that the pay is loving poo poo and the annual salary increase barely compensate for inflation
|
# ? May 2, 2019 17:18 |
|
Vulture Culture posted:just lol if your org ties compensation to individual performance anyway The opposite is way worse. "Sorry y'all the executive team was shooting for 500m this year but we only did 499m, making us a fuckload of money but a consolation prize 2% bonus for you" Edit: meanwhile leadership got a half company half personal performance bonus, lol
|
# ? May 2, 2019 19:19 |
|
Vulture Culture posted:just lol if your org ties compensation to individual performance anyway Compared to what? My review can be summed up as 'you're the newest member on the team, but every single other team member looks to you for guidance and assistance on a regular basis'. That guidance and assistance takes a lot out of me - while also helping the team as a whole look really good. Are you suggesting that it'd make *more* sense to encourage a culture of 'eh, gently caress it, doesn't matter anyway' because performance means nothing and you may as well just warm a seat for 40 hours a week because you have no control over your own destiny?
|
# ? May 2, 2019 19:33 |
|
Cuntpunch posted:It's that time of the year all around, I guess. I got that this past December! My boss immediately followed it with "The only way you're going to get paid what you're worth is if you find a new job." So I did! And he did too!
|
# ? May 3, 2019 01:08 |
|
Cuntpunch posted:Compared to what? My review can be summed up as 'you're the newest member on the team, but every single other team member looks to you for guidance and assistance on a regular basis'. That guidance and assistance takes a lot out of me - while also helping the team as a whole look really good.
|
# ? May 3, 2019 04:55 |
|
Vulture Culture posted:yeah that's definitely it and there's no other possible option Then clarify, because as it stands all you've done is laugh at the idea that individual performance matters, which leaves the door open only to the feeling that group performance or project success is the metric you'd use. Which feels like practicality from a parallel universe operating under completely different rules of human nature. Whether it was schoolwork across all ages, or work across several professions - every time that the measurement was set on 'the team as a whole' things inevitably splintered into 'those that care' and 'those who appreciate the free ride'. Like I'd really, really love to understand what you're getting at - am I missing something here?
|
# ? May 3, 2019 06:48 |
|
In my previous team, we had a system where something like 5% of revenue of each project we worked on each quarter was given to us as bonus money, and then our manager decided (based on performance reviews etc) who got how much of that money. I convinced our team/manager to just divide the money equally between all developers instead, it ended up working great. My main reason for not liking individual performance based bonuses is that it can be very difficult to accurately evaluate someone's contribution to a team, especially for a manager who isn't really in the development process. Also, having individual performance based bonuses can create motivation to just maximize individual performance reviews instead of maximizing team performance (maybe even at the expense of team performance) and this is really hard to deal with because good luck explaining to managers that the guy with the best performance reviews is actually slowing down the team. Of course on the other hand, equal bonuses for the whole teams can create motivation to just let the rest of the team do all the work while you chill, but people who do this are much easier to get rid of in my experience, as long as the rest of the team cares.
|
# ? May 3, 2019 08:00 |
|
sunaurus posted:In my previous team, we had a system where something like 5% of revenue of each project we worked on each quarter was given to us as bonus money, and then our manager decided (based on performance reviews etc) who got how much of that money. I convinced our team/manager to just divide the money equally between all developers instead, it ended up working great. You make a good point - but it also somewhat feels like the problem in this example isn't that of rewarding individual contributions, but rather of the metrics used to determine those contributions. When we're talking annual reviews, going 'ok hey everybody did alright so we're just spreading the money around' makes total sense. But it's discouraging and demoralizing to on one hand have a company pay lip service via review as 'you're doing amazing' but in action go 'but you're going to be treated as equally valuable as the guy who we're flagging as barely meeting expectations.'
|
# ? May 3, 2019 08:31 |
|
Cuntpunch posted:Then clarify, because as it stands all you've done is laugh at the idea that individual performance matters, which leaves the door open only to the feeling that group performance or project success is the metric you'd use. Which feels like practicality from a parallel universe operating under completely different rules of human nature. That is not what he said and you know it. Don’t be willfully dense.
|
# ? May 3, 2019 12:16 |
|
Pollyanna posted:That is not what he said and you know it. Don’t be willfully dense. We reward for things that matter. That seems a truism. No bonuses for having the nicest shoes, no raises on merits of drinking the least coffee. A terse, dismissive quip about the idea that individual performance should correlate to compensation doesn't leave a lot to go on other than 'individual performance shouldn't be rewarded'. Which correlates to a thought that individual performance doesn't matter. The two other logical alternatives is that 'nothing should be rewarded' - which seems easy to discard as a hypothesis for reasons of its sheer ridiculousness - or 'group performance should be rewarded'. That has troubling connotations.
|
# ? May 3, 2019 15:23 |
|
Individual performance should be rewarded, but it's very hard to measure and most managers don't put a serious effort into doing so. If they get it badly wrong enough, then they'd be better off just rewarding team performance.
|
# ? May 3, 2019 15:30 |
|
The whole concept of reward for performance is alien to me. Either I have been at lovely companies or my performance has always been mediocre, I never seen anything come from it.
|
# ? May 3, 2019 18:04 |
|
Keetron posted:The whole concept of reward for performance is alien to me. Either I have been at lovely companies or my performance has always been mediocre, I never seen anything come from it. Me @ last job: soo I'm on this high profile project and I've been working my rear end off so I think I deserve a higher raise than usual My boss: uuuUUuh actually some would say being on that project is a reward in itself
|
# ? May 3, 2019 18:06 |
|
Keetron posted:The whole concept of reward for performance is alien to me. Either I have been at lovely companies or my performance has always been mediocre, I never seen anything come from it. Meanwhile the concept of not getting rewarded for performance is alien to me. I always expect at least a bonus, if not a bonus AND a base compensation raise of greater-than-inflation. Last year I even somehow got two bonuses, one from my employer and one from the client I worked with all year. It's probably the companies you've been at, because I am not particularly smart or good at my job.
|
# ? May 3, 2019 18:08 |
|
Cuntpunch posted:Then clarify, because as it stands all you've done is laugh at the idea that individual performance matters, which leaves the door open only to the feeling that group performance or project success is the metric you'd use. Which feels like practicality from a parallel universe operating under completely different rules of human nature. You shouldn't use tips as a carrot to get people to perform their best. You should compensate people fairly under the assumption that they're going to be bringing their best every day. If you have chronic underperformers, managers should do their jobs, and coach them or manage them out of the organization instead of using a bonus structure to passive-aggressively dock their pay relative to their coworkers. Everyone's playing on the same team and everyone should take victories and defeats together. These assumptions are cultural, and vary against individual expectations. The advice I'm giving above is probably absolutely loving terrible for most sales cultures. But for team-driven collaborative knowledge work, bonuses based on individual performance make absolutely no sense. Vulture Culture fucked around with this message at 18:44 on May 3, 2019 |
# ? May 3, 2019 18:41 |
|
Big companies have a lot of weird confounding factors. Is someone doing good, solid work on a product that ends up tanking less deserving of a bonus that someone who lucked into a good division? Do you delegate it all the way down to frontline managers (somehow, fairly) and let them decide the split?
|
# ? May 3, 2019 19:23 |
|
You can't tie individual bonuses to team metrics like KPIs or product revenue for exactly those reasons. Individual bonuses should be tied to individual performance vis-a-vis individual expectations. Individual performance is measurable, it's not as easy as looking at a "dollars go up" line graph, but that's why the manager is being paid. Of course, the bar for managers is really low-- very few bother establishing expectations with their reports outside of what's in the job description, much less continually revisit and revise the expectations. So it's no surprise they can't accurately assess individual performance by the time performance evaluation season rolls around.
|
# ? May 3, 2019 20:43 |
|
Individual performance is meaningless unless it has a negative impact on team progress. Your job as a SWE is not to churn out the most and best code possible, it's to drive towards team, group, and org goals.
|
# ? May 3, 2019 23:06 |
|
Pie Colony posted:You can't tie individual bonuses to team metrics like KPIs or product revenue for exactly those reasons. Individual bonuses should be tied to individual performance vis-a-vis individual expectations. Individual performance is measurable, it's not as easy as looking at a "dollars go up" line graph, but that's why the manager is being paid. The question isn't whether you can, but whether it improves outcomes for your company if you do. For knowledge work, individual incentive pay overwhelmingly tends to motivate people away from collaborative behaviors.
|
# ? May 3, 2019 23:13 |
|
Not really, it's more like individual performance is measurable if you know how to measure it. And get this-- one way you can evaluate individual performance is by their impact on the company.
Pie Colony fucked around with this message at 23:54 on May 3, 2019 |
# ? May 3, 2019 23:52 |
|
Pie Colony posted:Not really, it's more like individual performance is measurable if you know how to measure it. And get this-- one way you can evaluate individual performance is by their impact on the company. Which is pointless because individuals don't exist in a vacuum. Your performance is dependent on how well you help your team achieve its goals and so measuring an individual means less than measuring a team's achievements.
|
# ? May 4, 2019 00:00 |
|
|
# ? May 27, 2024 21:39 |
|
My team is part of a ~50-person effort. Sure that 50-person effort impacts the company's bottom line, but how do you measure my contribution towards that impact?
|
# ? May 4, 2019 00:07 |