In all my jobs since, I have worked in a more agile setting. By that I mean that the team is small (less than 10 people) and sits together with some sort of product owner. Not private offices, but rooms where only people working on the same thing sit. Frequent releases, fast feedback. Very few meetings, most issues can be worked out in the team. In my view, this is a quiet environment, but occasionally there are dicsussions that you overhear (but that is not a problem). In these types of environments I have been much more productive than I was at Ericsson.
There are two great quotes that I think capture this:
“A complex system that works is invariably found to have evolved from a simple system that worked.”
“Enlightened trial and error outperforms the planning of flawless intellects.”
It is really sad to read about how often the agile ideas have been misused!
After 20 years that's been my experience
The thing is, you can have development standards that require small iterations that are immediately deployable and this are immediately tested and deployed, without pulling all the overhead of some PMs interpretation of scrum.
I often find the power is generally with the wrong people and they promote the things that matter to them at the detriment of everything else.
I don't personally believe this is by design, it's just people in $foo management position tend to have the soft skills to make their job easier, when many of the developers often don't. And managers, who tend to control budgets and define departments, tend to give those departments to more managers and there's not a lot of people in the room telling them that a software person should probably run a software team.
You'd think I could cope with this by working from home, but that option is limited, too.
WHY dont we do something about it? why are we going like cattle to the slaughter house? We are developers right we are supposed to be smart, intelligent yes, we have let this come all over us step by step until we have lost our life.
Developers - it's time to raise to the basic work environment, we need space, we need to do our work with focus, and YES we need separation between work and home.
If a company needs work-after-work they should hire people for these after-work hours, if messages are sent after work, and it's just this additional answer this mail, it should either be handled by workers who work over these hours or just wait to tomorrow
We have let this on us, and it's our duty to bring back the focused work environment and the joyful home environment without interruptions from work or being oncall or answering messages.
Companies _will not_ negotiate things like letting developers have autonomy over the process by which the work is managed and delivered, or letting developers have private offices.
This is just standard Moral Mazes 101 stuff. Preserving the property that employees behave like obedient dogs instead of free thinkers is the absolute number one mandate, to the detriment of all else.
But yeah, what the other commenter said. Just do it!
When I’ve done contract work, and when I ran a startup, I started tracking my own time. I find it helps me focus and account for my time and understand my own habits. It’s not very good for open problems or exploratory work, other than to find that they take a lot of time. ;)
Other than tracking myself, I’ve never had a job that measured my time directly. I had one job that did measure when employees were at work, but they didn’t show it to employees nor set any quotas, they just wanted to understand work patterns.
The main function of the Scrum Master is to shield the developers from all the non-development crap. I've worked with one guy who was so good at it he would play interference and defend us from outside interruptions almost literally (actually blocking people from coming to our desks, making sure we could focus, holding meetings only if someone on the team expressed some kind of blocking issue that he couldn't solve by himself, etc)
Sure, probably this was more about him being a good manager than the "process" behind it. But no matter the process, if a manager is destroying productive time from the developers the fault is in the individual, not the environment or process adopted.
Why can't it be both? Bad managers can be empowered by a process, just as good managers could be hampered – no?
Agile provides so many tools for bad managers to micro manage, so that even if the process itself is well intended it still could lead to hell – no?
So, no. Bad managers should not be empowered by Agile. They should be weeded out, by other people first and, failing that, results second.
Of course also that, but you're completely right that that is the exact job of the Scrum Master. To "remove impediments". No matter if the impediment is some process or a manager, it's the Scrum Master's job to remove it.
This actually aligns pretty well with the ideas in Agile Manifesto. And that's why I'm so sad when "scrum master" nowadays mostly seems to mean someone who counts the minutes devs spend on each Jira ticket, and haunt the team when velocity seems to be dropping 10% for the second day in a row.
We can’t really ever hope to make progress with improving productivity or work environments if people contribute to be this reductive.
A “scrum master” role does obviously not “literally seek to destroy developer time” - it’s a patently ludicrous assumption. But if you are in a situation where this is happening - rather, where a “scrum master” role is getting in the way of work - then it does point to something else going wrong in your organisation.
I feel most jobs, at some companies in some situations, are absolutely justified. The problem is that then every company thinks they need to follow suit, and it ends up being a giant time sink. I'd wager most scrum masters are viewed by their team as a net negative (my opinion). But of course no person whose job acts as a hindrance will admit as much.
1) Pair programming, with the VP stopping by every couple of days asking "where are you guys stuck" and would actively try to solve our problem.
2) Story prioritization - each PM would write product stories for the backlog in an effort to get them in the next sprint. The same VP (above) would review each of those stories in front of the PMs and developers. If it were really lazily written, the PM was shamed, it was thrown out, and could be resubmitted for the next week. Developers got to ask questions, add tidbits regarding prior work that may need to be studied to complete the story.
3) If a bug made it out in the release, it was no-one's fault. Everyone worked as quickly as possible to either create a patch or roll back the feature completely.
P.S. That VP of Engineering is Andres Camacho. He's in San Francisco. And he's amazing. Work with him if you have a chance. He's well known for hiring Jr developers, training them via pairing with them intensively, getting them up to speed quickly and having them contribute meaningful code within a few days. He's now the CTO of Better Therapeutics.
1. If I've not done my job as a PM, then it's much better to figure it out earlier rather than later. If engineers struggle on without the right support from a PM (whether that's stories/requirements, oral clarification, ...) then that can slow things down or create worse outcomes. So I'd rather someone call out holes in my work at the earliest possible opportunity, then be polite so the problem can get larger.
2. In a high trust environment, people can take criticism of their work without taking it personally. It's hard to achieve this type of relationship (with specific people) or environment (with a group of people), but can make things much smoother.
3. I feel the job of the PM is to make the team successful through whatever means possible. Feedback/criticism directed at me is a valuable source of information to support that, whether or not I am the correct target.
I also read "shot down" as a constructive and expected feedback mechanism. In small teams, it might be the TL or eng mgr who provide this feedback, but for larger product business cases are often required for review by executive stakeholders, and they will always be terse, hopefully constructive, but frequently come across as overly negative. Why? Because they're gatekeepers and it's their job to ensure the best opportunities are pursued and the rest are either back burnered or sent to the graveyard.
But people often choose whether or not to take something personally, and their reaction determines the outcome. Consider the following situations:
A. (Bad case) You criticise my idea/proposal, and I interpret that as you criticising/shaming/blaming me (i.e. I take it personally). I then decide to ignore your criticism, because I feel it is based on your personal opinion of me, which I know is incorrect.
B. (Better case) You criticise me personally (e.g. "you're a bad PM, as evidenced by X"), and I take it dispassionately, trying to understand why you feel that way, use that to inform my understanding of the situation, and find a way to make things better.
In A, my idea was criticised, and there was no positive outcome.
In B, I was personally shamed, but there was a positive outcome.
I cannot change how people communicate (at least in the short term) but I can change how I react, and hence what impact I have on the outcome.
Idea can be criticised, never individual. Your argument may sound right, but it is not considering everyone. Your argument is saying how one should react, but is not answering what if one reacts differently. How can we mend it.
Leader is one who is compassionate and has ability to differentiate idea from individual. Work is not entirety. Idea will never define a person. whenever we critique, it is best to keep it till the idea and never to person. my few cents.
And I always aim to criticise the work/behaviour and not the person.
- When I criticise a piece of work, someone can still choose to interpret it as shaming or a personal attack.
- When someone criticises me personally, I can still choose to focus on the useful part. I don't have to feel offended/upset.
When someone criticises me personally, I can still choose to focus on the useful part. I don't have to feel offended/upset.
- This as mentioned before, this we cannot make a rule but a guidance but this is very personal to the individual and most inidividual even if he is not offended, will not work under him for a long time to come. which is not good either way.
If a proposal is bad because a decent idea is lazily written (as the original post states), it's appropriate to express disapproval at the person - if the only thing that was needed to change in order to make this proposal better was the person's attitude (do your homework properly before submitting the proposal instead of wasting everyone else's time), then it is constructive to target that attitude.
I saw good situations in a couple of large companies, but also in some small startups. Private offices or common offices for small teams (2-4 people) with sound barriers to keep things quiet were the best physical environments. My experience with remote work has been uniformly good.
The best psychological environments were ones in which teams developed confidence and trust in each others' capabilities and judgments, and in which leadership was trusted both to make reasonable strategic decisions, and to treat people fairly.
I've also seen a variety of bad situations. Major contributors to loss of productivity include excessive noise and distraction in the workplace, too many interruptions, oppressive micromanagement, loss of trust and confidence among colleagues or in leadership, too much or too little process, anxiety over the solvency of the company, infighting and factionalism, sudden, frequent changes in product objectives and business strategies, loss of leaders' credibility, and sketchy business practices. All of these things impair productivity.
5 minutes in a noisy sales office with 17 people and it all went away.. the brain adapts quickly..
I know building software is different though.. constructing an entire blueprint in the brain.. it takes focus.
One of my biggest mistakes is I rarely drew things out. If I ever went back to software, I would draw out the system, its parts, and each of the tasks/mini-projects before getting started
My best work I've done between 5:30AM and 7:00AM on my home machine before I got ready for work. The code I have created there runs hundreds of websites and causes me less than 5 trouble tickets a year.
My home computer sits in a mud room full of boots and heavy coats where no one bothers me first thing in the morning. It's a littler cooler than the house. I drink tea and espresso. There is no phone, or IM, or anything too distracting (the occasional woodpecker on the gutters).
My home computer is from 2009, only the video-card is upgraded. I run Windows 7. I take a long time and tinker to figure out how things are going to work. No rush. I build logging and error handling first, then functionality. No users requests or specs from management. No influence on direction from management. Management gets (mostly) finished code. In every case so far they didn't know what I was doing and I presented the solution once I felt it was solid.
Somehow I get away with writing no documentation.
I target good. Perfect is truly the enemy of the good. I write code I can hand to juniors with a hour or two of explanation or that seniors can pick up and use and ask minimal questions. No rocket science. This has made it so I don't have to support developers, either.
My one mistake, or maybe, regret, is writing things for me then giving to my employer for free (I do take company time to integrate it into the stack). These solutions have made my professional life invaluably better, but I sometimes wonder if if there was money to be made. But then, I have enough money to live okay, so I'm not too worried about past opportunities lost.
I work as the only dev for a small manufacturing company.
I work alone, in a big quiet office with nice hardware, a comfortable desk and I get to choose all technical choices and set dev priorities.
My boss is ridiculously smart (hard science background) and trusts me to do what I’m good at while he does what he’s good at.
I work 9-5 every day.
It’s basically programmer heaven.
When programming I can do my best work with big 10-12 hour sprints when the mood strikes and maybe a couple in a row. Then there are days with meetings or days waiting for QA or other feedback where the right thing is literally to just go home for the day at lunch time.
My best environment is where I’m treated like an adult with responsibilities to deliver software and communicate when I have issues. My worst is one where I’m treated like a child that must show up at certain times and provide constant updates to the adults so they can be sure I’m working.
If you're told to build X, you might do it in a day, a week, or a month, many companies or managers wouldn't be able to tell what was appropriate. On the other hand, if you were told that you would receive Y percent of revenue of product X for the next three years, your incentives would totally change. You would be incentivized to work as efficiently as possible. More than just money, you would have an increased level of ownership in your own production, which would build confidence and value over the product you build.
As for a sense of ownership, not a problem when you're the only dev.
I own everything that isn't the windows server and desktops.
All the Linux servers, the network, the android terminals the production software, driver terminals etc are all my responsibility.
Note the word sense, clarifying is fine but why be needlessly pedantic.
OTOH, there are easy ways to increase the level of ownership for employees without tying it to compensation. That’s one of the ways I identify good managers from bad ones. The bad ones try very hard keep people focused on tasks the managers came up with. The good ones know how to get the employees to design the tasks, and then help the employees fit themselves into the solution so they have strong self-identity, all while making sure the right tasks are getting done.
The other one was for a larger company in a big open office.
It wasn't even a choice tbh I can't articulate how much I loathe open offices.
My situation isn't exactly as good, but it's getting there I'm hoping. The current job I have started out as part time so that I could work on my side project. This didn't work out but then I suddenly got more trust and freedom for doing things my own way, and now it's much better.
I far more regret the things I didn't do.
It's good they are rewarding trust earned with more trust, that's rare in a lot of work places.
What I've found out just in the last few years is that by making yourself valuable and then asking for what you really want will actually bring the thing to you (if it's reasonable). Preparing the question and paths forward for both outcomes is a way better strategy than losing hope and blowing up.
In those 5 weeks I’ve built the major part of the scalable distributed OLAP Cube that had proved to be very simple, robust and reliable and was still in use to support telemetry of over hundred of customers after 5 years.
The biggest distractions were a cat, incredibly beautiful rain showers, and warmest ever discussions at the dinner table.
Never had more productive study sessions in my life. 1 hour bike there (listening to lectures on my phone) + several hours studying at a picnic table, eating Thai food + 1 hour bike back (w/ audio lectures).
I think there's something special about the combination of being 1) in a small community, 2) relatively disconnected from rest of the world, 3) surrounded by natural beauty.
I've never been able to replicate that environment since. I've read a lot about summer shifts on the Antarctic bases--sounds idyllic for the same reasons as above.
It was just the three of us in a decent sized room and I feel that my work satisfaction and productivity was double what it was anywhere else in the open plan office space. There were very few distractions, but our office was open-door and just off a commonly used hallway so we weren’t hiding. We had enough space for a whiteboard and a 4th desk that we used for reviewing work together.
A few months later one of the managers saw what we’d done and decided he wanted it for his personal office. We went back to open plan :(
Tobias Funke, is that you?
Really didn’t value that place enough.
That said probably the companies that provoked my best work where ones that
1. I had a personal investment in
2. There were parts of what we worked on that I found intellectually interesting.
2. had small teams and we were not afraid to argue for days about how to do something, and arguments were clear.
3. technical people that worked together sat together.
The places I did my worst work
1. Hated the concept and what we were doing.
2. Just cashing a paycheck (I have also done good work just cashing a paycheck so not sure how important it is)
3. Even if the teams were small the tasks the team handled were split up in such a way that nobody really had any input on anybody else's area.
4. Argument just did not make any headway on anything. If someone had more power in an area you let them have their way because it was a waste of time saying anything.
5. if you sat with the people you worked with it was almost an afterthought.
Software engineers somewhat involved with most relevant business decisions. We are empowered to respectfully question decisions.
- open office - impossible to concentrate.
- constant pair programming - ughhh
- I have a family and friends outside of work. I’ve gone out of my way not to mix my work life and personal life. I have no desire to “play games” and “watch movies” with my coworkers. I come to work to work. I have friends who are former coworkers.
- regular lunches together - again, my lunch time is my time to get away from the office and recharge.
It's just work.
That sounds horrible. Even if half of the people have something to say, that's about 15 seconds per person. Beyond saying, hi, I'm here, I'm not sure what else can be accomplished. It sounds more like a daily pep talk by the leaders to the whole company.
Pairing removes many barriers to development:
* built-in code review
* knowledge sharing: removes silos
* helps avoids overengineering (few pairs have the same overengineering idea, so you tend to settle on a decent un-overengineered solution)
TDD, which I'm not fully convinced on, acts a clock for pairs: one person writes a test, one person writes the implementation, flip roles, repeat.
Other XP practices: everyone works at HEAD, deploys from HEAD, retrospectives.
Small features went from discussing with customer, to writing the implementation, tests, monitoring, and deploying it in half a day.
The disadvantages of ~full pairing: remote is harder to support, I missed getting into flow, fixed working hours.
- code reviews as part of a pull request system
- knowledge sharing - design sessions for features to make sure nothing was missed and architectural overviews with wiki documentation.
- avoid overengineering - again architectural “previews”.
In particular, PRs and design sessions were/are a context switch which add friction. Even when pairing, however, we'd occasionally have team-wide design sessions, depending on the problem.
The pair is a collaboration. They develop together.
> Do you really need someone over your shoulder to make sure you can turn requirements into code?
I listed numerous advantages (and some disadvantages), none of which implied pairing was necessary. I'm merely answering OP's question on which environment has enabled my best work.
I'm not advocating pairing (I'm no longer in a pairing team), not even saying it's the environment that will enable the best work for other people. Our hiring process included a pair programming task to try to gauge how well that person would work in a pairing team, though it's also something you get better with in time.
I have no problem with collaboration - ie I’m working side by side war room style with one person doing the front end, the other doing the back end, the QA person testing, etc.
Do you really need to pair to write yet another software as a service CRUD app?
Note the reference to frequently committing to HEAD. That's not an accident, it encourages everyone to rebase frequently, keep changes small and to surface problems almost immediately. Whereas PRs quickly go stale and it turns into a game to try and get your PR in first.
Little's Law is instructive. There are two ways to increase throughput in a system. One is to reduce latency. The other is to increase in-process inventory. They have very different dynamics.
Or putting it in production terms, the number of people coming up with ideas for the iPhone in Cupertino is dwarfed by the number of people building them in China.
Is your argument that I don't know how pairing works? Because my estimate is that I have around 8,000 hours practicing it at this point, which I suspect may be 8,000 hours or so more than your own professional pairing experience. It's possible that I've been sleep-walking through the whole thing, but unlikely. One of the dozens of intelligent, helpful people I've worked with would've pointed it out.
You think you are, but you've never tested this thought and scoff at the idea that you could be wrong, despite being told from experienced people who have tested it that you are wrong?
Is your argument seriously "I've never done it, but it doesn't work" to someone saying "I've done lots of it and it works well"?
"That sounds stupid, but they claim it's good, so I'll try it and see if I can learn anything".
"look at my credentials, don't question me, this other person can't know anything I don't, how dare anyone suggest I can learn anything from anyone else, don't you know who I am? Also they're a n00b."
I think what you're reading is me saying "it's impossible to write good code without a pair", which (a) isn't true and (b) isn't what I said.
What I'm reading is that you say pairing is strictly less effective than soloing, which (a) isn't true and (b) isn't true.
If we were talking about professionally programming in assembly language, I would take your views seriously because of your relevant experience in that matter. In doing so I might not agree and I would very likely be wrong, but I would acknowledge your expertise on that topic.
What I ask is the same courtesy when it comes to pairing.
Like I said above, most problems that developers are working on everyday isn’t some complex algorithm it’s translating business requirements to code.
Collaboration is often definitely better than developing solo but it isn’t “pair programming”. But developing solo can be faster. The more developers you add to a feature, the more communication and coordination overhead you have (The Mythical Man Month a book written in the 60s). Honestly, we’ve found that three people working on three separate features solo can get more done than three people working on the same feature over the same amount of time. Again we make it a point to switch up so we can see the whole picture.
When the product owner comes in and realizes we didn’t consider something, it’s almost always faster to have that one person who knows how the change will affect the whole stack - UI/Back end/database/deployment, infrastructure requirements than to have five people trying to coordinate the change.
Collobaration can mean “war rooming” or “swarming”.
War rooming for example is getting your back end and front end developer together in a room along with your QA person, your Devops, and your product owner working on their piece of the feature, rapidly iterating.
I work on a team where each developer can easily go back and forth between the three languages we use (JS/C#/Python), front end development in React, database design, Devops with CloudFormation, CodeBuild, Code Deploy and Code Pipeline sometime we will split up the parts. Other times one person will do a quick design session, do the whole stack, do a post review along with design docs in MarkDown.
If you have well rounded developers, they will often switch roles on the next feature just to have knowledge and a different perspective.
I prefer less ceremony, remote when I like, no open office, etc etc
> ...to respectfully...
> ... question decisions.
Uh, that's empowerment? The right to ask "respectful" questions about decisions that are already made? As everyone else is already pointing out, what you know may be separate from what you (want to) believe.
What do you mean, 'As everyone else is already pointing out, what you know may be separate from what you (want to) believe.'?
- <80 person team (total); ~60% engineers
- 0 product managers: design and engineering are equally empowered to make the site nice within general business/product definitions defined by GM who would constantly get excited about the work you showed her, making you feel good about yourself and your work
- 0 project managers: business understands that there is no magic formula for delivering products that haven't been built yet and so long as we try our best to hit dates and cut scope as needed, it's on us to track our progress and determine priorities
- gm, cto, and head of hr all supportive of growing team and individual members in a non-political way
- politically-driven employees (typically a head of sales or marketing) shut down and churn out quickly
- engineers talk directly with customer service
- engineers perform rounds helping out in support forums
- domain specialists, but no fences. i might be a web engineer, but if there's a sql query i feel compelled to optimize, nobody is going to stop me.
- company regularly interacts with, and hosts local events for, an engaged user base. engineers actually end up having in person conversations with our users, gathering honest feedback for improvements while simultaneously being told how great the product they contribute to is overall
- relaxed hours ("you're an adult; we trust you to get your work done")
- when dining out or getting drinks, even paying by cash a large group is able to come up with the right amount of money, with no one person needing to chip in more than necessary
- anyone in the company can deploy the site with a single chat room command
Management and middlemen can as much help velocity as they can hurt it. More hands doesn't always mean faster work ¯\_(ツ)_/¯
If you have people under you, or can coach your people to take parts of your responsibilities off you, I think that's a great outcome. If your ICs are so good that they can actually do that, you should give them a raise and be glad you get to focus on other things in the meanwhile.
Of course, if the manager is unable to then broader their own scope, they indeed become disposable.
We recently spent quite a while on developing a feature only to find out the customer didn’t actually want it.
At pretty much every other company I've ever worked at, I've always felt that if I inconvenienced the company at all, it basically wasn't going to happen unless I brought a strong business case. Company always came first. Conversely here, I feel like it's a balance. If I want to do X, my manager / others will make an effort to find a business need that matches that. There's a very generous (paid) maternity leave policy.
When you like your manager and you feel like your interests are aligned with the company's, and you feel like it's a little more relational, that's when I do my best work. I've been looking for this for a long time, and I'm thrilled to be here.
What's so great about this PM? (I won't try to generalize, I'm too inexperienced for generalizations)
- he doesn't code, yet he listens to our expertise and act on it
- he doesn't half-ass features, he takes the time to reach out to customers and prototype
- he shields us from upper management
- he respects our time, and actively prevent outside interruptions
- he is careful about when we get blocked/slower, yet he doesn't try to micro-manage
- he doesn't balk away from the boring and ungrateful work
Despite having no say in his recruitment, I am glad my company decided to get him on-board (despite no previous formal PM job)
When there is enough space that some one else's conversations did not cut through my headphones which do not play music by just cancel noise.
When what is the problem is articulated well (I do not mean details for a task, I am ok with a problem with no known solution but there needs to be a common articulation of success..)
When my co-workers are emotionally secure enough to have a discussion where any and every idea is open for a challenge. I hate to say this but "disagree but commit" is a good mantra as long as "disagreement" is not used against you, actively or passively. I burn more energy navigating my path around egg shells and consequently have less for what I need to do.
Project is managed mostly through airtable with quarterly goals with weekly’s and daily’s (not standup) to check on progress. Then we have a company/team wide call every tues for the weekly brief.
All the above enabled me to have the best environment by then investing in my home office. A space that has a good desk (multitable sit/stand), chair (aeron), and good lighting, not to mention a beautiful machine (iMac Pro).
The issues that followed were more of the focus issues when doing work at home, so I got a pomodoro clock which then made everything seamless.
I can chose what I work on for the day, week, month, or Quarter. I have my work area, but within that I have 100% freedom to figure out what I need to do- the only thing I need to do is to be able to justify it. I can select the tickets I want to work on, areas to improve, initiatives to take up, or software to build.
Also, the core business drive of measuring and qualitating your work. So, you can see the impact you are having on the business (positive or negative- NOT in a way that affects your job, but in a way that you can say "I did X which made Y faster, causing a 3% growth in click-though rates).
But I do wish I had a more private workplace. Hexes are better then the nightmare of open offices, and I work on a quiet floor, but sometimes I wish I had a door I could close.
“Every person in your company is a vector. Your progress is determined by the sum of all vectors.” — Elon Musk
I also have a great deal of influence over my hobby horses - infrastructure (AWS) and Devops.
I'm still owed $14k for my work, which I'll probably never see, but I'm proud of the work I did. It gave me something to talk about in interviews and probably made me more money than I'm owed.
- those who like open office can sit together, but for the rest, provide a semi-isolated quiet/dark area to concentrate in and a whiteboard.
- plenty of conference rooms.
- if expecting to work with new tech/framework, allow
reasonable time to learn during work hours.
- allow time for documenting
- allocate time for fixing tech debt every sprint
- provide training on the product being built
- give good insight into product decisions
- if unexpected work has to be added mid-sprint, pull something else out!
- acknowledged that when someone worked all weekend to finish something that they get a bonus day off some other time
- keep process meetings to minimum
- when a developer brings up a security flaw, take him/her seriously
This environment requires that both participants have plenty of humility, openness, and patience, but when it works, it can be priceless.
MPJ has a long, but relevant video on this:
1) condensed higher intensity blocks followed by larger breaks
2) distinct "seasons" of work that differ in projects/pace
At the micro (day-to-day) level:
3) no logging of hours
#1 and #2 are a product of the academic calendar. I find the regular 9-to-5 work week paradoxically draining. I'll trade a good chunk of my weekends and evenings for longer breaks between "ON" periods.
As for #3, one company I worked for simply trusted that you'd put in your 40 hours a week. It was more flexible and quite simply freeing. If I were in a good flow state I might work late to finish up a feature, then sleep in the next morning (provided there were no meetings). All without the tedium of counting quarter-hours.
Really you just need fewer barriers to doing work, and to make it easier to find and publish information. A group consensus or product owner can decide if work gets merged or refactored.
Not much beyond that, except that my users had a clear need, and I was given time to do the work. Had a private office, but that mattered little.
My moral: Sometimes you really can make lemonade out of lemons. Maybe the torrent of shit raining down on you is a gift sometimes.
The end result is I am extremely happy in my work hours and arrangement as long as I don’t have early morning doctor appointments or something.
Ever since I saw that video, I've worked hard to (1) make sure others aren't negatively affected by my schedule (2) accept that until something brings me back to a 24-hour cycle, I have to persisently keep working on (1). Every other week I will go to bed at 10pm with my wife and wake up naturally at 5am and she'll have a great day being coordinated with my schedule. But within a week I'll be going to bed at 6am and waking up at 12-2pm. Every month or so I will stay up 30-36hrs without even trying.
None of this is due to bad habits, lack of sunlight, or lack of exercise etc. Doesn't matter what I do or don't do, my body just doesn't live in a 24-hour world. So I've learned to let it do its thing and work/sleep/eat/play when I feel like. Never been happier.
Also: a great manager who advocates for my product and career and shields me from politics.
Worth noting all these practices can be done remotely too https://cucumber.io/blog/2018/06/20/inclusive-benefits-of-mo...
Also notable what was absent. No synchronous blocking code reviews. No branching at all, just continuous deployment of small, safe changes. No need for standups or design meetings when mobbing. Estimates unnecessary when teams become good at slicing things small.
What has worked for me to facilitate my best work is to reserve a meeting room to myself for one or two hour slots during the week. This allows me to close the door, put my back to the window and get focused. What's great about this is this limits visual distractions, restricts uninvited visitors, and reduces auditory distractions (I will usually wear headphones and listen to non-lyric music).
Often I find that I will get more work done in this period of time than I would if I was sitting at my desk.
The new team however is a place which prides itself in having the "startup culture". It's in a different building and it has TT and foosball tables (pretty much never free) right next to our work desks which are like places where everybody sits everywhere and I literally had to fight with people to ensure that my "spot" remains "my" spot. People start coming at 11-130am and keep leaving till 11pm - 12pm and you are often expected to stay back if there's "dependency" and if you start pulling a 10-6 you are literally looked down upon. This team loves to talk about working like this. Productivity is hitting rock bottom. I know it turned into a rant but that's how I feel. Yes, I am interviewing but only at MNCs :|
Agile definitely feels better than waterfall, but it's also made me appreciate why it goes wrong so easily. You have to be willing to experiment with your process often, and retros have to have the ability to get brutal if things aren't working.
Regular releases (every two weeks or so) are important. They help to reduce scope creep and get you faster feedback. The trick is tweaking what a 'release' is. Having the ability to do targeted, beta or pilot releases helps you get things out more quickly without scaring the rest of your users or screwing up of there are bugs.
Pairing is useful, but there is a tendency in our team to say 'oh, there's not many cards left in the current release, let me pair with you'. That's just wasting time. Pairing should only be for knowledge sharing or speeding up difficult code.
Slicing tasks is very hard. I think it's better if they're sliced vertically (implementing a feature end to end) as opposed to horizontally (you write the react, I'll write the API, and we'll meet in the middle). Horizontal slicing leads to knowledge slios, implementation mix-ups and can also lead to very small cards which means you're constantly context switching.
Mmm-mmm. We grew past that, but that was the dream. Just sitting around a table building product with great visibility into the customer's experience. Gold.
- No Slack for non remote
Slack is cool, but I remember thinking that if I needed to talk to someone, it's over email or in-person. This really encouraged face to face or email conversation. There was also Skype for remote workers, but if you're not doing remote, you could kill Slack. Now that I think about it, Slack is more of a vitamin than a pain killer for non-remote organizations. Slack is great for remote though and love it.
- No Agile
Ah, I remember when I had my first job using Agile. It was cool the first few weeks and that was it. Again, it's not a pain killer, it's a vitamin. I had the best time ever just sitting in meetings on Tuesday mornings to demo everything in person then do code review with my CTO after. Talk with the whole team including marketing on what we'd work on. I loved it. No agile, was completely in the know and performing.
- Support with Tools
It sucks not having the right tools to do the job. Receiving the appropriate hardware, desk, and software has always been useful and makes me happy to come into the office. It really sucks when you wake up, look at your amazing at home desk, then go to a lousy work desk. Bling out the work desk. You can do anything from getting a top end work computer, a great monitor, an eGPU (may actually save a company money from AWS bills), a DAC/AMP (cause devs usually have a thing for headphones and the budget for great ones), or a desk goes up and down and has memory settings and it's fast.
- Minimum Friction
If you get told you need to change up your landing page, change up the tooling, or do a big refactor on something, always take it seriously. Some people marry a concept or an ideal and it can often cause friction between the team. Giving up the consistency and letting others use what best let's them get their job done should be given time and thought. All in all: be fluid with company practices and not letting a "mono-culture" take root is usually best.
My best experiences have been when a single employee can happily recommend a new way that could radically change the initial experience of a customer or a company culture. The fluidity maximized sales and development.
- Wrap up
We have so much now with tools that can be categorized as pain killer or vitamin. My best recommendation is to have less vitamins and more pain killers.
Note: This is just me though. I know a lot of other people have different ways they prefer to work. This is just me.
I know I'm discussing Scotsmen here, but: what about this is not agile?
• Agile as a set of values
• Agile as a set of practices
• Agile as a faddish silver bullet marketed to people who don’t know any better
I assume OP is thinking mainly of the latter two. It sounds like their business avoided formal standups and sprint planning, and didn’t generally care about Agile/Scrum etc. buzzwords. But I tend to agree with you that from a values perspective that seems perfectly Agile.
Agile has a dirty name now, but it's well-deserved, because most folks have had legitimately terrible experiences with stuff sailing under that banner.
I've had a legitimately awesome experience and I can't really use a different word, because it either creates confusion or sounds like sneaky wordplay and/or self-marketing hoopla.
I had a job where, due to the technology, I could not TDD. There was no sane way to version control. No CI/CD, changes had to be made in dev and then copied & pasted into prod. Before that I was in a job with pairing, TDD, CI/CD and an avowed commitment to agile.
Of the two, the ostensibly-not-agile was more agile, because it hewed closer to the values of talking to people and focusing on doing the most valuable thing first. I would work on projects by myself. When I wanted to learn more about my customers, I walked across the campus and talked to them. If I had something I wanted them to give their opinion on, I would ring them and tell them to take a look.
At the ostensibly-agile job we had a manager who talked to a middleman who talked to a board of directors who heard from a line manager who talked to his employees. It didn't matter how well we did the inner loop, because a lot of the time we just produced beautifully-engineered diversions.
It was the most productive I've ever been. The code I wrote was mostly garbage, but I got my reps in that summer and learned how to program.
I don’t get micromanaged but have clear goals that are set forth.
The only problem I’ve faced is occasionally unclear communication with other coworkers; mostly because I’m still getting used to some of the jargon and need to phrase my questions correctly.
Some coworkers use English as a second language too, so that can be a slight barrier; fortunately my experience as a language teacher helps me in that regard.
Overall I’ve been learning a lot and I can see myself working with this company for a few years at least.
Unfortunately he had too much of a "if we build it, they will come" mentality that infects way too many people in charge, and didn't put enough of an effort into marketing, or making sure we were working on a project that consumers wanted in the first place, so the games fell with a thud when they hit the market, but I was able to focus on making and learning, and I learned a tooooon in that period of time.
I haven't worked in a similar environment since. Big open spaces, lots of people and distractions, lots of people constantly wanting status updates, not much time to focus and really get work done, let alone learn anything.
Like at my current job, it's slowly gotten so bad that right now I have 3-4 hours of status updates most days (1 for devs, 1 for our department, 1 for our business unit, 1 for our data center, 1 for a specific upgrade project we've had for the past several months, and each lasts at least 30 minutes, usually longer) along with other meetings so my work day doesn't really begin until 3pm most days (and there's been multiple days when I was stuck on a phone until 10pm or later), and I'm still expected to make progress on four different projects and manage offshore developers and get development work done (that the offshore devs can't do) on top of all that. Things are slipping even with me working into the evening and a bit on weekends and those meetings are just drowning me, but I'm the only person in the department that has the domain knowledge they need (anymore, everyone else has left or transferred to another department) and they're stretching me beyond thin.
My own boss resigned because of this nonsense. He was the one that used to be able to shield me from this, and his replacement has just increased the amount of meetings I have to attend with his gung-ho, "fix all the problems this department has ever had" now attitude.
I really need to find another job.
People with multidisciplinary skill sets
Access to agile contractors when a burst of effort is needed
Good reach and visibility within the organization
As for team dynamics it was my first job. The cheapos would hire only very junior engineers. This meant terrible code quality but a young team eagar to make the jump in our careers. We learned a lot from each other and many of us are still in communication 10 years later. Despite being scattered across the country.
Best environment is the polar opposite of that.
Innovation comes from the bottom more frequently than the top, and given time to understand a problem and stew on what is really needed there are rare engineers who can drive the very best work. If the environment stymies that then all is lost, they and others will leave.
My best work has been in the context of supportive, light-touch leadership, high autonomy teams, the ability to really own a problem.
Great discussion, but try not to reorg your workplace based on the data driven from such small and likely biased (hn readers are not randomly selected, etc.) sample.
Open communication is always key. It should feel like a family. The manager/lead needs to be strong, decisive, and protect their people from all the politics.
Learning should always be an opportunity. Engineers should feel safe taking risks and making mistakes.
My experience programming for myself: https://www.youtube.com/watch?v=-8aHsJdMEMY
My experience with agile/scrum: https://www.youtube.com/watch?v=N9-7uLg-DZU
We were on throughout the day. There were no formal meetings. Just a long stream of discussion on the future, and everyone was always synced on what to do.
Nobody bugged or interrupted each other unless it was really important and they had to drop everything.
It’s incredibly productive for me but I’m lucky that I enjoy programming enough to rarely get distracted by my picturesque surroundings during the day.