Well said! I haven't met a single software engineer who hasn't described something similar to me. I'm the same, I like to wake up early, enjoy my first coffee and then I feel the most productive for the first 4 hours of the day. In those first 4 hours in my morning, often exactly between 8 and 12 I get a shitload of work done. I get so much done that it feels like a real milestone every day. The feeling of being contend afterwards makes it really hard to get into the same focused mindset back again after lunch. After I had my lunch meal I often spend no more than 1-2 hours just doing minor post-real-work tasks, email replies, etc. before mentally signing off completely and calling it a day.
Asking a software engineer to work a certain number of hours per week is useless. It's better to agree on a certain scope of work that one would like to see get done and then let them off the hook as soon as it's done. Some people can do a 3 day burst of 8 hours, but then are so destroyed on a Thursday or Friday that they won't get ANY work done. Others like me are productive every day, but only for ~4-5 hours. Either way, only a fool will think that they will get more out of an SE than they are actually able to focus on. They will just say that something took longer, a bug was holding them back or whatever.
Moreover, the salaries which SE get are so high that an employer isn't paying for the time anyway. They pay for the skill which is being applied during that time, so what's the point in making them commit a certain amount of time. Absolutely useless... well... hopefully one day things will change..
Software is probably quite close in intensity to pure math, so I don't see anything wrong with this!
The 8 hour workday makes no sense outside agriculture and industry. And even here, due to automation, people should be spared from such a long day anyway.
I work in higher education, and it's exactly the same experience for me. 4-5 hours of productivity a day, at best, and 2-3 hours of just generally wasting time and trying to look busy/meetings/e-mails.
The same time that the product managers, project managers, portfolio owners, program managers, and stakeholders fill with hour-long "standup" meetings?
I’ll be in the flow all morning, but once I have an hour long standup meeting (or similar scattered topic based meeting) I struggle to regain focus for the rest of the day.
[edit, cleared up who this is targeted at]
When I drink too much coffee, it makes alcohol that much more necessary to offset the extra stress and anxiety, but black tea does not have this issue, it just kinda fades away for me. Then a little cannabis at night for a bit of pleasure and sleep promotion.
https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-pr...
https://www.kalzumeus.com/2012/01/23/salary-negotiation/
The problem is most of us do not market our skills and the value we can provide. We market ourselves as being available to be handed tasks to toil on for forty hours a week.
Figuring out the value we provide, and how to explain and market that value, is hard work and higher risk, though, so many of us take the safe and easy route of a full time job sitting behind a desk for forty hours, whether or not we can fill those hours productively.
I guess I'm just trying to point out that I think this isn;t exclusive to software jobs, but it's the same trend for any mental labour job.
Getting into, and staying in, a state of flow requires a high cognitive workload, and getting back into it once you're kicked out is almost impossible some days. It often takes me at least 30 minutes to get back into that state, if at all. I think our society needs to re-think how we spend our time at work,but unfortunately that'll require government regulation, unless companies that are bold enough to switch to a 6 hour workday actual start making more money than their competitors.
Flow is one of those things that I think is related to interest in the task at hand but is also, as you point out, difficult to recover once disturbed. It's also highly unpredictable. The 2-3 hours I spend productively might not be in a continuous block but also the time spent giving the appearance of productivity makes it harder to (re)enter flow. If work was structured such that you could work when productive and take care of life admin when not, rather than a discrete chunk of time every day, I feel like it would significantly improve mentally demanding labour.
Ultimately I'd like to see everyone work less [0] for which I think the driving force has to be regulation (companies demanding these hours are just more-or-less rational actors in the system), the productivity gains are there but we seem to be busier than ever - we've thereby created new fields of work (TaskRabbit, Deliveroo, etc) for people to work in, but at little benefit to people or society.
The company culture has sort of spotted the correlation and we're more or less free to do what we want at work. There's just enough pressure to not spend the day on DoTA and social media, which is probably the optimum pressure. Some of the team goes for two tea breaks a day. Some go for long prayer breaks. Some sleep at their desks.
The CTO doesn't use agile; we just tell each other what we want, and poll them on it after 2-3 days if it's not urgent, or the CTO just reads git commits to watch progress.
We still go to work 8.5 hours a day, because it's in the contract, but it's quite relaxing. Best job I've had so far.
A reasonable measure of what it takes to stay current and relevant in this industry is twenty hours of dedicated reinvestment per week. Often times this reinvestment time is not afforded at work and as much as employers want to provide this as a benefit to developers, few offer the resources or time to allow developers to get anywhere close at work alone. Therefore, that time is likely your sole responsibility at home.
If you're like most developers you should be budgeting four hours each day M-F (or three if you include the weekend). I know many that push for even more.
Since our jobs tend to be sedentary and it's probably helpful to budget at least an hour for the gym a day to help mitigate the severe health effects of working a desk job, don't forget to factor time at the gym in your scheduling. Also, if you're like many developers I know you're likely on call and answering e-mails at home as well which is easy to forget about when calculating available time.
This then quickly becomes a challenging schedule even for eight hour days. Those selecting ten hour days are probably not reinvesting as much as they should and will potentially burn out or become irrelevant in the long term. I've attempted a sustained schedule of 12 hour work days with 4 hour reinvestment and an hour at the gym and found it unworkable in the long term.
For most people, a job is something where you are hired to do a specific task for a specific wage, using specific skills that you learn once and then apply many times. "Make this button green." "Move the navbar 20px to the right." "When this button is clicked, send off an RPC to the server, and when it's complete, update the table with the relevant data."
These types of tasks lend themselves well to an "instruction manual" approach to skill acquisition: you read the manual, you apply it to your job, you memorize the parts that you use frequently, and you're done. Once you know everything in the manual, there's little point in studying further, because you know everything in the manual.
A smaller (but growing) minority of jobs require you to solve a vaguely-defined problem, where there is no manual because nobody's solved it before, and often times the problem hasn't even been posed in a tangible form. "Find out who wrote everything on the web." "Evaluate whether we should invest $5M into this venture capital fund." "Identify our next billion-dollar business." "Make cryptocurrency useful."
These jobs lend themselves to a "toolbox" approach. There is no manual, but if you have a wide enough breadth of experience, you've picked up a large variety of tools that you might be able to apply to the problem. So if you're tasked with figuring out who wrote what on the web, one approach might be ask the authors by having them add HTML markup, and then parsing and following that. Another approach might be to identify author bylines through machine-learning and then cross-reference them with a database of peoples' names that appear on the web. A third approach might be to identify pictures next to the byline and run facial recognition on them. You don't know which approach will be most useful until you're given the problem and actually try a few, but the bigger your toolbox, the more likely you are to find one that works.
The financial returns to these types of jobs tend to scale exponentially with their complexity, because the number of people who can solve them decreases exponentially. That's why it's beneficial to have as big a toolbox as you possibly can if you want to play in these markets.
An example is if you work in any service industry. You don't have to think much, you just do when things need to be done. There's a lot of repetition so you just do without thinking. Or in an office job there's generally a set of tasks that you get done and this very clear path of how to do these things. I do think more time generally leads to more output for these jobs (maybe not in service if we're adding more time into the times of day when there isn't a demand for service, but I think everyone gets the point).
In my last job I worked as a researcher and I'm now in grad school. I feel like for the most part I accomplish way more when I'm not tied to a clock (I still like deadlines and think they are beneficial). But some days are just worthless. Some days 10hrs is nothing and I've forgotten to eat. But most days I'm productive in the morning then do other things mid day, be productive again, hang out with friends, then do research at night. These breaks help me end up getting a lot done. The problem I'm working on is far away (though I'm positive some part of my mind is working on it in the background). But as soon as I'm tied to a clock I feel like I get less done. In those moments where I'm drained I end up just looking busy or do something like browse HN. The thing is that these actions don't allow me to recover, so it's harder to get back to work and be as productive as I was in the morning.
I think that's the trick here. Recovery. In mentally demanding jobs we don't consider rest. It'd be like working heavy duty construction all day every day. It's not sustainable. Or asking pro athletes to train at their max every day. Recovery is an essential part of training and being effective. I think you can train to get more hours of productivity in a day, but as long as we don't actually rest that will never happen because we don't recover.
But idk. Do others feel this way? Often I feel like many don't, but maybe people are just looking busy and we're caught in a feedback loop.
1. Machine Learning 2. Practical Software Development Tools and Techniques 3. Computer Science Fundamentals 4. Design 5. Marketing 6. Business Fundamentals 7. Strategy 8. Communication
I believe all of these are elemental to being a successful software developer in 2019. Machine learning is eating conventional software development from the inside out and conventional software development will eventually be mostly obsolete. Like many developers, I'm transitioning to this field to stay ahead of these upcoming changes.
Our jobs as software developers (and increasingly machine learning engineers and data scientists) demand superior communication skills and reasoning. Since the ultimate goal of most software today is to be sold for a profit an impactful area of study is business and marketing. Understanding how to structure software to best serve business goals means understanding the ecosystem that the creation lives in. Finally, the ultimate consumers of software and machine learning models are rarely technical and solid design skills are a good complement to a solid technical foundation.
Staying current and moving ahead in all of these areas of study takes at least four hours a day.
I wish you nothing but success and hope your plan works out for you.
As a side note, the phrase that machine learning is eating conventional software development might sound cringeworthy given how ML/AI is commonly portrayed by the media but it's the same description provided by Kunle Olukotun at NeurIPS (I was there when he delivered that talk).
Anyone who claims to be current and moving ahead in all 8 of those areas would immediately set off red flags and signal to me that they definitely aren't current in all those areas.
To offer some background, on the machine learning side I've built and deployed over one hundred models using nearly every major machine learning technique available today. To stay sharp I actively compete in Kaggle and other competitions (and have won a few small competitions) and have attended over six large ML conferences over the past two years. I actively read through every major published book on machine learning and nearly an entire bookshelf dedicated to the practice. These books, as well as MOOCs contribute to the majority of my reinvestment time on this side. I turn around and directly apply this information to competitions and paid projects to help it stick. I also read through as many ML papers as I can budget time for. Arxiv Sanity Preserver is a great resource here (http://www.arxiv-sanity.com/).
On the software development side I've built and deployed over a hundred websites products and services in half a dozen languages over the last twenty years for clients or my own business. I subscribe to a litany of aggregators over python, c#, and javascript news and use that information to identify trends to focus on for the practical side. Outside of side projects to gain practice these skills I also use pluralsight, developer conferences, and (less frequently now) books to stay current on this side - which contribute to time against this daily.
On the computer science side I have a large collection of classic books I'm working through and rereading. Everything from the Intro to Algorithms to SICP. I'm currently on my second pass through MIT's 6.006 and 6.851. Much love for Erik Demaine. I own a collection of CS puzzle books including Cracking the Coding Interview and my wife tortures me weekly with dynamic programming puzzles on a whiteboard we have to keep sharp. Similarly, I also tackle LC and HR puzzles on a weekly basis.
On the marketing side I've managed a significant of marketing spend for clients and my own projects through every major marketing platform except facebook. Through this I've developed a skillset around split and multivariate testing. I've also run literally hundreds of marketing experiments to gain experience and understanding. I actively manage paid and organic marketing efforts for an array of projects which provides an additional impetus to stay current. To that end, I subscribe to a number of marketing news aggregators and I'm reading through every major marketing classic I can find. I've had more trouble finding good information on this side compared to other areas.
On the design side I'm currently taking courses through Kadenze and own every a large collection of design classics that I've been reading through. Everything from universal principles of design (strongly recommend) to the design of everyday things. Beyond thoughtful practical application of these skills in hundreds of websites and apps I've also exhibited artwork.
It's a similar story for the remaining areas. Mostly paid courses, conferences, and classic textbooks (I budget about 20k a year for these resources). I also use Anki for remembering important concepts.
I've been at this (reinvesting continuously in all of these areas) for over ten years and averaging 15-20 hours per week of dedicated reinvestment with nearly no breaks for at least the past three years.
C-level executive? Having your own start up? Retire early? Researcher who goes to a lot of conferences and applies state of the art techniques to solve problems?
Sounds like most of the things you are working on are just making you a more efficient cog in large organizations. But in terms of compensation, sounds like the skills you are pursuing will have diminishing returns for increasing your compensation, with out a clear goal and road map for where you want to end up.
TBH, if you said all this to me in an interview or cover email, I'd pass you over and maybe keep your email so I could show it to people at the pub after work for a laugh. I'm not trying to be mean, but maybe you're so deep in this that you haven't heard how it might be perceived?
You may think this is due to some buried jealousy at your ability to keep this up, but I promise you it's not. I'm thankful for the time I spent all day/night learning what I know, but I'm thankful for it because it lets me not spend the rest of my life in that cycle.
Or are you doing this to maximize earning potential? If so, to me (maybe not to you) that's wasted time, unless you're banking over (arbitrary figure) something like $750,000 or more yearly.
This is not my phrasing but as someone that's deployed several models in production that have replaced existing conventionally written and maintained areas of code I believe it.
The significance is the ability for machine learning to displace traditional software development is small but growing and there's no real practical limit.
A lot of people do feel bad if they waste their days just looking at Youtube or social media all night after work - I think a lot of people feel the guilt after the fact but never work to execute on it because its so easy to procrastinate/skip small commitments of studying.
When I was at a shitty job I hated that meant most of that study time went to side hustles and learning the local language to build my CV, but now that I'm free and in a good job it mostly goes toward trying out completely unconnected things like Piano or Chinese - as long as it's productive I'm fine. Playing around in new things that interest you half for fun is the best approach to not burn out I think.
You're quite correct that ephemeral and arbitrary arcana makes up a HUGE portion of current applied knowledge in the software field.
But if I could study 8+ hours a day over decades, I'm willing to bet I couldn't exhaust the limits of language/platform independent applicable computer science and mathematics that's presently available, let alone keep up with any new developments. And that's before getting into domain-dependent specific issues and practices.
Despite switching jobs a year ago to an 8.45 - 5.30 schedule I'm now so burnt out I'm taking 4 months out and will probably try to change fields. Software is well renumerated but it's a gilded cage, I am under no illusions other people are better off or other jobs are without stress, but trying to be a good programmer has reduced me mentally and physically to the point I can't face the thought of working.
If your current job isn't keeping your skills up to date, you need to switch ASAP. But even if it's not and you can't switch... jesus, it doesn't take 20hr/week to learn some new stuff
Your proposed alternative solutions to switch jobs or apply current skills at work (I'm assuming new skills or understanding) are common solutions used by many developers but ultimately have significant detrimental effects on companies both from very high industry churn rates as well as unnecessary application of new technologies by unskilled and inexperienced practitioners. These are as ubiquitous as they are bad and from a principled perspective I refuse to use them.
Which industry is that exactly? Because it's sure not mine, and I'm a software engineer, which I thought was the default assumption here.
I don't cast any judgement over developers not choosing to reinvest. I also think it's critical to know your limits and stay within them. I've been burned out several times throughout my career and know where my limits are.
I am however very certain that this industry rewards continued learning and with the right mindset it's very rewarding both in the short and long term.
The question is, why would you want to? I don't spend any time at all staying current on my own time. I stay current on my employer's time. That's part of what they pay me for. If they don't want to pay for it, then I'm finding a new employer.
Furthermore, I just have no idea where you come up with 20 hours per week. The kind of software I write just doesn't change anywhere near that fast, and I'm doing cutting-edge R&D! When I need to learn a new thing to do my job effectively, I go do research and learn whatever I need to. I don't, and see absolutely no reason to actively seek out new things to learn that I have no immediate plan to actually use.
Have you really? I've worked for years, and I'm not sure I've met anyone fitting this description.
That's insane - do we have statistics on people who do that?
Once my work in a sprint is done my anxiety increases because now I don't know what to do and I'm considered lazy if I can't come up with some fascinating thing to produce. That's the most mentally draining aspect for me.
Building a team and helping individuals grow is so much more than "maximizing" (not really) every minute of the work day.
They will think about it on the way to work. They will think about it during breaks. They will think about it while appearing to wander aimlessly around the building.
They will think about it on the way home. They will think about it while they're at home, they will think about it in the shower, they will think about while eating or doing something else, and they will think about while they're asleep.
It will take them at least two weeks of actual undistracted full-time down-time to stop thinking about it.
But you can also make them stop thinking about it by piling on distractions - hiring sessions, meetings of all kinds, absolutely critical company events that aren't, and so on.
And you can also make them stop thinking about it by giving them too much to do. Most people have enough mental space for one, maybe two, problem tracks. Giving them more - especially with limited context switching time - and you'll make it impossible for them to solve any of them.
You're not running a physical production line. The typing and the code changes are the output of a complex and surprisingly fragile mental process. If you don't understand how the process works, you're wasting a lot of its potential value.
Not only will people be unhappy, but the quality of their work will suck too.
I have, for a long time, been very opposed to single point estimates, especially when those estimates are going to be interpreted like this. For any task that has any kind of uncertainty to it, there’s a range of time for how long it’s going to take. If you take longer than your single point estimate, you’re going to be punished for it in some way (work late, etc). If you take less time than your single point estimate, you’re going to be... punished for it?
What I’ve settled on in my consultancy work is doing 3-point PERT-style estimates. If I finish a task earlier than the range that drops out, I make a mental note to be more optimistic in the future on that project. If I’m nearing the far end of the range, I take pause and reassess what happened. Did the scope of the task blow up? Did I miss something up front? Is there too much technical debt in this project?
When you use SPEs, there’s no way to tell retrospectively (except in extreme cases) whether an estimate was actually good and the completion time was within an expected statistical variation, or if the estimate was bad and some part of the estimation process needs to be tuned.
We do not use estimates and actual's for any management metrics, this is for the developer to gauge their workload for the sprint. We know from our history that once a developer estimates about 40 hours of work for a two week sprint we don't allow them to take any more.
For us, estimates are the developers gauge to know when the sprint is full.
You're my hero. For real!
Baseball is a team sport, but that doesn't mean you have two people swinging one bat.
In basketball, players do "take off" certain plays. But the most valuable players are still contributing during that time. A good shooter can just stand at the 3-point line. Even if they don't do anything, they occupy a defender and make the whole offense better.
A developer won't be cranking out code 8 hours a day. But if they are available to answer questions, perform code reviews, and generally help the team, that's a valuable contribution.
A big part of the work is sometimes just fixing/improving workflow. There are tests to write, documentation, refactoring, warnings to look at, plugins to update, that wonky button padding to fix, all these little things that are not vital but stack negative impact.
Idle time is not just about healing the psyche. It also does that. But you run into problems from not having idle time much sooner than burnout, typically.
What is at stake is that the greedy algorithm for optimization does NOT work for complex systems. “I will make every individual person efficient, everyone is always working on something, look how good of a boss I am”—and you WILL fail to meet deadlines. And you will blame that failure on other people, or on the business constraints, because “well I did everything that I could to make the system efficient, the expectations that were put on me were unrealistic!”
The greedy algorithm is really obvious. Why would every part of the system doing less allow the system as a whole to do more? But it is also really wrong for any system that is large and complex enough to have the right sort of nonlinearities. If you’re managing a call center and everything is very linear—everyone has the same task day-in, day-out, the output of the team is directly changed by the output of every individual on that team—great, you can use the greedy algorithm. But if different people are working on different interrelated tasks then forget about it.
Because if you manage an interdependent system without creating idle time, soon you have every task falling into the proverbial “three priorities: Hot, Red Hot, and DO IT NOW.” You have that because you have chosen to create a system where there are large latencies in response to incoming tasks, so that those tasks are piling up.
I discoursed more on the abstract theory behind this in an answer on the Project Management Stack Exchange:
https://pm.stackexchange.com/questions/26651/why-do-all-the-...
I think it's similar in many ways to the complaints one overhears about roadworks. "Why do they take so long!? It's just 5 people stood around watching another dig a hole!". Software is a lot like that, you can't have everyone run off and work on all parts of the stack and domain at once, there's only a certain amount of parallelizable work.
I feel like you've misunderstood the critical replies you've received above. You may think you are profiting by trying to allocate every millisecond of the developers' time, but it comes at a great cost that is hard to see upfront, but is very very real.
Additionally, it would seem that you are assuming that the dev is doing something wrong by finishing early and doing nothing, when it seems to me that they are just acting on their incentives. If my incentives are to finish my tickets for the sprint, I'll do just that. Rarely am I incentivized to take others work; I'm not going to get promoted if my co-workers hate me for poaching their tasks. I agree that we should probably find work for said dev, lord knows I also get anxious without work, but the suggestion that we take our teammates work from them is one that many teammates will probably bristle at.
Finally, I have always found the focus on locking the sprint once we plan it a bit absurd. In agile, we acknowledge and even love that the ground under us is shifting constantly. We are always iterating in everything else, so why not the sprint? The idea that I should take others' tasks from them instead of finding something else that I can work on seemingly comes from this myopic focus on frozen sprints.
However, I would assume that is not your view! Maybe you can help me see why a focus on completing the sprint is more important than letting my coworkers do their assigned work. I might be a bit closed minded on this because of my experience, so any thoughts here would help me contextualize this!
For the locking sprints, that is a matter of protecting the developers from management and the customer. The product backlog can be moving target all day, but the sprint backlog needs to have some backbone so the developers have focus and are not pulled different directions every day. If the sprint backlog needs to change then the developers will come to me for help. Our history is from a very chaotic environment and the developers really like having some sanity/consistency with defining the sprint and holding it still. If the customer wants something else, then we can deal with that in the next sprint.
Sure, you’ll have to explain the optics to management when they ask “how come the devs get to control their own process instead of me,” but with your conviction in the Scrum Master role, I’m sure that wouldn’t be too big of a problem, and would allow for everything you and I are arguing for, right?
The scrum team should be acting as a team and the developer should work with the team to figure out how he aligns. That is part of the "Self Forming" stuff. The Scrum Master is not their boss and does not weigh in on the project implementation. They are more of the advocate for the team and the advocate for Agile/Scrum. e.g. Dealing with the Product Owner when they try to add stuff to the current sprint or Management saying everything is top priority. Technically we call that coaching the Scrum process, but I'm going to make sure my team has steady/predictable work and are not going to burn out.
There are many other reasons that this reasoning is misguided, but I'll leave them for now and instead point you to those smarter and better written than I am.
Luckily, there is a ton of writing on this. I'd start with "The Mythical Man Month" which explains that your reasoning is a fallacy with software engineering: https://archive.org/details/mythicalmanmonth00fred
I think 3 hours of high productivity is maximum for me too, the thing is it is very difficult to reach really high productivity, so I can wrap up my work in maybe 4-5 hours writing SQL and report (exclude the meetings and break/etc.) and still have energy to write code in my spare time for around 1-2 hours. How and when to achieve high productivity and enter the flow are pretty random for me.
If you can reach high productivity for 3 straight hours a day I'd envy you, because you probably achieve more than people (like me) who work 5-6 hours in sub-prime conditions. I'd rather to work full of energy for 3 hours during the morning, take break in the afternoon, and come back for another 1-2 hours. Much more enjoyable.
BTW I found that useless meetings drain energy really FAST.
I can't remember the last time I needed to respond to an email.
And they've all been very different jobs/industries - consultancy, startup and large company. Maybe part of it is the tech (C# .NET) or the location (England) but from talking to my friends in the industry the experience seems to be similar.
I miss the days when I could just sit down in front of a program, and just program for 6+ hours out of the day. I did that when I worked for a small startup. I talked to a boss for 30 minutes to an hour sometimes, but otherwise I was left to myself to build software.
Right now I work as an Architect/Support/Developer combo, and it feels like I get nothing real done most days. I'll have meetings at random times throughout the day, half of them status meetings, I'll get pinged at random times in the day by the business side asking to look into various things (I maintain the phone systems for three call centers, and various things don't happen the way they expect and they need us to look into it...we used to have a dedicated support guy for this, but he quit and they won't replaced him, it's been six months now). And then I need to look into our codebase for any of seven different internal phone applications I'm responsible for, figure out how to add the new enhancement requested by the business, and then write precise instructions for our offshore dev team of else it won't be done correctly (might as well have done it myself, half the time).
There are some days in which outside of the meetings, I'll fix a couple of tickets requested by the business side, and then feel like I have no mental energy for anything else.
Every once in awhile I get a taste of what it used to be like when I was productive when I work on projects at home, but even that has lots of distractions between my spouse and attention seeking dogs. I don't mind those distractions quite as much though. Usually. :)
I probably should find a small developer to work for again, where I can just be expected to code, but at my age I'm almost afraid to do that, since I know ageism is going to start limiting the dev jobs I can get before too much longer, and I could make a lot more money just embracing the management roles....but my brain wants to build cool things, not people.
You shouldn't be talking about hours at all. Points and team velocity help to account for all the overhead in a sprint. Once a team has a consistent velocity, they can talk about items in retro to speed up that velocity (drop a meeting, etc...).
I once had a manager who tried to break tasks down into 15 minute increments. There was a task that he argued was a 15 minute task. And yes, he was right assuming my computer was open, the right editor was up, the right project was pulled and up to date, the project was properly building, there were no updates to apply, and the list goes on.
Hours is just a bad way to plan. Unfortunately those who bill by hour are forced to plan that way.
And don't get me started on measuring velocity, especially across teams. Your environment sounds like its poisoned by middle management.
Anyway, thank God I left, but from what I hear from other mates in the industry it's not better in other companies in my area since they're all run by middle managers.
Maybe it's a problem specific to Germany where managers are always right and their authority is unquestionable.
> Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
> Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
If either of these requirements are not met, you're not being agile.
Some days I just can't get the programming wheels turning, and a lot of the time it's just because I keep getting interrupted or can't focus with noise around me. God forbid I work from home when I have a hard deadline so interruptions are at a minimum...
I’ve managed to get great clients for years+ working 20hrs/week. I’m briefly doing 40hrs/week right now and am definitely finding it draining!
One neat benefit of freelancing is that if you don’t feel like working, don’t! It’s a win win. You don’t work when you feel drained and the company doesn’t pay you for your least productive hours.
Best of luck!
Alternatively, I can be disinterested and I will be slacking for some period of times, could be weeks. I would add some doc here and there, fix a few bugs, discuss with colleagues, learn about new techs. But then, I feel guilty and anxious and overall not happy.
I wish I was able to be motivated everyday, work 7 hours of productive work and call it a day.
I haven't found a working mode where I feel productive and motivated for long period of times.
The problem I see is that reducing working time per day doesn't necessarily keep the same productivity. If I'm 3 hours productive in a 7 hour workday, I won't spend 3 hours productively in a 5 hour workday. My productive time is mostly random.
For me the solution is not feeling guilty about slacking 50% of the time, because it's mostly normal, and having a manager that understands that. As a manager in the future I definitely want to keep this attitude and want to be understanding myself and protect my developers.
Also in a 1hour meeting that felt completely unproductive for you, you might make a single comment that turns out very productive for the project overall. And reading up on new tech or watching conference videos on YouTube might feel like slacking, but it also improves your worth to the company.
For example, what if you play a complex video game that requires skillful choices and mental effort? You might be making split second decisions many thousands of times over an 8 hour time frame.
For me, it all boils down to being genuinely interested in what I'm doing (and you can't fake this). If it's a programming gig that I really enjoy, then I will want to do it from the moment I wake up until I goto sleep and this might be 16+ hours (with reasonable breaks for food, etc.) but there would be multiple productive 4+ hour stretches in that 1 day. The same could be said for a video game that I like.
If anything I feel less drained at the end of those programming sessions because it feels like you accomplished a lot, and you look forward to the next session (it's all positive feedback). It's almost like getting some type of runner's high, except for your mind.
I only find myself feeling drained when it feels like I have to force my way through the work. I have no idea how low level chemicals work in your brain but just based on personal experience I would guess it takes a lot more mental effort to do something you don't enjoy for many hours a day. If your day is filled with mostly negativity, that's going to be very draining. It's might be similar to how if you hang out with someone who does nothing but complain or has a negative spin on everything you end up feeling drained. I struggled with that for a long time (being the negative one). It helped to become mindful of these things so you can reprogram yourself and make decisions that avoid feeling that way.
Just based on what you wrote, you're saying you only work a few hours a day but then waste the rest of the day away in meetings and trying to look busy. I'm no psychologist but it sounds like you're spending a majority of your day in a stressful / negative mindset. It would really suck if you had to "fake work" for 4+ hours a day to look busy so you don't draw suspicion while also being constantly interrupted every time you try to start something. I'm 100% sure I would be drained if my work environment was the same as yours.
People are known to not be good at gauging their actual work hours. So, when people say they work so much, I'd be skeptical of those claims.
If you like remote work, that's cool, but your complaints are with shitty offices, not something inherent to onsite vs. remote work.
Why do you hate working from home? I hate working in an office and will never do it again.
> and don't want to have to rent a separate office space on my own dime.
Also, most companies will (and should) pay for remote workers to have an office outside of their house, if that's what they need. That's been my experience for the past 5 years anyways.
> your complaints are with shitty offices, not something inherent to onsite vs. remote work.
For myself and many others I've read accounts from, it's so much more than a 'real office'. It means no commute, no office drama, being able to talk with my wife in person during the day, make my own lunch... For people passionate about remote, it's more than a specialized office, but a whole different way of working.
That sounds about right for most workplaces I've been in, and it's probably a fairly sustainable pace for work that requires careful thought and concentration.
I remember reading about a consultant who advised struggling graduate students to spend no more than 18 hours a week working on their dissertations; on this schedule most of them finished in 6 months or less.
All hours between 10 and 6 are basically unproductive hours, because they get taken up by useless meetings and interruptions.
Any extra hour I work outside of that time, is worth basically 3 or 4 inside it. So working 10 instead of 8 hours practically triples my output.
I had a period of time where I worked entirely on my own "startup" for about 12 months. I worked nearly 7 days a week for (what I recall as) a lot of hours but I honestly don't know how many. This work was SO much fun. It was definitely still work but I don't think I've ever had more exhilaration than created and launching the projects I did in that year.
I then worked at a startup where we worked a solid 6 days a week for about 10 hours a day. That really consumed my life and wasn't very rewarding in my opinion. I learned a lot and made some really great connections to silicon valley investor types but the job consumed so much of my life and the startup wasn't successful at all.
The next stage in my life was the time I coded the most. I worked for one of the huge silicon valley software companies and they fostered a good work-life balance for the employees. We generally worked 8 hour days and no weekends ever. Also, the work environment was pleasant. I became good friends with my coworkers. I say that because I think that all contributed to the 8 hours not feeling extremely draining. I had a lot of energy left after work. During those two years I launched two websites in my spare time that were pretty heavy undertakings. I also dabbled in other projects. I worked a lot of nights and weekend on top of the corporate job. I could go several weeks without a single day off.
After that I worked at a startup for 2 years and another quasi-startup for 2 years after that. I really disliked both of those jobs and seemed to have very little drive to work on anything on my own time. I actually started playing and recording a lot more music in those years, even started a podcast. :)
I recently switched jobs to a larger company with an established app and it has a similar feel of the other big-corp job I held. Generally, I work 8 hour days, a little bit of weekend and night work but only around releases and deadlines. I also get along with the people in my office very well, it's fun to be at work.
I consider myself as an "emotional" developer. I kinda say it sarcastically but there is some truth to it. When I feel good about what I'm doing, I can lock in for many hours straight and it doesn't drain me that much.
A better strategy is to work 15-30 minutes and then take a few minutes break where you meditate.
Totally agree, but I've also worked in codebases where I spend a huge effort and don't get anywhere (these are usually codebases with dark corners which no one knows anything about).
From feedback I've had I'm generally regarded as pretty good at my job and highly productive but my current working hours leave me completely drained, to the point I go home and collapse on the sofa, make dinner and go to bed. And that's off an 8.5 hour day. It's at the point now where it's extremely likely I'll leave software for good.
Software to me is extremely mentally demanding and draining, it requires short burts of extreme concentration, but what is more draining is making up the remaining 4-5 hours looking busy. My experience of software work is that it doesn't scale linearly with number of hours. Unless you reach flow which is extremely rare in a business setting (thanks open-office / scrum) you can get the work done very quickly and then have large periods of unproductive time.
It's my experience that at most 2-3 hours is productively spent, the rest is wasted.
I meet software developers who advocate for, or don't mind, 8, 9, 10 hour days and I simply don't understand it, it's alien to me. Are they being productive all that time?
Edit: to clarify (since I've posted on this topic elsewhere today) the 8.5 hours include a 1 hour lunch break and Fridays are slightly shorter.